comparison lisp/bindings.el @ 27238:bfb9906d58b5

(make-mode-line-mouse2-map): New function. (mode-line-modified): Use it and simplify. (mode-line-mule-info): Provide help-echo info. (minor-mode-alist): Activate the strings. (make-mode-line-mouse-sensitive): Simplify for mode-line-buffer-identification.
author Dave Love <fx@gnu.org>
date Fri, 07 Jan 2000 14:16:07 +0000
parents a3f5452f911e
children 18b19e347f65
comparison
equal deleted inserted replaced
27237:aebe09bf25f8 27238:bfb9906d58b5
44 ;;; line as the defvar or defconst. 44 ;;; line as the defvar or defconst.
45 ;;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 45 ;;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
46 46
47 ;;; Code: 47 ;;; Code:
48 48
49 (defconst mode-line-mule-info 49 (defun make-mode-line-mouse2-map (f) "\
50 (purecopy '("" 50 Return a keymap with single entry for mouse-2 on mode line.
51 (current-input-method ("" current-input-method-title)) 51 This is defined to run function F with no args in the buffer
52 "%Z")) 52 corresponding to the mode line clicked."
53 (let ((map (make-sparse-keymap)))
54 (define-key map [mode-line mouse-2]
55 `(lambda (e)
56 (interactive "e")
57 (save-selected-window
58 (select-window
59 (posn-window (event-start e)))
60 (,f)
61 (force-mode-line-update))))
62 map))
63
64 ;; This might have a local-map to bring up a MULE menu or describe the
65 ;; current method. At least give the user a clue what the field is.
66 (defvar mode-line-mule-info
67 `(""
68 (current-input-method ("" (propertize current-input-method-title
69 'help-echo "Input method")))
70 ,(propertize "%Z" 'help-echo (purecopy "Coding system information")))
53 "Mode-line control for displaying information of multilingual environment. 71 "Mode-line control for displaying information of multilingual environment.
54 Normally it displays current input method (if any activated) and 72 Normally it displays current input method (if any activated) and
55 mnemonics of the following coding systems: 73 mnemonics of the following coding systems:
56 coding system for saving or writing the current buffer 74 coding system for saving or writing the current buffer
57 coding system for keyboard input (if Emacs is running on terminal) 75 coding system for keyboard input (if Emacs is running on terminal)
77 Mode-line control for displaying info on process status. 95 Mode-line control for displaying info on process status.
78 Normally nil in most modes, since there is no process to display.") 96 Normally nil in most modes, since there is no process to display.")
79 97
80 (make-variable-buffer-local 'mode-line-process) 98 (make-variable-buffer-local 'mode-line-process)
81 99
82 (defconst mode-line-modified 100 (defvar mode-line-modified
83 (let ((s "%1*%1+") 101 (list (propertize
84 (map (make-sparse-keymap))) 102 "%1*%1+"
85 (define-key map [mode-line mouse-2] 103 'help-echo (purecopy "Read-only status: mouse-2 toggles it")
86 (lambda (event) 104 'local-map (purecopy (make-mode-line-mouse2-map #'toggle-read-only))))
87 (interactive "e")
88 (save-selected-window
89 (select-window (posn-window (event-start event)))
90 (let ((binding (key-binding "\C-x\C-q")))
91 (if binding
92 (funcall binding)
93 (toggle-read-only))))))
94 (set-text-properties 0 (length s)
95 (list 'help-echo
96 "Read-only status: mouse-2 toggles it"
97 'local-map map)
98 s)
99 (list s))
100 "Mode-line control for displaying whether current buffer is modified.") 105 "Mode-line control for displaying whether current buffer is modified.")
101 106
102 (make-variable-buffer-local 'mode-line-modified) 107 (make-variable-buffer-local 'mode-line-modified)
103 108
104 (setq-default mode-line-format 109 (setq-default mode-line-format
125 STRING is included in the mode line iff VARIABLE's value is non-nil. 130 STRING is included in the mode line iff VARIABLE's value is non-nil.
126 131
127 Actually, STRING need not be a string; any possible mode-line element 132 Actually, STRING need not be a string; any possible mode-line element
128 is okay. See `mode-line-format'.") 133 is okay. See `mode-line-format'.")
129 ;; Don't use purecopy here--some people want to change these strings. 134 ;; Don't use purecopy here--some people want to change these strings.
130 (setq minor-mode-alist '((abbrev-mode " Abbrev") 135 (setq minor-mode-alist
131 (overwrite-mode overwrite-mode) 136 (list
132 (auto-fill-function " Fill") 137 (list 'abbrev-mode
133 ;; not really a minor mode... 138 (propertize " Abbrev"
134 (defining-kbd-macro " Def"))) 139 'help-echo (purecopy
140 "mouse-2: turn off Abbrev mode")
141 'local-map (purecopy (make-mode-line-mouse2-map
142 #'abbrev-mode))))
143 '(overwrite-mode overwrite-mode)
144 (list 'auto-fill-function
145 (propertize " Fill"
146 'help-echo (purecopy
147 "mouse-2: turn off Autofill mode")
148 'local-map (purecopy (make-mode-line-mouse2-map
149 #'auto-fill-mode))))
150 ;; not really a minor mode...
151 '(defining-kbd-macro " Def")))
135 152
136 (defvar mode-line-buffer-identification-keymap nil "\ 153 (defvar mode-line-buffer-identification-keymap nil "\
137 Keymap for what is displayed by `mode-line-buffer-identification'.") 154 Keymap for what is displayed by `mode-line-buffer-identification'.")
138 155
139 (defvar mode-line-minor-mode-keymap nil "\ 156 (defvar mode-line-minor-mode-keymap nil "\
189 `(and (boundp (quote ,var)) ,var)) 206 `(and (boundp (quote ,var)) ,var))
190 207
191 (defvar mode-line-mouse-sensitive-p nil "\ 208 (defvar mode-line-mouse-sensitive-p nil "\
192 Non-nil means mode line has been made mouse-sensitive.") 209 Non-nil means mode line has been made mouse-sensitive.")
193 210
194 (defvar mode-line-mode-menu nil "\ 211 (defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\
195 Menu of mode operations in the mode line.") 212 Menu of mode operations in the mode line.")
213
214 ;; These bindings were defined inside
215 ;; `make-mode-line-mouse-sensitive', but then invoking `x-popup-menu'
216 ;; with `mode-line-mode-menu' lost because the menu items were in
217 ;; purespace.
218 (define-key mode-line-mode-menu [abbrev-mode]
219 `(menu-item ,(purecopy "Abbrev") abbrev-mode
220 :button (:toggle . abbrev-mode)))
221 (define-key mode-line-mode-menu [auto-revert-mode]
222 `(menu-item ,(purecopy "Auto revert") auto-revert-mode
223 :button (:toggle . auto-revert-mode)))
224 (define-key mode-line-mode-menu [auto-fill-mode]
225 `(menu-item ,(purecopy "Auto-fill") auto-fill-mode
226 :button (:toggle . auto-fill-function)))
227 (define-key mode-line-mode-menu [column-number-mode]
228 `(menu-item ,(purecopy "Column number") column-number-mode
229 :button (:toggle . column-number-mode)))
230 (define-key mode-line-mode-menu [flyspell-mode]
231 `(menu-item ,(purecopy "Flyspell") flyspell-mode
232 :button (:toggle . (bound-and-true-p flyspell-mode))))
233 (define-key mode-line-mode-menu [font-lock-mode]
234 `(menu-item ,(purecopy "Font-lock") font-lock-mode
235 :button (:toggle . font-lock-mode)))
236 (define-key mode-line-mode-menu [hide-ifdef-mode]
237 `(menu-item ,(purecopy "Hide ifdef") hide-ifdef-mode
238 :button (:toggle . (bound-and-true-p hide-ifdef-mode))))
239 (define-key mode-line-mode-menu [highlight-changes-mode]
240 `(menu-item ,(purecopy "Highlight changes") highlight-changes-mode
241 :button (:toggle . highlight-changes-mode)))
242 (define-key mode-line-mode-menu [line-number-mode]
243 `(menu-item ,(purecopy "Line number") line-number-mode
244 :button (:toggle . line-number-mode)))
245 (define-key mode-line-mode-menu [outline-minor-mode]
246 `(menu-item ,(purecopy "Outline") outline-minor-mode
247 :button (:toggle . (bound-and-true-p outline-minor-mode))))
248 (define-key mode-line-mode-menu [overwrite-mode]
249 `(menu-item ,(purecopy "Overwrite") overwrite-mode
250 :button (:toggle . overwrite-mode)))
196 251
197 (defun make-mode-line-mouse-sensitive () 252 (defun make-mode-line-mouse-sensitive ()
198 (when (and window-system 253 (when (and window-system
199 (not mode-line-mouse-sensitive-p)) 254 (not mode-line-mouse-sensitive-p))
200 (setq mode-line-mouse-sensitive-p t) 255 (setq mode-line-mouse-sensitive-p t)
201 (let ((map (make-sparse-keymap "Minor Modes"))) 256 (defun mode-line-mode-menu (event)
202 (define-key map [abbrev-mode] 257 (interactive "@e")
203 '(menu-item "Abbrev" abbrev-mode 258 (x-popup-menu event mode-line-mode-menu))
204 :button (:toggle . abbrev-mode)))
205 (define-key map [auto-revert-mode]
206 '(menu-item "Auto revert" auto-revert-mode
207 :button (:toggle . (bound-and-true-p auto-revert-mode))))
208 (define-key map [auto-fill-mode]
209 '(menu-item "Auto-fill" auto-fill-mode
210 :button (:toggle . auto-fill-function)))
211 (define-key map [column-number-mode]
212 '(menu-item "Column number" column-number-mode
213 :button (:toggle . column-number-mode)))
214 (define-key map [flyspell-mode]
215 '(menu-item "Flyspell" flyspell-mode
216 :button (:toggle . (bound-and-true-p flyspell-mode))))
217 (define-key map [font-lock-mode]
218 '(menu-item "Font-lock" font-lock-mode
219 :button (:toggle . font-lock-mode)))
220 (define-key map [hide-ifdef-mode]
221 '(menu-item "Hide ifdef" hide-ifdef-mode
222 :button (:toggle . (bound-and-true-p hide-ifdef-mode))))
223 (define-key map [highlight-changes-mode]
224 '(menu-item "Highlight changes" highlight-changes-mode
225 :button (:toggle . (bound-and-true-p highlight-changes-mode))))
226 (define-key map [line-number-mode]
227 '(menu-item "Line number" line-number-mode
228 :button (:toggle . line-number-mode)))
229 (define-key map [outline-minor-mode]
230 '(menu-item "Outline" outline-minor-mode
231 :button (:toggle . (bound-and-true-p outline-minor-mode))))
232 (define-key map [overwrite-mode]
233 '(menu-item "Overwrite" overwrite-mode
234 :button (:toggle . overwrite-mode)))
235 (setq mode-line-mode-menu (copy-keymap map))
236 (defun mode-line-mode-menu (event)
237 (interactive "@e")
238 (x-popup-menu event mode-line-mode-menu)))
239 259
240 ;; Add menu of buffer operations to the buffer identification part 260 ;; Add menu of buffer operations to the buffer identification part
241 ;; of the mode line. 261 ;; of the mode line.
242 (let ((map (make-sparse-keymap)) 262 (let ((map (make-sparse-keymap)))
243 (s (copy-sequence "%12b")))
244 (define-key map [mode-line mouse-1] 'mode-line-other-buffer) 263 (define-key map [mode-line mouse-1] 'mode-line-other-buffer)
245 (define-key map [header-line mouse-1] 'mode-line-other-buffer) 264 (define-key map [header-line mouse-1] 'mode-line-other-buffer)
246 (define-key map [mode-line M-mouse-2] 'mode-line-unbury-buffer) 265 (define-key map [mode-line M-mouse-2] 'mode-line-unbury-buffer)
247 (define-key map [header-line M-mouse-2] 'mode-line-unbury-buffer) 266 (define-key map [header-line M-mouse-2] 'mode-line-unbury-buffer)
248 (define-key map [mode-line mouse-2] 'bury-buffer) 267 (define-key map [mode-line mouse-2] 'bury-buffer)
249 (define-key map [header-line mouse-2] 'bury-buffer) 268 (define-key map [header-line mouse-2] 'bury-buffer)
250 (define-key map [mode-line down-mouse-3] 'mouse-buffer-menu) 269 (define-key map [mode-line down-mouse-3] 'mouse-buffer-menu)
251 (define-key map [header-line down-mouse-3] 'mouse-buffer-menu) 270 (define-key map [header-line down-mouse-3] 'mouse-buffer-menu)
252 (setq mode-line-buffer-identification-keymap map) 271 (setq mode-line-buffer-identification-keymap map)
253 (setq-default mode-line-buffer-identification (list s)) 272 (setq-default mode-line-buffer-identification
254 (put-text-property 0 (length s) 'face '(:weight bold) s) 273 (list (propertize "%12b"
255 (put-text-property 0 (length s) 'help-echo 274 'face '(:weight bold)
256 "mouse-1: other buffer, mouse-2: prev, M-mouse-2: next, mouse-3: buffer menu" s) 275 'help-echo
257 (put-text-property 0 (length s) 'local-map map s)) 276 "mouse-1: other buffer, mouse-2: \
277 prev, M-mouse-2: next, mouse-3: buffer menu"
278 'local-map map))))
258 279
259 ;; Menu of minor modes. 280 ;; Menu of minor modes.
260 (let ((map (make-sparse-keymap))) 281 (let ((map (make-sparse-keymap)))
261 (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1) 282 (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
262 (define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1) 283 (define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1)