]> code.delx.au - gnu-emacs/blobdiff - lisp/info-look.el
(Vchar_unify_table): Comment added.
[gnu-emacs] / lisp / info-look.el
index 5097f2f5fdc08aee4aeaf6d5e19e20557c02ce36..fc8ff1e578b002ef87e527697ca0a644d6e99c4e 100644 (file)
@@ -2,7 +2,7 @@
 ;; An older version of this was known as libc.el.
 
 ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
-;;   2004, 2005, 2006 Free Software Foundation, Inc.
+;;   2004, 2005, 2006, 2007, 2008 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 2, 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
@@ -21,9 +21,7 @@
 ;; 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:
 
@@ -144,7 +142,7 @@ to `symbol', and the help mode defaults to the current major mode."
   (apply 'info-lookup-add-help* nil arg))
 
 (defun info-lookup-maybe-add-help (&rest arg)
-  "Add a help specification iff none is defined.
+  "Add a help specification if none is defined.
 See the documentation of the function `info-lookup-add-help'
 for more details."
   (apply 'info-lookup-add-help* t arg))
@@ -328,6 +326,14 @@ If optional argument QUERY is non-nil, query for the help mode."
                     (error "Not documented as a %s: %s" topic (or item ""))))
          (modes (info-lookup->all-modes topic mode))
          (window (selected-window))
+        (new-Info-history
+         ;; Avoid clobbering Info-history with nodes searched during
+         ;; lookup.  If lookup succeeds set `Info-history' to
+         ;; `new-Info-history'.
+         (when (get-buffer "*info*")
+           (with-current-buffer "*info*"
+             (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)
@@ -353,8 +359,12 @@ If optional argument QUERY is non-nil, query for the help mode."
              suffix (nth 3 (car doc-spec)))
        (when (condition-case error-data
                  (progn
-                   (Info-goto-node node)
-                   (setq doc-found t))
+                   ;; Don't need Index menu fontifications here, and
+                   ;; they slow down the lookup.
+                   (let (Info-fontify-maximum-menu-size
+                         Info-history-list)
+                     (Info-goto-node node)
+                     (setq doc-found t)))
                (error
                 (message "Cannot access Info node %s" node)
                 (sit-for 1)
@@ -397,6 +407,8 @@ If optional argument QUERY is non-nil, query for the help mode."
     (unless (or ignore-case
                 (string-equal item (car entry)))
       (message "Found in different case: %s" (car entry)))
+    (when found
+      (setq Info-history new-Info-history))
     (or doc-found
        (error "Info documentation for lookup was not found"))
     ;; Don't leave the Info buffer if the help item couldn't be looked up.
@@ -406,7 +418,8 @@ If optional argument QUERY is non-nil, query for the help mode."
 (defun info-lookup-setup-mode (topic mode)
   "Initialize the internal data structure."
   (or (info-lookup->initialized topic mode)
-      (let (cell data (initialized 0) completions refer-modes)
+      (let ((initialized 0)
+           cell data completions refer-modes Info-history-list)
        (if (not (info-lookup->mode-value topic mode))
            (message "No %s help available for `%s'" topic mode)
          ;; Recursively setup cross references.
@@ -441,6 +454,7 @@ If optional argument QUERY is non-nil, query for the help mode."
   (let ((doc-spec (info-lookup->doc-spec topic mode))
        (regexp (concat "^\\(" (info-lookup->regexp topic mode)
                        "\\)\\([ \t].*\\)?$"))
+       Info-history-list Info-fontify-maximum-menu-size
        node trans entry item prefix result doc-found
        (buffer (get-buffer-create " temp-info-look")))
     (with-current-buffer buffer
@@ -741,12 +755,15 @@ Return nil if there is nothing appropriate in the buffer near point."
              ;; 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))
@@ -865,10 +882,11 @@ Return nil if there is nothing appropriate in the buffer near point."
 
 (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)
@@ -954,7 +972,7 @@ Return nil if there is nothing appropriate in the buffer near point."
              "`" "(")))
 
 (info-lookup-maybe-add-help
- :mode 'custom-mode
+ :mode 'Custom-mode
  :ignore-case t
  :regexp "[^][()`',:\" \t\n]+"
  :parse-rule 'info-lookup-guess-custom-symbol
@@ -967,5 +985,5 @@ Return nil if there is nothing appropriate in the buffer near point."
 \f
 (provide 'info-look)
 
-;;; arch-tag: 0f1e3ea3-32a2-4461-bbab-3cff93539a74
+;; arch-tag: 0f1e3ea3-32a2-4461-bbab-3cff93539a74
 ;;; info-look.el ends here