From 335028c3bef914c14349d48a77262890d010a5e1 Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Sat, 12 Apr 2003 17:28:24 +0000 Subject: [PATCH] * help.el (describe-minor-mode): New function implementation. Accept both minor mode string and minor mode indicator. (describe-minor-mode-completion-table-for-indicator) (describe-minor-mode-completion-table-for-symbol): New functions. minor-mode-list is used here. (describe-minor-mode-from-symbol): renamed from (old) describe-minor-mode. Use describe-minor-mode-completion-table-for-symbol. Don't use eval. Just use symbol-name. (describe-minor-mode-from-indicator): Document is updated. Use `format-mode-line'. Use describe-minor-mode-from-symbol instead of describe-minor-mode. Use describe-minor-mode-completion-table-for-indicator. (expand-minor-mode-indicator-object): removed. (lookup-minor-mode-from-indicator): remove the fist white space from both indicator and anindicator before comparing them. * bindings.el (mode-line-major-mode-keymap) (mode-line-minor-mode-keymap): defined keys for the maps here in `defvar'. --- lisp/ChangeLog | 24 +++++++++++ lisp/bindings.el | 27 ++++++------ lisp/help.el | 108 +++++++++++++++++++++++++++-------------------- 3 files changed, 100 insertions(+), 59 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5b4616a27ee..0290cfc5607 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,27 @@ +2003-04-13 Masatake YAMATO + + * help.el (describe-minor-mode): New function implementation. + Accept both minor mode string and minor mode indicator. + (describe-minor-mode-completion-table-for-indicator) + (describe-minor-mode-completion-table-for-symbol): New functions. + minor-mode-list is used here. + (describe-minor-mode-from-symbol): renamed + from (old) describe-minor-mode. Use + describe-minor-mode-completion-table-for-symbol. + Don't use eval. Just use symbol-name. + (describe-minor-mode-from-indicator): Document is updated. + Use `format-mode-line'. Use + describe-minor-mode-from-symbol instead of + describe-minor-mode. + Use describe-minor-mode-completion-table-for-indicator. + (expand-minor-mode-indicator-object): removed. + (lookup-minor-mode-from-indicator): remove the fist white + space from both indicator and anindicator before comparing them. + + * bindings.el (mode-line-major-mode-keymap) + (mode-line-minor-mode-keymap): defined keys for the maps + here in `defvar'. + 2003-04-12 Glenn Morris * play/gomoku.el (gomoku-buffer-name): New constant. diff --git a/lisp/bindings.el b/lisp/bindings.el index 9136a122568..0d3f0c7e933 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -256,23 +256,21 @@ Normally nil in most modes, since there is no process to display.") (defvar mode-line-modes nil "Mode-line control for displaying major and minor modes.") -(defvar mode-line-major-mode-keymap nil "\ +(defvar mode-line-major-mode-keymap + (let ((map (make-sparse-keymap))) + (define-key map [mode-line mouse-2] 'describe-mode) + (define-key map [mode-line down-mouse-3] 'mode-line-mode-menu-1) + map) "\ Keymap to display on major mode.") -(defvar mode-line-minor-mode-keymap nil "\ +(defvar mode-line-minor-mode-keymap + (let ((map (make-sparse-keymap))) + (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) + map) "\ Keymap to display on minor modes.") -(let ((map (make-sparse-keymap))) - (define-key map [mode-line mouse-2] 'describe-mode) - (setq mode-line-major-mode-keymap map)) - -;; Menu of minor modes. -(let ((map (make-sparse-keymap))) - (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) - (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? @@ -302,7 +300,8 @@ Keymap to display on minor modes.") (propertize "%[(" 'help-echo help-echo) `(:propertize ("" mode-name) help-echo "mouse-2: help for current major mode" - local-map ,mode-line-major-mode-keymap) + local-map ,mode-line-major-mode-keymap + mouse-face bold) `(:propertize ("" mode-line-process)) `(:propertize ("" minor-mode-alist) help-echo "mouse-2: help for minor modes, mouse-3: minor mode menu" diff --git a/lisp/help.el b/lisp/help.el index 41a5a890c67..a4b28d2e457 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -612,73 +612,91 @@ For minor modes, see following pages.\n\n")) (print-help-return-message)))) (defun describe-minor-mode (minor-mode) - "Display documentation of a minor mode given as MINOR-MODE." - (interactive (list (intern (completing-read - "Minor mode: " - (delete nil (mapcar - (function (lambda (x) - (if (eval (car x)) - (symbol-name (car x))))) - minor-mode-alist)))))) - (if (fboundp minor-mode) - (describe-function minor-mode) - (describe-variable minor-mode))) + "Display documentation of a minor mode given as MINOR-MODE. +MINOR-MODE can be a minor mode symbol or a minor mode indicator string +appeared on the mode-line." + (interactive (list (completing-read + "Minor mode: " + (nconc + (describe-minor-mode-completion-table-for-symbol) + (describe-minor-mode-completion-table-for-indicator) + )))) + (if (symbolp minor-mode) + (setq minor-mode (symbol-name minor-mode))) + (let ((symbols (describe-minor-mode-completion-table-for-symbol)) + (indicators (describe-minor-mode-completion-table-for-indicator))) + (cond + ((member minor-mode symbols) + (describe-minor-mode-from-symbol (intern minor-mode))) + ((member minor-mode indicators) + (describe-minor-mode-from-indicator minor-mode)) + (t + (error "No such minor mode: %s" minor-mode))))) +;; symbol +(defun describe-minor-mode-completion-table-for-symbol () + ;; In order to list up all minor modes, minor-mode-list + ;; is used here instead of minor-mode-alist. + (delq nil (mapcar 'symbol-name minor-mode-list))) +(defun describe-minor-mode-from-symbol (symbol) + "Display documentation of a minor mode given as a symbol, SYMBOL" + (interactive (list (intern (completing-read + "Minor mode symbol: " + (describe-minor-mode-completion-table-for-symbol))))) + (if (fboundp symbol) + (describe-function symbol) + (describe-variable symbol))) + +;; indicator +(defun describe-minor-mode-completion-table-for-indicator () + (delq nil + (mapcar (lambda (x) + (let ((i (format-mode-line x))) + ;; remove first space if existed + (cond + ((= 0 (length i)) + nil) + ((eq (aref i 0) ?\ ) + (substring i 1)) + (t + i)))) + minor-mode-alist))) (defun describe-minor-mode-from-indicator (indicator) - "Display documentation of a minor mode specified by INDICATOR." + "Display documentation of a minor mode specified by INDICATOR. +If you call this function interactively, you can give indicator which +is currently activated with completion." (interactive (list (completing-read "Minor mode indicator: " - (delete nil - (mapcar - #'(lambda (x) - (if (eval (car x)) - (let ((i (expand-minor-mode-indicator-object (cadr x)))) - (if (and (< 0 (length i)) - (string= " " (substring i 0 1))) - (substring i 1) - i)))) - minor-mode-alist))))) + (describe-minor-mode-completion-table-for-indicator)))) (let ((minor-mode (lookup-minor-mode-from-indicator indicator))) (if minor-mode - (describe-minor-mode minor-mode) + (describe-minor-mode-from-symbol minor-mode) (error "Cannot find minor mode for `%s'" indicator)))) (defun lookup-minor-mode-from-indicator (indicator) "Return a minor mode symbol from its indicator on the modeline." + ;; remove first space if existed (if (and (< 0 (length indicator)) - (not (string= " " (substring indicator 0 1)))) - (setq indicator (concat " " indicator))) + (eq (aref indicator 0) ?\ )) + (setq indicator (substring indicator 1))) (let ((minor-modes minor-mode-alist) result) (while minor-modes (let* ((minor-mode (car (car minor-modes))) - (anindicator (car (cdr (car minor-modes))))) - (setq anindicator (expand-minor-mode-indicator-object anindicator)) + (anindicator (format-mode-line + (car (cdr (car minor-modes)))))) + ;; remove first space if existed (if (and (stringp anindicator) - (string= anindicator indicator)) + (> (length anindicator) 0) + (eq (aref anindicator 0) ?\ )) + (setq anindicator (substring anindicator 1))) + (if (equal indicator anindicator) (setq result minor-mode minor-modes nil) (setq minor-modes (cdr minor-modes))))) result)) -(defun expand-minor-mode-indicator-object (obj) - "Expand OBJ that represents a minor-mode indicator. -cdr part of a `minor-mode-alist' element(indicator object) is the -indicator of minor mode that is in car part. Normally indicator -object is a string. However, in some case it is more compound object -like cons cell. This function tries to make the compound object a string." - ;; copied from describe-mode - (while (and obj (symbolp obj) - (boundp obj) - (not (eq obj (symbol-value obj)))) - (setq obj (symbol-value obj))) - (when (and (consp obj) - (keywordp (car obj)) - (eq :eval (car obj))) - (setq obj (eval (cadr obj)))) - obj) - ;;; Automatic resizing of temporary buffers.