(defvar mode-line-mule-info
`(""
(current-input-method
- (:eval
- ,(purecopy
- '(propertize current-input-method-title
- 'help-echo (concat
- "Input method: "
- current-input-method
- ". mouse-2: disable, mouse-3: describe")
- 'local-map mode-line-input-method-map))))
+ (:propertize ("" current-input-method-title)
+ help-echo (concat
+ "Input method: "
+ current-input-method
+ ". mouse-2: disable, mouse-3: describe")
+ local-map ,mode-line-input-method-map))
,(propertize
"%Z"
'help-echo
- (purecopy (lambda (window object point)
- (save-window-excursion
- (select-window window)
- ;; 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-3: describe coding system")
- (concat "Unibyte "
- (symbol-name buffer-file-coding-system)
- " buffer"))))))
+ #'(lambda (window object point)
+ (with-current-buffer (window-buffer window)
+ ;; 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-3: describe coding system")
+ (concat "Unibyte " (symbol-name buffer-file-coding-system)
+ " buffer")))))
'local-map mode-line-coding-system-map))
"Mode-line control for displaying information of multilingual environment.
Normally it displays current input method (if any activated) and
(defvar mode-line-modes nil
"Mode-line control for displaying major and minor modes.")
+(defvar mode-line-minor-mode-keymap nil "\
+Keymap to display on major and minor modes.")
+
+;; Menu of minor modes.
+(let ((map (make-sparse-keymap)))
+ (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)
+ (setq mode-line-minor-mode-keymap map))
+
(let* ((help-echo
;; The multi-line message doesn't work terribly well on the
;; bottom mode line... Better ideas?
(setq-default mode-line-modes
(list
(propertize " %[(" 'help-echo help-echo)
- '(:eval (mode-line-mode-name)) 'mode-line-process 'minor-mode-alist
+ `(:propertize ("" mode-name mode-line-process minor-mode-alist)
+ help-echo "mouse-3: minor mode menu"
+ local-map ,mode-line-minor-mode-keymap)
(propertize "%n" 'help-echo "mouse-2: widen"
'local-map (make-mode-line-mouse-map
'mouse-2 #'mode-line-widen))
(propertize ")%]--" 'help-echo help-echo)))
- (setq-default mode-line-position
+ (setq-default mode-line-position
`((line-number-mode (,(propertize "L%l" 'help-echo help-echo) ,dashes))
(column-number-mode (,(propertize "C%c" 'help-echo help-echo) ,dashes))
(-3 . ,(propertize "%p" 'help-echo help-echo)))))
(defvar mode-line-buffer-identification-keymap nil "\
Keymap for what is displayed by `mode-line-buffer-identification'.")
-(defvar mode-line-minor-mode-keymap nil "\
-Keymap for what is displayed by `mode-line-mode-name'.")
+(defun last-buffer () "\
+Return the last non-hidden buffer in the buffer list."
+ (let ((list (reverse (buffer-list))))
+ (while (eq (aref (buffer-name (car list)) 0) ? )
+ (setq list (cdr list)))
+ (car list)))
-(defvar mode-line-mode-menu-keymap nil "\
-Keymap for mode operations menu in the mode line.")
+(defun unbury-buffer () "\
+Switch to the last buffer in the buffer list."
+ (interactive)
+ (switch-to-buffer (last-buffer)))
(defun mode-line-unbury-buffer (event) "\
-Switch to the last buffer in the buffer list that is not hidden."
+Call `unbury-buffer' in this window."
(interactive "e")
(save-selected-window
(select-window (posn-window (event-start event)))
- (let ((list (reverse (buffer-list))))
- (while (eq (aref (buffer-name (car list)) 0) ? )
- (setq list (cdr list)))
- (switch-to-buffer (car list)))))
+ (unbury-buffer)))
(defun mode-line-bury-buffer (event) "\
-Like bury-buffer, but temporarily select EVENT's window."
+Like `bury-buffer', but temporarily select EVENT's window."
(interactive "e")
(save-selected-window
(select-window (posn-window (event-start event)))
(if binding
(call-interactively binding)))))
-(defun mode-line-mode-name () "\
-Return a string to display in the mode line for the current mode name."
- (when (stringp mode-name)
- (let ((local-map (get-text-property 0 'local-map mode-name))
- (help-echo (get-text-property 0 'help-echo mode-name)))
- ;; For correctness, we shouldn't modify mode-name. But adding some
- ;; text-properties to those mode-name strings can't hurt, really, and
- ;; furthermore, by doing it in-place, we make sure that we don't need to
- ;; do the work over and over and over and .... -stef
- (unless (and local-map help-echo)
- (setq mode-name (copy-sequence mode-name)))
- ;; Add `local-map' property if there isn't already one.
- (unless (or local-map
- (next-single-property-change 0 'local-map mode-name))
- (put-text-property 0 (length mode-name)
- 'local-map mode-line-minor-mode-keymap mode-name)
- ;; Add `help-echo' property if there isn't already one.
- (unless (or help-echo
- (next-single-property-change 0 'help-echo mode-name))
- (put-text-property 0 (length mode-name) 'help-echo
- "mouse-3: minor mode menu" mode-name)))))
- mode-name)
-
(defmacro bound-and-true-p (var)
"Return the value of symbol VAR if it is bound, else nil."
`(and (boundp (quote ,var)) ,var))
(define-key mode-line-mode-menu [overwrite-mode]
- `(menu-item ,(purecopy "Overwrite") overwrite-mode
+ `(menu-item ,(purecopy "Overwrite (Ovwrt)") overwrite-mode
:button (:toggle . overwrite-mode)))
(define-key mode-line-mode-menu [outline-minor-mode]
- `(menu-item ,(purecopy "Outline") outline-minor-mode
+ `(menu-item ,(purecopy "Outline (Outl)") outline-minor-mode
:button (:toggle . (bound-and-true-p outline-minor-mode))))
(define-key mode-line-mode-menu [line-number-mode]
`(menu-item ,(purecopy "Line number") line-number-mode
:button (:toggle . line-number-mode)))
(define-key mode-line-mode-menu [highlight-changes-mode]
- `(menu-item ,(purecopy "Highlight changes") highlight-changes-mode
+ `(menu-item ,(purecopy "Highlight changes (Chg)") highlight-changes-mode
:button (:toggle . highlight-changes-mode)))
(define-key mode-line-mode-menu [glasses-mode]
- `(menu-item ,(purecopy "Glasses") glasses-mode
+ `(menu-item ,(purecopy "Glasses (o^o)") glasses-mode
:button (:toggle . (bound-and-true-p glasses-mode))))
(define-key mode-line-mode-menu [hide-ifdef-mode]
- `(menu-item ,(purecopy "Hide ifdef") hide-ifdef-mode
+ `(menu-item ,(purecopy "Hide ifdef (Ifdef)") hide-ifdef-mode
:button (:toggle . (bound-and-true-p hide-ifdef-mode))))
(define-key mode-line-mode-menu [font-lock-mode]
`(menu-item ,(purecopy "Font-lock") font-lock-mode
:button (:toggle . font-lock-mode)))
(define-key mode-line-mode-menu [flyspell-mode]
- `(menu-item ,(purecopy "Flyspell") flyspell-mode
+ `(menu-item ,(purecopy "Flyspell (Fly)") flyspell-mode
:button (:toggle . (bound-and-true-p flyspell-mode))))
(define-key mode-line-mode-menu [column-number-mode]
`(menu-item ,(purecopy "Column number") column-number-mode
:button (:toggle . column-number-mode)))
(define-key mode-line-mode-menu [auto-fill-mode]
- `(menu-item ,(purecopy "Auto-fill") auto-fill-mode
+ `(menu-item ,(purecopy "Auto-fill (Fill)") auto-fill-mode
:button (:toggle . auto-fill-function)))
(define-key mode-line-mode-menu [auto-revert-mode]
- `(menu-item ,(purecopy "Auto revert") auto-revert-mode
+ `(menu-item ,(purecopy "Auto revert (ARev)") auto-revert-mode
:button (:toggle . auto-revert-mode)))
(define-key mode-line-mode-menu [abbrev-mode]
- `(menu-item ,(purecopy "Abbrev") abbrev-mode
+ `(menu-item ,(purecopy "Abbrev (Abbrev)") abbrev-mode
:button (:toggle . abbrev-mode)))
(defun mode-line-mode-menu (event)
(setq-default mode-line-buffer-identification
(propertized-buffer-identification "%12b"))
-;; Menu of minor modes.
-(let ((map (make-sparse-keymap)))
- (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)
- (setq mode-line-minor-mode-keymap map))
-
(defvar minor-mode-alist nil "\
Alist saying how to show minor modes in the mode line.
Each element looks like (VARIABLE STRING);
;; Don't use purecopy here--some people want to change these strings.
(setq minor-mode-alist
(list
- (list 'abbrev-mode
- (propertize " Abbrev"
- 'help-echo (purecopy "mouse-3: minor mode menu")
- 'local-map mode-line-minor-mode-keymap))
+ (list 'abbrev-mode " Abbrev")
'(overwrite-mode overwrite-mode)
- (list 'auto-fill-function
- (propertize " Fill"
- 'help-echo (purecopy "mouse-3: minor mode menu")
- 'local-map mode-line-minor-mode-keymap))
+ (list 'auto-fill-function " Fill")
;; not really a minor mode...
'(defining-kbd-macro " Def")))
(define-key function-key-map [C-S-kp-home] [C-S-home])
(define-key function-key-map [C-S-kp-up] [C-S-up])
(define-key function-key-map [C-S-kp-prior] [C-S-prior])
-(define-key function-key-map [S-kp-1] [S-end])
-(define-key function-key-map [S-kp-2] [S-down])
-(define-key function-key-map [S-kp-3] [S-next])
-(define-key function-key-map [S-kp-4] [S-left])
-(define-key function-key-map [S-kp-6] [S-right])
-(define-key function-key-map [S-kp-7] [S-home])
-(define-key function-key-map [S-kp-8] [S-up])
-(define-key function-key-map [S-kp-9] [S-prior])
+;; Don't bind shifted keypad numeric keys, they reportedly
+;; interfere with the feature of some keyboards to produce
+;; numbers when NumLock is off.
+;(define-key function-key-map [S-kp-1] [S-end])
+;(define-key function-key-map [S-kp-2] [S-down])
+;(define-key function-key-map [S-kp-3] [S-next])
+;(define-key function-key-map [S-kp-4] [S-left])
+;(define-key function-key-map [S-kp-6] [S-right])
+;(define-key function-key-map [S-kp-7] [S-home])
+;(define-key function-key-map [S-kp-8] [S-up])
+;(define-key function-key-map [S-kp-9] [S-prior])
(define-key function-key-map [C-S-kp-1] [C-S-end])
(define-key function-key-map [C-S-kp-2] [C-S-down])
(define-key function-key-map [C-S-kp-3] [C-S-next])