-(defvar mode-line-mouse-sensitive-p nil "\
-Non-nil means mode line has been made mouse-sensitive.")
-
-(defvar mode-line-mode-menu nil "\
-Menu of mode operations in the mode line.")
-
-(defun make-mode-line-mouse-sensitive ()
- (when (and window-system
- (not mode-line-mouse-sensitive-p))
- (setq mode-line-mouse-sensitive-p t)
- (let ((map (make-sparse-keymap "Minor Modes")))
- (define-key map [abbrev-mode]
- '(menu-item "Abbrev" abbrev-mode
- :active t :style toggle :selected abbrev-mode))
- (define-key map [auto-revert-mode]
- '(menu-item "Auto revert" auto-revert-mode
- :active t :style toggle
- :selected (bound-and-true-p auto-revert-mode)))
- (define-key map [auto-fill-mode]
- '(menu-item "Auto-fill" auto-fill-mode
- :active t :style toggle :selected auto-fill-function))
- (define-key map [column-number-mode]
- '(menu-item "Column number" column-number-mode
- :active t :style toggle :selected column-number-mode))
- (define-key map [flyspell-mode]
- '(menu-item "Flyspell" flyspell-mode
- :active t :style toggle
- :selected (bound-and-true-p flyspell-mode)))
- (define-key map [font-lock-mode]
- '(menu-item "Font-lock" font-lock-mode
- :active t :style toggle :selected font-lock-mode))
- (define-key map [hide-ifdef-mode]
- '(menu-item "Hide ifdef" hide-ifdef-mode
- :active t :style toggle
- :selected (bound-and-true-p hide-ifdef-mode)))
- (define-key map [highlight-changes-mode]
- '(menu-item "Highlight changes" highlight-changes-mode
- :active t :style toggle
- :selected (bound-and-true-p highlight-changes-mode)))
- (define-key map [line-number-mode]
- '(menu-item "Line number" line-number-mode
- :active t :style toggle :selected line-number-mode))
- (define-key map [outline-minor-mode]
- '(menu-item "Outline" outline-minor-mode
- :active t :style toggle
- :selected (bound-and-true-p outline-minor-mode)))
- (define-key map [overwrite-mode]
- '(menu-item "Overwrite" overwrite-mode
- :active t :style toggle :selected overwrite-mode))
- (setq mode-line-mode-menu map)
- (defun mode-line-mode-menu (event)
- (interactive "@e")
- (x-popup-menu event mode-line-mode-menu)))
-
- ;; Add menu of buffer operations to the buffer identification part
- ;; of the mode line.
- (let ((map (make-sparse-keymap))
- (s (copy-sequence "%12b")))
- (define-key map [mode-line mouse-1] 'mode-line-other-buffer)
- (define-key map [header-line mouse-1] 'mode-line-other-buffer)
- (define-key map [mode-line M-mouse-2] 'mode-line-unbury-buffer)
- (define-key map [header-line M-mouse-2] 'mode-line-unbury-buffer)
- (define-key map [mode-line mouse-2] 'bury-buffer)
- (define-key map [header-line mouse-2] 'bury-buffer)
- (define-key map [mode-line down-mouse-3] 'mouse-buffer-menu)
- (define-key map [header-line down-mouse-3] 'mouse-buffer-menu)
- (setq mode-line-buffer-identification-keymap map)
- (setq-default mode-line-buffer-identification (list s))
- (put-text-property 0 (length s) 'face '(:weight bold) s)
- (put-text-property 0 (length s) 'help-echo
- "mouse-1: other buffer, mouse-2: prev, M-mouse-2: next, mouse-3: buffer menu" s)
- (put-text-property 0 (length s) 'local-map map s))
-
- ;; 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))
-
- (force-mode-line-update)))
-
+(define-key mode-line-mode-menu [abbrev-mode]
+ `(menu-item ,(purecopy "Abbrev") abbrev-mode
+ :button (:toggle . abbrev-mode)))
+(define-key mode-line-mode-menu [auto-revert-mode]
+ `(menu-item ,(purecopy "Auto revert") auto-revert-mode
+ :button (:toggle . auto-revert-mode)))
+(define-key mode-line-mode-menu [auto-fill-mode]
+ `(menu-item ,(purecopy "Auto-fill") auto-fill-mode
+ :button (:toggle . auto-fill-function)))
+(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 [flyspell-mode]
+ `(menu-item ,(purecopy "Flyspell") flyspell-mode
+ :button (:toggle . (bound-and-true-p flyspell-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 [hide-ifdef-mode]
+ `(menu-item ,(purecopy "Hide ifdef") hide-ifdef-mode
+ :button (:toggle . (bound-and-true-p hide-ifdef-mode))))
+(define-key mode-line-mode-menu [highlight-changes-mode]
+ `(menu-item ,(purecopy "Highlight changes") highlight-changes-mode
+ :button (:toggle . highlight-changes-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 [outline-minor-mode]
+ `(menu-item ,(purecopy "Outline") outline-minor-mode
+ :button (:toggle . (bound-and-true-p outline-minor-mode))))
+(define-key mode-line-mode-menu [overwrite-mode]
+ `(menu-item ,(purecopy "Overwrite") overwrite-mode
+ :button (:toggle . overwrite-mode)))
+
+(defun mode-line-mode-menu (event)
+ (interactive "@e")
+ (x-popup-menu event mode-line-mode-menu))
+
+;; Add menu of buffer operations to the buffer identification part
+;; of the mode line.
+(let ((map (make-sparse-keymap)))
+ (define-key map [mode-line mouse-1] 'mode-line-other-buffer)
+ (define-key map [header-line mouse-1] 'mode-line-other-buffer)
+ (define-key map [mode-line M-mouse-2] 'mode-line-unbury-buffer)
+ (define-key map [header-line M-mouse-2] 'mode-line-unbury-buffer)
+ (define-key map [mode-line mouse-2] 'bury-buffer)
+ (define-key map [header-line mouse-2] 'bury-buffer)
+ (define-key map [mode-line down-mouse-3] 'mouse-buffer-menu)
+ (define-key map [header-line down-mouse-3] 'mouse-buffer-menu)
+ (setq mode-line-buffer-identification-keymap map))
+
+(defun propertized-buffer-identification (fmt)
+ "Return a list suitable for `mode-line-buffer-identification'.
+FMT is a format specifier such as \"%12b\". This function adds
+text properties for face, help-echo, and local-map to it."
+ (list (propertize fmt
+ 'face '(:weight bold)
+ 'help-echo (purecopy "mouse-1: other \
+buffer, mouse-2: prev, M-mouse-2: next, mouse-3: buffer menu")
+ 'local-map mode-line-buffer-identification-keymap)))
+
+(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))