X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/8dd59f01de203f3f02c3f898a7015bb522a0e4bc..9a3558cbeb6ee199ec82220abc14feaa608c7a56:/lisp/bindings.el diff --git a/lisp/bindings.el b/lisp/bindings.el index df86965272..af94fcd9d8 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -138,8 +138,7 @@ corresponding to the mode line clicked." (defun mode-line-change-eol (event) "Cycle through the various possible kinds of end-of-line styles." (interactive "e") - (save-selected-window - (select-window (posn-window (event-start event))) + (with-selected-window (posn-window (event-start event)) (let ((eol (coding-system-eol-type buffer-file-coding-system))) (set-buffer-file-coding-system (cond ((eq eol 0) 'dos) ((eq eol 1) 'mac) (t 'unix)))))) @@ -156,7 +155,7 @@ corresponding to the mode line clicked." (setq desc (propertize mnemonic - 'help-echo (format "%s end-of-line; mouse-1 to cycle" + 'help-echo (format "End-of-line style: %s\nmouse-1 to cycle" (if (eq eol 0) "Unix-style LF" (if (eq eol 1) "Dos-style CRLF" (if (eq eol 2) "Mac-style CR" @@ -181,9 +180,11 @@ corresponding to the mode line clicked." (current-input-method (:propertize ("" current-input-method-title) help-echo (concat - "Input method: " + "Current input method: " current-input-method - ". mouse-2: disable, mouse-3: describe") + "\n\ +mouse-2: Disable input method\n\ +mouse-3: Describe current input method") local-map ,mode-line-input-method-map mouse-face mode-line-highlight)) ,(propertize @@ -194,11 +195,12 @@ corresponding to the mode line clicked." ;; Don't show this tip if the coding system is nil, ;; it reads like a bug, and is not useful anyway. (when buffer-file-coding-system - (if enable-multibyte-characters - (concat (symbol-name buffer-file-coding-system) - " buffer; mouse-1: describe coding system") - (concat "Unibyte " (symbol-name buffer-file-coding-system) - " buffer"))))) + (format "Buffer coding system %s\nmouse-1: describe coding system" + (if enable-multibyte-characters + (concat "(multi-byte): " + (symbol-name buffer-file-coding-system)) + (concat "(unibyte): " + (symbol-name buffer-file-coding-system))))))) 'mouse-face 'mode-line-highlight 'local-map mode-line-coding-system-map) (:eval (mode-line-eol-desc))) @@ -228,12 +230,12 @@ Normally nil in most modes, since there is no process to display.") (list (propertize "%1*" 'help-echo (purecopy (lambda (window object point) - (format "%sead-only: mouse-1 toggles" + (format "Buffer is %s\nmouse-1 toggles" (save-selected-window (select-window window) (if buffer-read-only - "R" - "Not r"))))) + "read-only" + "writable"))))) 'local-map (purecopy (make-mode-line-mouse-map 'mouse-1 #'mode-line-toggle-read-only)) @@ -241,7 +243,7 @@ Normally nil in most modes, since there is no process to display.") (propertize "%1+" 'help-echo (purecopy (lambda (window object point) - (format "%sodified: mouse-1 toggles" + (format "Buffer is %sodified\nmouse-1 toggles modified state" (save-selected-window (select-window window) (if (buffer-modified-p) @@ -257,15 +259,16 @@ Normally nil in most modes, since there is no process to display.") (defvar mode-line-remote (list (propertize "%1@" + 'mouse-face 'mode-line-highlight 'help-echo (purecopy (lambda (window object point) (format "%s" (save-selected-window (select-window window) - (concat - (if (file-remote-p default-directory) - "Remote: " - "Local: ") - default-directory))))))) + (concat + (if (file-remote-p default-directory) + "Current directory is remote: " + "Current directory is local: ") + default-directory))))))) "Mode-line flag to show if default-directory for current buffer is remote.") (make-variable-buffer-local 'mode-line-remote) @@ -279,11 +282,16 @@ buffer size, the line number and the column number.") (defvar mode-line-modes nil "Mode-line control for displaying major and minor modes.") +(defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\ +Menu of mode operations in the mode line.") + (defvar mode-line-major-mode-keymap (let ((map (make-sparse-keymap))) - (define-key map [mode-line down-mouse-1] 'mouse-major-mode-menu) + (define-key map [mode-line down-mouse-1] + '(menu-item "Menu Bar" ignore + :filter (lambda (_) (mouse-menu-major-mode-map)))) (define-key map [mode-line mouse-2] 'describe-mode) - (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1) + (define-key map [mode-line down-mouse-3] mode-line-mode-menu) map) "\ Keymap to display on major mode.") @@ -291,18 +299,36 @@ Keymap to display on major mode.") (let ((map (make-sparse-keymap))) (define-key map [mode-line down-mouse-1] 'mouse-minor-mode-menu) (define-key map [mode-line mouse-2] 'mode-line-minor-mode-help) - (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1) - (define-key map [header-line down-mouse-3] 'mode-line-mode-menu-1) + (define-key map [mode-line down-mouse-3] mode-line-mode-menu) + (define-key map [header-line down-mouse-3] mode-line-mode-menu) map) "\ Keymap to display on minor modes.") +(defvar mode-line-column-line-number-mode-map + (let ((map (make-sparse-keymap)) + (menu-map (make-sparse-keymap "Toggle Line and Column Number Display"))) + (define-key menu-map [line-number-mode] + `(menu-item ,(purecopy "Display Line Numbers") line-number-mode + :help "Toggle displaying line numbers in the mode-line" + :button (:toggle . line-number-mode))) + (define-key menu-map [column-number-mode] + `(menu-item ,(purecopy "Display Column Numbers") column-number-mode + :help "Toggle displaying column numbers in the mode-line" + :button (:toggle . column-number-mode))) + (define-key map [mode-line down-mouse-1] menu-map) + map) "\ +Keymap to display on column and line numbers.") + (let* ((help-echo ;; The multi-line message doesn't work terribly well on the ;; bottom mode line... Better ideas? ;; "\ ;; mouse-1: select window, mouse-2: delete others, mouse-3: delete, ;; drag-mouse-1: resize, C-mouse-2: split horizontally" - "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0") + "mouse-1: Select (drag to resize)\n\ +mouse-2: Make current window occupy the whole frame\n\ +mouse-3: Remove current window from display") + (recursive-edit-help-echo "Recursive edit, type C-M-c to get out") (dashes (propertize "--" 'help-echo help-echo)) (standard-mode-line-format (list @@ -324,32 +350,68 @@ Keymap to display on minor modes.") (propertize "-%-" 'help-echo help-echo))) (standard-mode-line-modes (list - (propertize "%[(" 'help-echo help-echo) + (propertize "%[" 'help-echo recursive-edit-help-echo) + (propertize "(" 'help-echo help-echo) `(:propertize ("" mode-name) - help-echo "mouse-1: major mode, mouse-2: major mode help, mouse-3: toggle minor modes" + help-echo "Major mode\n\ +mouse-1: Display major mode menu\n\ +mouse-2: Show help for major mode\n\ +mouse-3: Toggle minor modes" mouse-face mode-line-highlight local-map ,mode-line-major-mode-keymap) '("" mode-line-process) `(:propertize ("" minor-mode-alist) mouse-face mode-line-highlight - help-echo "mouse-1: minor mode, mouse-2: minor mode help, mouse-3: toggle minor modes" + help-echo "Minor mode\n\ +mouse-1: Display minor mode menu\n\ +mouse-2: Show help for minor mode\n\ +mouse-3: Toggle minor modes" local-map ,mode-line-minor-mode-keymap) - (propertize "%n" 'help-echo "mouse-2: widen" + (propertize "%n" 'help-echo "mouse-2: Remove narrowing from the current buffer" 'mouse-face 'mode-line-highlight 'local-map (make-mode-line-mouse-map 'mouse-2 #'mode-line-widen)) - (propertize ")%]--" 'help-echo help-echo))) + (propertize ")" 'help-echo help-echo) + (propertize "%]" 'help-echo recursive-edit-help-echo) + (propertize "--" 'help-echo help-echo))) (standard-mode-line-position - `((-3 ,(propertize "%p" 'help-echo help-echo)) + `((-3 ,(propertize + "%p" + 'local-map mode-line-column-line-number-mode-map + 'mouse-face 'mode-line-highlight + ;; XXX needs better description + 'help-echo "Size indication mode\n\ +mouse-1: Display Line and Column Mode Menu")) (size-indication-mode - (8 ,(propertize " of %I" 'help-echo help-echo))) + (8 ,(propertize + " of %I" + 'local-map mode-line-column-line-number-mode-map + 'mouse-face 'mode-line-highlight + ;; XXX needs better description + 'help-echo "Size indication mode\n\ +mouse-1: Display Line and Column Mode Menu"))) (line-number-mode ((column-number-mode - (10 ,(propertize " (%l,%c)" 'help-echo help-echo)) - (6 ,(propertize " L%l" 'help-echo help-echo)))) + (10 ,(propertize + " (%l,%c)" + 'local-map mode-line-column-line-number-mode-map + 'mouse-face 'mode-line-highlight + 'help-echo "Line number and Column number\n\ +mouse-1: Display Line and Column Mode Menu")) + (6 ,(propertize + " L%l" + 'local-map mode-line-column-line-number-mode-map + 'mouse-face 'mode-line-highlight + 'help-echo "Line Number\n\ +mouse-1: Display Line and Column Mode Menu")))) ((column-number-mode - (5 ,(propertize " C%c" 'help-echo help-echo)))))))) + (5 ,(propertize + " C%c" + 'local-map mode-line-column-line-number-mode-map + 'mouse-face 'mode-line-highlight + 'help-echo "Column number\n\ +mouse-1: Display Line and Column Mode Menu")))))))) (setq-default mode-line-format standard-mode-line-format) (put 'mode-line-format 'standard-value @@ -385,7 +447,9 @@ text properties for face, help-echo, and local-map to it." (list (propertize fmt 'face 'mode-line-buffer-id 'help-echo - (purecopy "mouse-1: previous buffer, mouse-3: next buffer") + (purecopy "Buffer name\n\ +mouse-1: previous buffer\n\ +mouse-3: next buffer") 'mouse-face 'mode-line-highlight 'local-map mode-line-buffer-identification-keymap))) @@ -435,19 +499,6 @@ Switch to the most recently selected buffer other than the current one." (select-window (posn-window (event-start event))) (previous-buffer))) -(defvar mode-line-mode-menu (make-sparse-keymap "Minor Modes") "\ -Menu of mode operations in the mode line.") - -(defun mode-line-mode-menu-1 (event) - (interactive "e") - (save-selected-window - (select-window (posn-window (event-start event))) - (let* ((selection (mode-line-mode-menu event)) - (binding (and selection (lookup-key mode-line-mode-menu - (vector (car selection)))))) - (if binding - (call-interactively binding))))) - (defmacro bound-and-true-p (var) "Return the value of symbol VAR if it is bound, else nil." `(and (boundp (quote ,var)) ,var)) @@ -456,43 +507,51 @@ Menu of mode operations in the mode line.") ;; Global ones can go on the menubar (Options --> Show/Hide). (define-key mode-line-mode-menu [overwrite-mode] `(menu-item ,(purecopy "Overwrite (Ovwrt)") overwrite-mode + :help "Overwrite mode: typed characters replace existing text" :button (:toggle . overwrite-mode))) (define-key mode-line-mode-menu [outline-minor-mode] `(menu-item ,(purecopy "Outline (Outl)") outline-minor-mode + ;; XXX: This needs a good, brief description. + :help "" :button (:toggle . (bound-and-true-p outline-minor-mode)))) (define-key mode-line-mode-menu [highlight-changes-mode] `(menu-item ,(purecopy "Highlight changes (Chg)") highlight-changes-mode + :help "Show changes in the buffer in a distinctive color" :button (:toggle . (bound-and-true-p highlight-changes-mode)))) (define-key mode-line-mode-menu [hide-ifdef-mode] `(menu-item ,(purecopy "Hide ifdef (Ifdef)") hide-ifdef-mode + :help "Show/Hide code within #ifdef constructs" :button (:toggle . (bound-and-true-p hide-ifdef-mode)))) (define-key mode-line-mode-menu [glasses-mode] `(menu-item ,(purecopy "Glasses (o^o)") glasses-mode + :help "Insert virtual separators to make long identifiers easy to read" :button (:toggle . (bound-and-true-p glasses-mode)))) (define-key mode-line-mode-menu [font-lock-mode] `(menu-item ,(purecopy "Font Lock") font-lock-mode + :help "Syntax coloring" :button (:toggle . font-lock-mode))) (define-key mode-line-mode-menu [flyspell-mode] `(menu-item ,(purecopy "Flyspell (Fly)") flyspell-mode + :help "Spell checking on the fly" :button (:toggle . (bound-and-true-p flyspell-mode)))) (define-key mode-line-mode-menu [auto-revert-tail-mode] `(menu-item ,(purecopy "Auto revert tail (Tail)") auto-revert-tail-mode + :help "Revert the tail of the buffer when buffer grows" :enable (buffer-file-name) :button (:toggle . (bound-and-true-p auto-revert-tail-mode)))) (define-key mode-line-mode-menu [auto-revert-mode] `(menu-item ,(purecopy "Auto revert (ARev)") auto-revert-mode + :help "Revert the buffer when the file on disk changes" :button (:toggle . (bound-and-true-p auto-revert-mode)))) (define-key mode-line-mode-menu [auto-fill-mode] `(menu-item ,(purecopy "Auto fill (Fill)") auto-fill-mode + :help "Automatically insert new lines" :button (:toggle . auto-fill-function))) (define-key mode-line-mode-menu [abbrev-mode] `(menu-item ,(purecopy "Abbrev (Abbrev)") abbrev-mode + :help "Automatically expand abbreviations" :button (:toggle . abbrev-mode))) -(defun mode-line-mode-menu (event) - (interactive "@e") - (x-popup-menu event mode-line-mode-menu)) - (defun mode-line-minor-mode-help (event) "Describe minor mode for EVENT on minor modes area of the mode line." (interactive "@e") @@ -508,12 +567,11 @@ Actually, STRING need not be a string; any possible mode-line element is okay. See `mode-line-format'.") ;; Don't use purecopy here--some people want to change these strings. (setq minor-mode-alist - (list - (list 'abbrev-mode " Abbrev") - '(overwrite-mode overwrite-mode) - (list 'auto-fill-function " Fill") - ;; not really a minor mode... - '(defining-kbd-macro " Def"))) + '((abbrev-mode " Abbrev") + (overwrite-mode overwrite-mode) + (auto-fill-function " Fill") + ;; not really a minor mode... + (defining-kbd-macro " Def"))) ;; These variables are used by autoloadable packages. ;; They are defined here so that they do not get overridden @@ -579,7 +637,7 @@ is okay. See `mode-line-format'.") "^No later matching history item$" "^No earlier matching history item$" "^End of history; no default available$" - "^End of history; no next item$" + "^End of defaults; no next item$" "^Beginning of history; no preceding item$" "^No recursive edit is in progress$" "^Changes to be undone are outside visible portion of buffer$" @@ -623,12 +681,6 @@ language you are using." ;; that we will not need to keep permanently. (garbage-collect) -;; Make all multibyte characters self-insert. -(let ((l (generic-character-list)) - (table (nth 1 global-map))) - (while l - (aset table (car l) 'self-insert-command) - (setq l (cdr l)))) (setq help-event-list '(help f1)) @@ -711,7 +763,7 @@ language you are using." ;; indent-for-tab-command). The alignment that indent-relative tries to ;; do doesn't make much sense here since the prompt messes it up. (define-key map "\t" 'self-insert-command) - (define-key minibuffer-local-map [C-tab] 'file-cache-minibuffer-complete)) + (define-key map [C-tab] 'file-cache-minibuffer-complete)) (define-key global-map "\C-u" 'universal-argument) (let ((i ?0))