From: Juri Linkov Date: Sat, 18 Oct 2008 23:45:05 +0000 (+0000) Subject: * info.el (Info-file-supports-index-cookies-list): New variable. X-Git-Tag: emacs-pretest-23.0.90~2393 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=66fc722fc31ed085787587097951fae1804f0b14;p=emacs.git * 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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 537c2cdc6d3..7168c0db0f0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -4,6 +4,17 @@ 2008-10-18 Juri Linkov + * 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. diff --git a/lisp/info.el b/lisp/info.el index 6ee505c6f03..0ecc92bd824 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -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))) + (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)