[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 4fa540f8658: Fix finding anchor references after 'Info-on-current
From: |
Eli Zaretskii |
Subject: |
master 4fa540f8658: Fix finding anchor references after 'Info-on-current-buffer' |
Date: |
Fri, 2 Aug 2024 02:26:38 -0400 (EDT) |
branch: master
commit 4fa540f86587d4458cf33da352176f57e20723d4
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
Fix finding anchor references after 'Info-on-current-buffer'
* lisp/info.el (Info--record-tag-table): New function, extracted
from 'Info-find-node-2'.
(Info-find-node-2, Info-on-current-buffer): Use
'Info--record-tag-table'. (Bug#72391)
---
lisp/info.el | 74 ++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 44 insertions(+), 30 deletions(-)
diff --git a/lisp/info.el b/lisp/info.el
index d151c6365b8..e18772436e9 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1032,6 +1032,48 @@ If NOERROR, inhibit error messages when we can't find
the node."
Info-history))
(Info-find-node-2 filename nodename no-going-back strict-case))
+(defun Info--record-tag-table (nodename)
+ "If the current Info file has a tag table, record its location for NODENAME.
+
+This creates a tag-table buffer, sets `Info-tag-table-buffer' to
+name that buffer, and records the buffer and the tag table in
+the marker `Info-tag-table-buffer'. If the Info file has no
+tag table, or if NODENAME is \"*\", the function sets the marker
+to nil to indicate the tag table is not available/relevant.
+
+The function assumes that the Info buffer is widened, and does
+not preserve point."
+ (goto-char (point-max))
+ (forward-line -8)
+ ;; Use string-equal, not equal, to ignore text props.
+ (if (not (or (string-equal nodename "*")
+ (not
+ (search-forward "\^_\nEnd tag table\n" nil t))))
+ (let (pos)
+ ;; We have a tag table. Find its beginning.
+ ;; Is this an indirect file?
+ (search-backward "\nTag table:\n")
+ (setq pos (point))
+ (if (save-excursion
+ (forward-line 2)
+ (looking-at "(Indirect)\n"))
+ ;; It is indirect. Copy it to another buffer
+ ;; and record that the tag table is in that buffer.
+ (let ((buf (current-buffer))
+ (tagbuf
+ (or Info-tag-table-buffer
+ (generate-new-buffer " *info tag table*"))))
+ (setq Info-tag-table-buffer tagbuf)
+ (with-current-buffer tagbuf
+ (buffer-disable-undo (current-buffer))
+ (setq case-fold-search t)
+ (erase-buffer)
+ (insert-buffer-substring buf))
+ (set-marker Info-tag-table-marker
+ (match-end 0) tagbuf))
+ (set-marker Info-tag-table-marker pos)))
+ (set-marker Info-tag-table-marker nil)))
+
;;;###autoload
(defun Info-on-current-buffer (&optional nodename)
"Use Info mode to browse the current Info buffer.
@@ -1048,6 +1090,7 @@ otherwise, that defaults to `Top'."
(or buffer-file-name
;; If called on a non-file buffer, make a fake file name.
(concat default-directory (buffer-name))))
+ (Info--record-tag-table nodename)
(Info-find-node-2 nil nodename))
(defun Info-revert-find-node (filename nodename)
@@ -1210,36 +1253,7 @@ is non-nil)."
(Info-file-supports-index-cookies filename))
;; See whether file has a tag table. Record the location if yes.
- (goto-char (point-max))
- (forward-line -8)
- ;; Use string-equal, not equal, to ignore text props.
- (if (not (or (string-equal nodename "*")
- (not
- (search-forward "\^_\nEnd tag table\n" nil t))))
- (let (pos)
- ;; We have a tag table. Find its beginning.
- ;; Is this an indirect file?
- (search-backward "\nTag table:\n")
- (setq pos (point))
- (if (save-excursion
- (forward-line 2)
- (looking-at "(Indirect)\n"))
- ;; It is indirect. Copy it to another buffer
- ;; and record that the tag table is in that buffer.
- (let ((buf (current-buffer))
- (tagbuf
- (or Info-tag-table-buffer
- (generate-new-buffer " *info tag table*"))))
- (setq Info-tag-table-buffer tagbuf)
- (with-current-buffer tagbuf
- (buffer-disable-undo (current-buffer))
- (setq case-fold-search t)
- (erase-buffer)
- (insert-buffer-substring buf))
- (set-marker Info-tag-table-marker
- (match-end 0) tagbuf))
- (set-marker Info-tag-table-marker pos)))
- (set-marker Info-tag-table-marker nil))
+ (Info--record-tag-table nodename)
(setq Info-current-file filename)
)))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 4fa540f8658: Fix finding anchor references after 'Info-on-current-buffer',
Eli Zaretskii <=