(Info-file-supports-index-cookies): New variable.

(Info-find-node-2): Check makeinfo version for index cookie support.
(Info-index-nodes): Search for nodes with index cookies only when
Info-file-supports-index-cookies is t.  Otherwise, search nodes
with "Index" in the node name.
(Info-index-node): Search index cookie in the current node only when
Info-file-supports-index-cookies is t.  Otherwise, check the word
"Index" in the node name.
(Info-find-emacs-command-nodes): Remove code that searches nodes
with "Index" node name in the top menu.
This commit is contained in:
Juri Linkov 2005-11-01 09:45:38 +00:00
parent dbc56a8ba2
commit 94b10022bf
2 changed files with 97 additions and 71 deletions

View file

@ -1,3 +1,16 @@
2005-11-01 Juri Linkov <juri@jurta.org>
* info.el (Info-file-supports-index-cookies): New variable.
(Info-find-node-2): Check makeinfo version for index cookie support.
(Info-index-nodes): Search for nodes with index cookies only when
Info-file-supports-index-cookies is t. Otherwise, search nodes
with "Index" in the node name.
(Info-index-node): Search index cookie in the current node only when
Info-file-supports-index-cookies is t. Otherwise, check the word
"Index" in the node name.
(Info-find-emacs-command-nodes): Remove code that searches nodes
with "Index" node name in the top menu.
2005-11-01 Stefan Monnier <monnier@iro.umontreal.ca>
* progmodes/scheme.el (scheme-mode-variables): Use the default

View file

