From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Masatake YAMATO Newsgroups: gmane.emacs.devel Subject: Re: |PATCH| describe-minor-mode and describe-minor-mode-from-indicator Date: Tue, 08 Apr 2003 00:46:43 +0900 (JST) Sender: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Message-ID: <20030408.004643.59469503.jet@gyve.org> References: <20030401.215848.126573280.jet@gyve.org> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: main.gmane.org 1049733146 31507 80.91.224.249 (7 Apr 2003 16:32:26 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Mon, 7 Apr 2003 16:32:26 +0000 (UTC) Cc: monnier+gnu/emacs@rum.cs.yale.edu Original-X-From: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Mon Apr 07 18:32:23 2003 Return-path: Original-Received: from quimby.gnus.org ([80.91.224.244]) by main.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 192ZXj-0008BG-00 for ; Mon, 07 Apr 2003 18:32:23 +0200 Original-Received: from monty-python.gnu.org ([199.232.76.173]) by quimby.gnus.org with esmtp (Exim 3.12 #1 (Debian)) id 192ZbJ-00028r-00 for ; Mon, 07 Apr 2003 18:36:05 +0200 Original-Received: from localhost ([127.0.0.1] helo=monty-python.gnu.org) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 192ZWm-0000z8-02 for emacs-devel@quimby.gnus.org; Mon, 07 Apr 2003 12:31:24 -0400 Original-Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.10.13) id 192YzQ-0006ck-00 for emacs-devel@gnu.org; Mon, 07 Apr 2003 11:56:56 -0400 Original-Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.10.13) id 192Yxv-0006NO-00 for emacs-devel@gnu.org; Mon, 07 Apr 2003 11:55:31 -0400 Original-Received: from gnuftp.gnu.org ([199.232.41.6]) by monty-python.gnu.org with esmtp (Exim 4.10.13) id 192YwY-0005HQ-00; Mon, 07 Apr 2003 11:53:58 -0400 Original-Received: from r-maa.spacetown.ne.jp ([210.130.136.40]) by gnuftp.gnu.org with esmtp (Exim 4.10.13) id 192Ypd-0005WO-00; Mon, 07 Apr 2003 11:46:49 -0400 Original-Received: from localhost (h219-110-074-148.catv01.itscom.jp [219.110.74.148]) by r-maa.spacetown.ne.jp (8.11.6) with ESMTP id h37FkiQ11482; Tue, 8 Apr 2003 00:46:44 +0900 (JST) Original-To: rms@gnu.org In-Reply-To: X-Mailer: Mew version 3.1.52 on Emacs 21.3 / Mule 5.0 (SAKAKI) Original-cc: emacs-devel@gnu.org X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1b5 Precedence: list List-Id: Emacs development discussions. List-Help: List-Post: List-Subscribe: , List-Archive: List-Unsubscribe: , Errors-To: emacs-devel-bounces+emacs-devel=quimby.gnus.org@gnu.org Xref: main.gmane.org gmane.emacs.devel:12963 X-Report-Spam: http://spam.gmane.org/gmane.emacs.devel:12963 It occurs to me that describe-minor-mode-from-indicator and describe-minor-mode should be combined. There should be one function that accepts both kinds of arguments. This should not be difficult to do, and it would make things simpler. I did. 2003-04-07 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. (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'. Warning: Remote host denied X11 forwarding. Index: lisp/help.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/help.el,v retrieving revision 1.258 diff -u -r1.258 help.el --- lisp/help.el 31 Mar 2003 20:22:58 -0000 1.258 +++ lisp/help.el 7 Apr 2003 15:44:54 -0000 @@ -612,72 +612,91 @@ (print-help-return-message)))) (defun describe-minor-mode (minor-mode) - "Display documentation of a minor mode given as 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 () + (delq nil (mapcar + (lambda (x) + (symbol-name (car x))) + minor-mode-alist))) +(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: " - (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))) + "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. Index: lisp/bindings.el =================================================================== RCS file: /cvsroot/emacs/emacs/lisp/bindings.el,v retrieving revision 1.113 diff -u -r1.113 bindings.el --- lisp/bindings.el 31 Mar 2003 20:24:56 -0000 1.113 +++ lisp/bindings.el 7 Apr 2003 15:44:55 -0000 @@ -256,22 +256,20 @@ (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