]> git.eshelyaron.com Git - emacs.git/commitdiff
* info.el (Info-file-supports-index-cookies-list): New variable.
authorJuri Linkov <juri@jurta.org>
Sat, 18 Oct 2008 23:45:05 +0000 (23:45 +0000)
committerJuri Linkov <juri@jurta.org>
Sat, 18 Oct 2008 23:45:05 +0000 (23:45 +0000)
(Info-file-supports-index-cookies): New function.
(Info-find-node-2, Info-index-nodes, Info-index-node): Use it.
(Info-index-nodes): Let-bind Info-point-loc to nil for files
without an index cookie to ignore it when Info-index-nodes is
called during navigating from an index node with line numbers.
(Info-index-node): Set file to Info-current-file if nil.  (Bug#1118)

* info.el (Info-breadcrumbs-depth): Move defcustom higher to the
variable definition section.

lisp/ChangeLog
lisp/info.el

index 537c2cdc6d339ad0a377945bd1bf3215b31cd032..7168c0db0f0fbabfa4bc427a57a04b3e22bb0378 100644 (file)
@@ -4,6 +4,17 @@
 
 2008-10-18  Juri Linkov  <juri@jurta.org>
 
+       * info.el (Info-file-supports-index-cookies-list): New variable.
+       (Info-file-supports-index-cookies): New function.
+       (Info-find-node-2, Info-index-nodes, Info-index-node): Use it.
+       (Info-index-nodes): Let-bind Info-point-loc to nil for files
+       without an index cookie to ignore it when Info-index-nodes is
+       called during navigating from an index node with line numbers.
+       (Info-index-node): Set file to Info-current-file if nil.  (Bug#1118)
+
+       * info.el (Info-breadcrumbs-depth): Move defcustom higher to the
+       variable definition section.
+
        * info.el (Info-find-node-2): Put initial point below the header line
        and breadcrumbs line.
 
index 6ee505c6f03fab34f8c9c2b5fdc4011ba737d0a7..0ecc92bd82406b5c7d39198af7409b5ef91f2b4d 100644 (file)
@@ -239,6 +239,11 @@ This only has an effect if `Info-hide-note-references' is non-nil."
   :type 'boolean
   :group 'info)
 
+(defcustom Info-breadcrumbs-depth 4
+  "Depth of breadcrumbs to display.
+0 means do not display breadcrumbs."
+  :type 'integer)
+
 (defcustom Info-search-whitespace-regexp "\\s-+"
   "*If non-nil, regular expression to match a sequence of whitespace chars.
 This applies to Info search for regular expressions.
@@ -307,6 +312,11 @@ Marker points nowhere if file has no tag table.")
 (defvar Info-file-supports-index-cookies nil
   "Non-nil if current Info file supports index cookies.")
 
+(defvar Info-file-supports-index-cookies-list nil
+  "List of Info files with information about index cookies support.
+Each element of the list is a list (FILENAME SUPPORTS-INDEX-COOKIES)
+where SUPPORTS-INDEX-COOKIES can be either t or nil.")
+
 (defvar Info-index-alternatives nil
   "List of possible matches for last `Info-index' command.")
 
@@ -458,6 +468,34 @@ Do the right thing if the file has been compressed or zipped."
            (apply 'call-process-region (point-min) (point-max)
                   (car decoder) t t nil (cdr decoder))))
       (insert-file-contents fullname visit))))
