;;; info-look.el --- major-mode-sensitive Info index lookup facility
;; An older version of this was known as libc.el.
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
-;; 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 1995-1999, 2001-2011 Free Software Foundation, Inc.
;; Author: Ralph Schleicher <rs@nunatak.allgaeu.org>
;; (did not show signs of life (Nov 2001) -stef)
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
(cons (list Info-current-file Info-current-node (point))
Info-history))))
found doc-spec node prefix suffix doc-found)
- (if (not (eq major-mode 'Info-mode))
- (if (not info-lookup-other-window-flag)
- (info)
- (progn
- (save-window-excursion (info))
- ;; Determine whether or not the Info buffer is visible in
- ;; another frame on the same display. If it is, simply raise
- ;; that frame. Otherwise, display it in another window.
- (let* ((window (get-buffer-window "*info*" t))
- (info-frame (and window (window-frame window))))
- (if (and info-frame
- (display-multi-frame-p)
- (memq info-frame (frames-on-display-list))
- (not (eq info-frame (selected-frame))))
- (select-frame info-frame)
- (switch-to-buffer-other-window "*info*"))))))
+ (unless (eq major-mode 'Info-mode)
+ (if (not info-lookup-other-window-flag)
+ (info)
+ (save-window-excursion (info))
+ (let* ((info-window (get-buffer-window "*info*" t))
+ (info-frame (and info-window (window-frame info-window))))
+ (if (and info-frame
+ (not (eq info-frame (selected-frame)))
+ (display-multi-frame-p)
+ (memq info-frame (frames-on-display-list)))
+ ;; *info* is visible in another frame on same display.
+ ;; Raise that frame and select the window.
+ (progn
+ (select-window info-window)
+ (raise-frame info-frame))
+ ;; In any other case, switch to *info* in another window.
+ (switch-to-buffer-other-window "*info*")))))
(while (and (not found) modes)
(setq doc-spec (info-lookup->doc-spec topic (car modes)))
(while (and (not found) doc-spec)
;; M4 Macro Index entries are without "AS_" prefixes, and
;; mostly without "m4_" prefixes. "dnl" is an exception, not
;; wanting any prefix. So AS_ is added back to upper-case
- ;; names, m4_ to others which don't already an m4_.
+ ;; names (if needed), m4_ to others which don't already an m4_.
("(autoconf)M4 Macro Index"
(lambda (item)
(let ((case-fold-search nil))
(cond ((or (string-equal item "dnl")
- (string-match "^m4_" item))
+ (string-match "^m4_" item)
+ ;; Autoconf 2.62 index includes some macros
+ ;; (e.g., AS_HELP_STRING), so avoid prefixing.
+ (string-match "^AS_" item))
item)
((string-match "^[A-Z0-9_]+$" item)
(concat "AS_" item))
;; sort of fallback match scheme existed.
("(elisp)Index" nil "^ -+ .*: " "\\( \\|$\\)")))
+;; docstrings talk about elisp, so have apropos-mode follow emacs-lisp-mode
+(info-lookup-maybe-add-help
+ :mode 'apropos-mode
+ :regexp "[^][()`',\" \t\n]+" ;; same as emacs-lisp-mode above
+ :other-modes '(emacs-lisp-mode))
+
(info-lookup-maybe-add-help
:mode 'lisp-interaction-mode
:regexp "[^][()`',\" \t\n]+"
(info-lookup-maybe-add-help
:mode 'octave-mode
- :regexp "[_a-zA-Z0-9]+"
+ :regexp "[_a-zA-Z0-9]+\\|\\s.+\\|[-!=^|*/.\\,><~&+]\\{1,3\\}\\|[][();,\"']"
:doc-spec '(("(octave)Function Index" nil
"^ -+ [^:]+:[ ]+\\(\\[[^=]*=[ ]+\\)?" nil)
("(octave)Variable Index" nil "^ -+ [^:]+:[ ]+" nil)
+ ("(octave)Operator Index" nil nil nil)
;; Catch lines of the form "xyz statement"
("(octave)Concept Index"
(lambda (item)
:doc-spec '(("(bash)Builtin Index" nil "^`" "[ .']")
("(bash)Reserved Word Index" nil "^`" "[ .']")
("(bash)Variable Index" nil "^`" "[ .']")
+
;; coreutils (version 4.5.10) doesn't have a separate program
;; index, so exclude extraneous stuff (most of it) by demanding
;; "[a-z]+" in the trans-func.
+ ;; coreutils version 8.1 has node "Concept Index" and past
+ ;; versions have node "Index", look for both, whichever is
+ ;; absent is quietly ignored
("(coreutils)Index"
(lambda (item) (if (string-match "\\`[a-z]+\\'" item) item)))
+ ("(coreutils)Concept Index"
+ (lambda (item) (if (string-match "\\`[a-z]+\\'" item) item)))
+
;; diff (version 2.8.1) has only a few programs, index entries
;; are things like "foo invocation".
("(diff)Index"
"`" "(")))
(info-lookup-maybe-add-help
- :mode 'custom-mode
+ :mode 'Custom-mode
:ignore-case t
:regexp "[^][()`',:\" \t\n]+"
:parse-rule 'info-lookup-guess-custom-symbol
\f
(provide 'info-look)
-;;; arch-tag: 0f1e3ea3-32a2-4461-bbab-3cff93539a74
;;; info-look.el ends here