Commit ad023904 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(describe-mode): Always show minor modes, at front.

parent 72f163ea
...@@ -168,35 +168,42 @@ If FUNCTION is nil, applies `message' to it, thus printing it." ...@@ -168,35 +168,42 @@ If FUNCTION is nil, applies `message' to it, thus printing it."
(princ "not documented")) (princ "not documented"))
(print-help-return-message))))) (print-help-return-message)))))
(defun describe-mode (&optional minor) (defun describe-mode ()
"Display documentation of current major mode. "Display documentation of current major mode and minor modes.
If optional MINOR is non-nil (or prefix argument is given if interactive),
display documentation of active minor modes as well.
For this to work correctly for a minor mode, the mode's indicator variable 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 \(listed in `minor-mode-alist') must also be a function whose documentation
describes the minor mode." describes the minor mode."
(interactive) (interactive "p")
(with-output-to-temp-buffer "*Help*" (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-name)
(princ " Mode:\n") (princ " mode:\n")
(princ (documentation major-mode)) (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))) (print-help-return-message)))
;; So keyboard macro definitions are documented correctly ;; So keyboard macro definitions are documented correctly
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment