X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/2238127283d703f38765f9b3f6a64f799d18e9e5..6ae948d87e16588cd1c2a08d41331923e9786109:/lisp/info-look.el diff --git a/lisp/info-look.el b/lisp/info-look.el index 13edc0269d..b800fc885f 100644 --- a/lisp/info-look.el +++ b/lisp/info-look.el @@ -1,7 +1,7 @@ ;;; info-look.el --- major-mode-sensitive Info index lookup facility -*- lexical-binding: t -*- ;; An older version of this was known as libc.el. -;; Copyright (C) 1995-1999, 2001-2011 Free Software Foundation, Inc. +;; Copyright (C) 1995-1999, 2001-2014 Free Software Foundation, Inc. ;; Author: Ralph Schleicher ;; (did not show signs of life (Nov 2001) -stef) @@ -27,6 +27,14 @@ ;; Really cool code to lookup info indexes. ;; Try especially info-lookup-symbol (aka C-h S). +;; Some additional sources of (Tex)info files for non-GNU packages: +;; +;; Scheme: +;; LaTeX: +;; +;; (or CTAN mirrors) +;; Perl: (or CPAN mirrors) + ;;; Code: (require 'info) @@ -298,6 +306,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) @@ -732,7 +755,7 @@ Return nil if there is nothing appropriate in the buffer near point." :parse-rule "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z0-9-]+\\|##\\|\\+=" :doc-spec '( ;; "(automake)Macro Index" is autoconf macros used in - ;; configure.in, not Makefile.am, so don't have that here. + ;; configure.ac, not Makefile.am, so don't have that here. ("(automake)Variable Index" nil "^[ \t]*`" "'") ;; In automake 1.4 macros and variables were a combined node. ("(automake)Macro and Variable Index" nil "^[ \t]*`" "'") @@ -858,8 +881,11 @@ Return nil if there is nothing appropriate in the buffer near point." (info-lookup-maybe-add-help :mode 'latex-mode :regexp "\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)" - :doc-spec '(("(latex)Command Index" nil - "`" "\\({[^}]*}\\)?'"))) + :doc-spec `((,(if (Info-find-file "latex2e" t) + ;; From http://home.gna.org/latexrefman + "(latex2e)Command Index" + "(latex)Command Index") + nil "`" "\\({[^}]*}\\)?'"))) (info-lookup-maybe-add-help :mode 'emacs-lisp-mode