summaryrefslogtreecommitdiff
path: root/lisp/info-look.el
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2013-02-16 12:20:43 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2013-02-16 12:20:43 -0500
commita9bc03e28e99ca44a7e009de25fa7084aec4c60c (patch)
tree93d57374be2bea63a1cc4178a1c4e66d12666123 /lisp/info-look.el
parentc793958519ec35d3d1a30046e022d9134964d060 (diff)
downloademacs-a9bc03e28e99ca44a7e009de25fa7084aec4c60c.tar.gz
* lisp/info-look.el (info-lookup-select-mode): If major-mode has no
info-lookup-alist entry then search up derived-mode-parent. Fixes: debbugs:8660
Diffstat (limited to 'lisp/info-look.el')
-rw-r--r--lisp/info-look.el15
1 files changed, 15 insertions, 0 deletions
diff --git a/lisp/info-look.el b/lisp/info-look.el
index a67fabc5a88..0b33dd51faf 100644
--- a/lisp/info-look.el
+++ b/lisp/info-look.el
@@ -298,6 +298,21 @@ If optional argument QUERY is non-nil, query for the help mode."
(when (string-match (caar file-name-alist) file-name)
(setq info-lookup-mode (cdar file-name-alist)))
(setq file-name-alist (cdr file-name-alist)))))
+
+ ;; If major-mode has no setups in info-lookup-alist, under any topic, then
+ ;; search up through derived-mode-parent to find a parent mode which does
+ ;; have some setups. This means that a `define-derived-mode' with no
+ ;; setups of its own will select its parent mode for lookups, if one of
+ ;; its parents has some setups. Good for example on `makefile-gmake-mode'
+ ;; and similar derivatives of `makefile-mode'.
+ ;;
+ (let ((mode major-mode)) ;; Look for `mode' with some setups.
+ (while (and mode (not info-lookup-mode))
+ (dolist (topic-cell info-lookup-alist) ;; Usually only two topics here.
+ (if (info-lookup->mode-value (car topic-cell) mode)
+ (setq info-lookup-mode mode)))
+ (setq mode (get mode 'derived-mode-parent))))
+
(or info-lookup-mode (setq info-lookup-mode major-mode)))
(defun info-lookup-change-mode (topic)