Mercurial > emacs
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 |