comparison lisp/bindings.el @ 24985:e4f2a5d1dc28

(make-mode-line-mouse-sensitive): Add key definitions for `top-line'. (mode-line-format): Replace `mode-name' with `(:eval mode-line-mode-name)'. (mode-line-mode-name): New. (make-mode-line-mouse-sensitive): Don't change default value of `mode-name'. (make-mode-line-mouse-sensitive): Use down-mouse-3 instead of mouse-3 to pop up menus. (make-mode-line-mouse-sensitive): Pop mouse buffer menu over buffer name. (mode-line-buffer-menu-1): Removed. (mode-line-buffer-identification-keymap): New. (mode-line-buffer-menu-keymap): New. (mode-line-mode-menu-keymap): New. (mode-line-unbury-buffer): New. (mode-line-other-buffer): New. (mode-line-buffer-menu-1): New. (mode-line-mode-menu-1): New. (make-mode-line-mouse-sensitive): New.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 21 Jul 1999 21:43:03 +0000
parents 6f29d3fe8aa5
children e09cfa43a165
comparison
equal deleted inserted replaced
24984:1553432b90d5 24985:e4f2a5d1dc28
76 "Mode-line control for displaying info on process status. 76 "Mode-line control for displaying info on process status.
77 Normally nil in most modes, since there is no process to display.") 77 Normally nil in most modes, since there is no process to display.")
78 78
79 (make-variable-buffer-local 'mode-line-process) 79 (make-variable-buffer-local 'mode-line-process)
80 80
81 (defvar mode-line-modified (purecopy '("%1*%1+")) 81 (defconst mode-line-modified
82 (let ((s "%1*%1+")
83 (map (make-sparse-keymap)))
84 (define-key map [mode-line mouse-2]
85 (lambda (event)
86 (interactive "e")
87 (save-selected-window
88 (select-window (posn-window (event-start event)))
89 (toggle-read-only))))
90 (set-text-properties 0 (length s)
91 (list 'help-echo
92 "Read-only status: mouse-2 toggles it"
93 'local-map map)
94 s)
95 (list s))
82 "Mode-line control for displaying whether current buffer is modified.") 96 "Mode-line control for displaying whether current buffer is modified.")
83 97
84 (make-variable-buffer-local 'mode-line-modified) 98 (make-variable-buffer-local 'mode-line-modified)
85 99
86 (setq-default mode-line-format 100 (setq-default mode-line-format
90 'mode-line-frame-identification 104 'mode-line-frame-identification
91 'mode-line-buffer-identification 105 'mode-line-buffer-identification
92 (purecopy " ") 106 (purecopy " ")
93 'global-mode-string 107 'global-mode-string
94 (purecopy " %[(") 108 (purecopy " %[(")
95 'mode-name 'mode-line-process 'minor-mode-alist 109 '(:eval (mode-line-mode-name)) 'mode-line-process 'minor-mode-alist
96 (purecopy "%n") 110 (purecopy "%n")
97 (purecopy ")%]--") 111 (purecopy ")%]--")
98 '(which-func-mode ("" which-func-format "--")) 112 '(which-func-mode ("" which-func-format "--"))
99 (purecopy '(line-number-mode "L%l--")) 113 (purecopy '(line-number-mode "L%l--"))
100 (purecopy '(column-number-mode "C%c--")) 114 (purecopy '(column-number-mode "C%c--"))
112 (setq minor-mode-alist '((abbrev-mode " Abbrev") 126 (setq minor-mode-alist '((abbrev-mode " Abbrev")
113 (overwrite-mode overwrite-mode) 127 (overwrite-mode overwrite-mode)
114 (auto-fill-function " Fill") 128 (auto-fill-function " Fill")
115 ;; not really a minor mode... 129 ;; not really a minor mode...
116 (defining-kbd-macro " Def"))) 130 (defining-kbd-macro " Def")))
131
132 (defvar mode-line-buffer-identification-keymap nil
133 "Keymap for what is displayed by `mode-line-buffer-identification'.")
134
135 (defvar mode-line-minor-mode-keymap nil
136 "Keymap for what is displayed by `mode-line-mode-name'.")
137
138 (defvar mode-line-mode-menu-keymap nil
139 "Keymap for mode operations menu in the mode line.")
140
141 (defun mode-line-unbury-buffer ()
142 "Switch to the last buffer in the buffer list that is not hidden."
143 (interactive)
144 (let ((list (reverse (buffer-list))))
145 (while (eq (sref (buffer-name (car list)) 0) ? )
146 (setq list (cdr list)))
147 (switch-to-buffer (car list))))
148
149 (defun mode-line-other-buffer ()
150 "Switch to the most recently selected buffer other than the current one."
151 (interactive)
152 (switch-to-buffer (other-buffer)))
153
154 (defun mode-line-mode-menu-1 (event)
155 (interactive "e")
156 (save-selected-window
157 (select-window (posn-window (event-start event)))
158 (let* ((selection (mode-line-mode-menu event))
159 (binding (and selection (lookup-key mode-line-mode-menu
160 (vector (car selection))))))
161 (if binding
162 (call-interactively binding)))))
163
164 (defun mode-line-mode-name ()
165 "Return a string to display in the mode line for the current mode name."
166 (let (length (result mode-name))
167 (when mode-line-mouse-sensitive-p
168 (let ((local-map (get-text-property 0 'local-map result))
169 (help-echo (get-text-property 0 'help-echo result)))
170 (setq result (copy-sequence result))
171 ;; Add `local-map' property if there isn't already one.
172 (when (and (null local-map)
173 (null (next-single-property-change 0 'local-map result)))
174 (put-text-property 0 (length result)
175 'local-map mode-line-minor-mode-keymap result))
176 ;; Add `help-echo' property if there isn't already one.
177 (when (and (null help-echo)
178 (null (next-single-property-change 0 'help-echo result)))
179 (put-text-property 0 (length result)
180 'help-echo "mouse-3: minor mode menu" result))))
181 result))
182
183 (defvar mode-line-mouse-sensitive-p nil
184 "Non-nil means mode line has been made mouse-sensitive.")
185
186 (defun make-mode-line-mouse-sensitive ()
187 (when (and window-system
188 (not mode-line-mouse-sensitive-p))
189 (setq mode-line-mouse-sensitive-p t)
190 (require 'easymenu)
191 (easy-menu-define mode-line-mode-menu mode-line-mode-menu-keymap
192 "Menu of mode operations in the mode line."
193 '("Minor Modes"
194 ["Abbrev" abbrev-mode :active t :style toggle
195 :selected abbrev-mode]
196 ["Auto revert" auto-revert-mode :active t :style toggle
197 :selected auto-revert-mode]
198 ["Auto-fill" auto-fill-mode :active t :style toggle
199 :selected auto-fill-function]
200 ["Column number" column-number-mode :active t :style toggle
201 :selected column-number-mode]
202 ["Flyspell" flyspell-mode :active t :style toggle
203 :selected flyspell-mode]
204 ["Font-lock" font-lock-mode :active t :style toggle
205 :selected font-lock-mode]
206 ["Hide ifdef" hide-ifdef-mode :active t :style toggle
207 :selected hide-ifdef-mode]
208 ["Highlight changes" highlight-changes-mode :active t :style toggle
209 :selected highlight-changes-mode]
210 ["Line number" line-number-mode :active t :style toggle
211 :selected line-number-mode]
212 ["Outline" outline-minor-mode :active t :style toggle
213 :selected outline-minor-mode]
214 ["Overwrite" overwrite-mode :active t :style toggle
215 :selected overwrite-mode]))
216
217 ;; Add menu of buffer operations to the buffer identification part
218 ;; of the mode line.
219 (let ((map (make-sparse-keymap))
220 (s (copy-sequence "%12b")))
221 (define-key map [mode-line mouse-1] 'mode-line-other-buffer)
222 (define-key map [top-line mouse-1] 'mode-line-other-buffer)
223 (define-key map [mode-line M-mouse-2] 'mode-line-unbury-buffer)
224 (define-key map [top-line M-mouse-2] 'mode-line-unbury-buffer)
225 (define-key map [mode-line mouse-2] 'bury-buffer)
226 (define-key map [top-line mouse-2] 'bury-buffer)
227 (define-key map [mode-line down-mouse-3] 'mouse-buffer-menu)
228 (define-key map [top-line down-mouse-3] 'mouse-buffer-menu)
229 (setq mode-line-buffer-identification-keymap map)
230 (setq-default mode-line-buffer-identification (list s))
231 (put-text-property 0 (length s) 'face '(:weight bold) s)
232 (put-text-property 0 (length s) 'help-echo
233 "mouse-1: other buffer, mouse-2: prev, M-mouse-2: next, mouse-3: buffer menu" s)
234 (put-text-property 0 (length s) 'local-map map s))
235
236 ;; Menu of minor modes.
237 (let ((map (make-sparse-keymap)))
238 (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1)
239 (define-key map [top-line down-mouse-3] 'mode-line-mode-menu-1)
240 (setq mode-line-minor-mode-keymap map))
241
242 (force-mode-line-update)))
243
117 244
118 ;; These variables are used by autoloadable packages. 245 ;; These variables are used by autoloadable packages.
119 ;; They are defined here so that they do not get overridden 246 ;; They are defined here so that they do not get overridden
120 ;; by the loading of those packages. 247 ;; by the loading of those packages.
121 248