# HG changeset patch # User Richard M. Stallman # Date 766453628 0 # Node ID 962a6ffb7b9711d2a325bab19894ee86d1f2e608 # Parent 01e7faac0761b29bd62629367a327e8e44e14c98 (describe-mode): Always show minor modes, at front. diff -r 01e7faac0761 -r 962a6ffb7b97 lisp/help.el --- a/lisp/help.el Fri Apr 15 22:45:53 1994 +0000 +++ b/lisp/help.el Fri Apr 15 23:47:08 1994 +0000 @@ -168,35 +168,42 @@ (princ "not documented")) (print-help-return-message))))) -(defun describe-mode (&optional minor) - "Display documentation of current major mode. -If optional MINOR is non-nil (or prefix argument is given if interactive), -display documentation of active minor modes as well. +(defun describe-mode () + "Display documentation of current major mode and minor modes. For this to work correctly for a minor mode, the mode's indicator variable \(listed in `minor-mode-alist') must also be a function whose documentation describes the minor mode." - (interactive) + (interactive "p") (with-output-to-temp-buffer "*Help*" + (if minor + (let ((minor-modes minor-mode-alist) + (locals (buffer-local-variables))) + (while minor-modes + (let* ((minor-mode (car (car minor-modes))) + (indicator (car (cdr (car minor-modes)))) + (local-binding (assq minor-mode locals))) + ;; Document a minor mode if it is listed in minor-mode-alist, + ;; bound locally in this buffer, non-nil, and has a function + ;; definition. + (if (and local-binding + (cdr local-binding) + (fboundp minor-mode)) + (let ((pretty-minor-mode minor-mode)) + (if (string-match "-mode$" (symbol-name minor-mode)) + (setq pretty-minor-mode + (capitalize + (substring (symbol-name minor-mode) + 0 (match-beginning 0))))) + (while (and indicator (symbolp indicator)) + (setq indicator (symbol-value indicator))) + (princ (format "%s minor mode (indicator%s):\n" + pretty-minor-mode indicator)) + (princ (documentation minor-mode)) + (princ "\n\n")))) + (setq minor-modes (cdr minor-modes))))) (princ mode-name) - (princ " Mode:\n") + (princ " mode:\n") (princ (documentation major-mode)) - (let ((minor-modes minor-mode-alist) - (locals (buffer-local-variables))) - (while minor-modes - (let* ((minor-mode (car (car minor-modes))) - (indicator (car (cdr (car minor-modes)))) - (local-binding (assq minor-mode locals))) - ;; Document a minor mode if it is listed in minor-mode-alist, - ;; bound locally in this buffer, non-nil, and has a function - ;; definition. - (if (and local-binding - (cdr local-binding) - (fboundp minor-mode)) - (progn - (princ (format "\n\n\n%s minor mode (indicator%s):\n" - minor-mode indicator)) - (princ (documentation minor-mode))))) - (setq minor-modes (cdr minor-modes)))) (print-help-return-message))) ;; So keyboard macro definitions are documented correctly