+
+(defun Info-file-supports-index-cookies (&optional file)
+  "Return non-nil value if FILE supports Info index cookies.
+Info index cookies were first introduced in 4.7, and all later
+makeinfo versions output them in index nodes, so we can reply
+solely on the makeinfo version.  This function caches the information
+in `Info-file-supports-index-cookies-list'."
+  (or file (setq file Info-current-file))
+  (or (assoc file Info-file-supports-index-cookies-list)
+      ;; Skip virtual Info files
+      (and (or (not (stringp file))
+              (member file '("dir" apropos history toc)))
+           (setq Info-file-supports-index-cookies-list
+                (cons (cons file nil) Info-file-supports-index-cookies-list)))
+      (save-excursion
+       (let ((found nil))
+         (goto-char (point-min))
+         (condition-case ()
+             (if (and (re-search-forward
+                       "makeinfo[ \n]version[ \n]\\([0-9]+.[0-9]+\\)"
+                       (line-beginning-position 3) t)
+                      (not (version< (match-string 1) "4.7")))
+                 (setq found t))
+           (error nil))
+         (setq Info-file-supports-index-cookies-list
+               (cons (cons file found) Info-file-supports-index-cookies-list)))))
+  (cdr (assoc file Info-file-supports-index-cookies-list)))
+
 \f
 (defun Info-default-dirs ()
   (let ((source (expand-file-name "info/" source-directory))
@@ -845,18 +883,8 @@ a case-insensitive match is tried."
                 (info-insert-file-contents filename nil)
                 (setq default-directory (file-name-directory filename))))
               (set-buffer-modified-p nil)
-
-             ;; Check makeinfo version for index cookie support
-             (let ((found nil))
-               (goto-char (point-min))
-               (condition-case ()
-                   (if (and (re-search-forward
-                             "makeinfo[ \n]version[ \n]\\([0-9]+.[0-9]+\\)"
-                             (line-beginning-position 3) t)
-                            (not (version< (match-string 1) "4.7")))
-                       (setq found t))
-                 (error nil))
-               (set (make-local-variable 'Info-file-supports-index-cookies) found))
+             (set (make-local-variable 'Info-file-supports-index-cookies)
+                  (Info-file-supports-index-cookies filename))
 
               ;; See whether file has a tag table.  Record the location if yes.
               (goto-char (point-max))
@@ -2750,7 +2778,7 @@ following nodes whose names also contain the word \"Index\"."
       (and (or (not (stringp file))
               (member file '("dir" apropos history toc)))
            (setq Info-index-nodes (cons (cons file nil) Info-index-nodes)))
-      (if Info-file-supports-index-cookies
+      (if (Info-file-supports-index-cookies file)
          ;; Find nodes with index cookie
          (let* ((default-directory (or (and (stringp file)
                                             (file-name-directory
@@ -2787,7 +2815,7 @@ following nodes whose names also contain the word \"Index\"."
            nodes)
        ;; Else find nodes with the word "Index" in the node name
        (let ((case-fold-search t)
-             Info-history Info-history-list Info-fontify-maximum-menu-size
+             Info-history Info-history-list Info-fontify-maximum-menu-size Info-point-loc
              nodes node)
          (condition-case nil
              (with-temp-buffer
@@ -2815,12 +2843,13 @@ following nodes whose names also contain the word \"Index\"."
   "Return non-nil value if NODE is an index node.
 If NODE is nil, check the current Info node.
 If FILE is nil, check the current Info file."
+  (or file (setq file Info-current-file))
   (if (or (and node (not (equal node Info-current-node)))
-          (assoc (or file Info-current-file) Info-index-nodes))
+          (assoc file Info-index-nodes))
       (member (or node Info-current-node) (Info-index-nodes file))
     ;; Don't search all index nodes if request is only for the current node
     ;; and file is not in the cache of index nodes
-    (if Info-file-supports-index-cookies
+    (if (Info-file-supports-index-cookies file)
        (save-excursion
          (goto-char (+ (or (save-excursion
                              (search-backward "\n\^_" nil t))
@@ -3761,11 +3790,6 @@ the variable `Info-file-list-for-emacs'."
     keymap)
   "Keymap to put on the Up link in the text or the header line.")
 
-(defcustom Info-breadcrumbs-depth 4
-  "Depth of breadcrumbs to display.
-0 means do not display breadcrumbs."
-  :type 'integer)
-
 (defun Info-insert-breadcrumbs ()
   (let ((nodes (Info-toc-nodes Info-current-file))
        (node Info-current-node)