@ -310,6 +310,9 @@ Marker points nowhere if file has no tag table.")
(defvar Info-current-file-completions nil
"Cached completion list for current Info file.")
(defvar Info-file-supports-index-cookies nil
"Non-nil if current Info file supports index cookies.")
(defvar Info-index-alternatives nil
"List of possible matches for last `Info-index' command.")
@ -842,6 +845,19 @@ 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 version \\([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))
;; See whether file has a tag table. Record the location if yes.
(goto-char (point-max))
(forward-line -8)
@ -2649,62 +2665,63 @@ following nodes whose names also contain the word \"Index\"."
(and (member file '("dir" "history" "toc" "apropos"))
(setq Info-index-nodes (cons (cons file nil) Info-index-nodes)))
(not (stringp file))
;; Find nodes with index cookie
(let* ((default-directory (or (and (stringp file)
(file-name-directory
(setq file (Info-find-file file))))
default-directory))
Info-history Info-history-list Info-fontify-maximum-menu-size
(main-file file) subfiles nodes node)
(condition-case nil
(with-temp-buffer
(while (or main-file subfiles)
(erase-buffer)
(info-insert-file-contents (or main-file (car subfiles)))
(goto-char (point-min))
(while (search-forward "\0\b[index\0\b]" nil 'move)
(save-excursion
(re-search-backward "^\^_")
(search-forward "Node: ")
(setq nodes (cons (Info-following-node-name) nodes))))
(if main-file
(save-excursion
(goto-char (point-min))
(if (search-forward "\n\^_\nIndirect:" nil t)
(let ((bound (save-excursion (search-forward "\n\^_" nil t))))
(while (re-search-forward "^\\(.*\\): [0-9]+$" bound t)
(setq subfiles (cons (match-string-no-properties 1)
subfiles)))))
(setq subfiles (nreverse subfiles)
main-file nil))
(setq subfiles (cdr subfiles)))))
(error nil))
(if nodes
(setq nodes (nreverse nodes)
Info-index-nodes (cons (cons file nodes) Info-index-nodes)))
nodes)
;; 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
nodes node)
(condition-case nil
(with-temp-buffer
(Info-mode)
(Info-find-node file "Top")
(when (and (search-forward "\n* menu:" nil t)
(re-search-forward "\n\\* \\(.*\\<Index\\>\\)" nil t))
(goto-char (match-beginning 1))
(setq nodes (list (Info-extract-menu-node-name)))
(Info-goto-node (car nodes))
(while (and (setq node (Info-extract-pointer "next" t))
(string-match "\\<Index\\>" node))
(setq nodes (cons node nodes))
(Info-goto-node node))))
(error nil))
(if nodes
(setq nodes (nreverse nodes)
Info-index-nodes (cons (cons file nodes) Info-index-nodes)))
nodes)
(if Info-file-supports-index-cookies
;; Find nodes with index cookie
(let* ((default-directory (or (and (stringp file)
(file-name-directory
(setq file (Info-find-file file))))
default-directory))
Info-history Info-history-list Info-fontify-maximum-menu-size
(main-file file) subfiles nodes node)
(condition-case nil
(with-temp-buffer
(while (or main-file subfiles)
(erase-buffer)
(info-insert-file-contents (or main-file (car subfiles)))
(goto-char (point-min))
(while (search-forward "\0\b[index\0\b]" nil 'move)
(save-excursion
(re-search-backward "^\^_")
(search-forward "Node: ")
(setq nodes (cons (Info-following-node-name) nodes))))
(if main-file
(save-excursion
(goto-char (point-min))
(if (search-forward "\n\^_\nIndirect:" nil t)
(let ((bound (save-excursion (search-forward "\n\^_" nil t))))
(while (re-search-forward "^\\(.*\\): [0-9]+$" bound t)
(setq subfiles (cons (match-string-no-properties 1)
subfiles)))))
(setq subfiles (nreverse subfiles)
main-file nil))
(setq subfiles (cdr subfiles)))))
(error nil))
(if nodes
(setq nodes (nreverse nodes)
Info-index-nodes (cons (cons file nodes) Info-index-nodes)))
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
nodes node)
(condition-case nil
(with-temp-buffer
(Info-mode)
(Info-find-node file "Top")
(when (and (search-forward "\n* menu:" nil t)
(re-search-forward "\n\\* \\(.*\\<Index\\>\\)" nil t))
(goto-char (match-beginning 1))
(setq nodes (list (Info-extract-menu-node-name)))
(Info-goto-node (car nodes))
(while (and (setq node (Info-extract-pointer "next" t))
(string-match "\\<Index\\>" node))
(setq nodes (cons node nodes))
(Info-goto-node node))))
(error nil))
(if nodes
(setq nodes (nreverse nodes)
Info-index-nodes (cons (cons file nodes) Info-index-nodes)))
nodes))
;; If file has no index nodes, still add it to the cache
(setq Info-index-nodes (cons (cons file nil) Info-index-nodes)))
(cdr (assoc file Info-index-nodes)))
@ -2718,17 +2735,17 @@ If FILE is nil, check the current Info file."
(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
(or
(save-match-data
(string-match "\\<Index\\>" (or node Info-current-node "")))
(save-excursion
(goto-char (+ (or (save-excursion
(search-backward "\n\^_" nil t))
(point-min)) 2))
(search-forward "\0\b[index\0\b]"
(or (save-excursion
(search-forward "\n\^_" nil t))
(point-max)) t)))))
(if Info-file-supports-index-cookies
(save-excursion
(goto-char (+ (or (save-excursion
(search-backward "\n\^_" nil t))
(point-min)) 2))
(search-forward "\0\b[index\0\b]"
(or (save-excursion
(search-forward "\n\^_" nil t))
(point-max)) t))
(save-match-data
(string-match "\\<Index\\>" (or node Info-current-node ""))))))
(defun Info-goto-index ()
"Go to the first index node."
@ -3504,10 +3521,6 @@ in the first element of the returned list (which is treated specially in
(setq info-file file file-list nil))
(setq file-list (cdr file-list))))))
(Info-find-node info-file "Top")
(or (and (search-forward "\n* menu:" nil t)
(re-search-forward "\n\\* \\(.*\\<Index\\>\\)" nil t))
(error "Info file `%s' appears to lack an index" info-file))
(goto-char (match-beginning 1))
;; Bind Info-history to nil, to prevent the index nodes from
;; getting into the node history.
(let ((Info-history nil)