diff options
| author | Dave Love | 2000-01-07 14:16:07 +0000 |
|---|---|---|
| committer | Dave Love | 2000-01-07 14:16:07 +0000 |
| commit | dfdabcf9df0113511cecbeb04c3694da815753ab (patch) | |
| tree | 1db40d08bbb958258097f2cfed2ee406fbfe507d | |
| parent | 834938d20fe1fe26c376a8541ed8b2b26db1c9ad (diff) | |
| download | emacs-dfdabcf9df0113511cecbeb04c3694da815753ab.tar.gz emacs-dfdabcf9df0113511cecbeb04c3694da815753ab.zip | |
(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.
| -rw-r--r-- | lisp/bindings.el | 167 |
1 files changed, 94 insertions, 73 deletions
diff --git a/lisp/bindings.el b/lisp/bindings.el index ceb47a66ff5..113ce20ee3e 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el | |||
| @@ -46,10 +46,28 @@ | |||
| 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: |
| @@ -79,24 +97,11 @@ 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) |
| @@ -127,11 +132,23 @@ STRING is included in the mode line iff VARIABLE's value is non-nil. | |||
| 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'.") |
| @@ -191,56 +208,58 @@ Return a string to display in the mode line for the current mode name." | |||
| 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.") |
| 196 | 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))) | ||
| 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) |
| @@ -250,11 +269,13 @@ Menu of mode operations in the mode line.") | |||
| 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))) |