* lisp/info.el (Info-history-skip-intermediate-nodes): New defcustom.

(Info-forward-node, Info-backward-node, Info-next-preorder)
(Info-last-preorder): Use it.

Fixes: debbugs:9528
This commit is contained in:
Juri Linkov 2011-09-20 23:16:42 +03:00
parent fd317ddfc9
commit 3820edebb4
2 changed files with 36 additions and 10 deletions

View file

@ -1,3 +1,9 @@
2011-09-20 Juri Linkov <juri@jurta.org>
* info.el (Info-history-skip-intermediate-nodes): New defcustom.
(Info-forward-node, Info-backward-node, Info-next-preorder)
(Info-last-preorder): Use it. (Bug#9528)
2011-09-20 Juri Linkov <juri@jurta.org>
* info.el (Info-last-preorder): Visit last menu item only when

View file

@ -52,6 +52,15 @@ Each element of the stack is a list (FILENAME NODENAME BUFFERPOS).")
"List of all Info nodes user has visited.
Each element of the list is a list (FILENAME NODENAME).")
(defcustom Info-history-skip-intermediate-nodes t
"Non-nil means don't record intermediate Info nodes to the history.
Intermediate Info nodes are nodes visited by Info internally in the process of
searching the node to display. Intermediate nodes are not presented
to the user."
:type 'boolean
:group 'info
:version "24.1")
(defcustom Info-enable-edit nil
"Non-nil means the \\<Info-mode-map>\\[Info-edit] command in Info can edit the current node.
This is convenient if you want to write Info files by hand.
@ -2668,10 +2677,13 @@ N is the digit argument used to invoke this command."
"top")))
(let ((old-node Info-current-node))
(Info-up)
(let (Info-history success)
(let ((old-history Info-history)
success)
(unwind-protect
(setq success (Info-forward-node t nil no-error))
(or success (Info-goto-node old-node))))))
(or success (Info-goto-node old-node)))
(if Info-history-skip-intermediate-nodes
(setq Info-history old-history)))))
(no-error nil)
(t (error "No pointer forward from this node")))))
@ -2693,10 +2705,12 @@ N is the digit argument used to invoke this command."
;; If we move back at the same level,
;; go down to find the last subnode*.
(Info-prev)
(let (Info-history)
(let ((old-history Info-history))
(while (and (not (Info-index-node))
(save-excursion (search-forward "\n* Menu:" nil t)))
(Info-goto-node (Info-extract-menu-counting nil)))))
(Info-goto-node (Info-extract-menu-counting nil)))
(if Info-history-skip-intermediate-nodes
(setq Info-history old-history))))
(t
(error "No pointer backward from this node")))))
@ -2752,8 +2766,10 @@ N is the digit argument used to invoke this command."
;; Since logically we are done with the node with that menu,
;; move on from it. But don't add intermediate nodes
;; to the history on recursive calls.
(let (Info-history)
(Info-next-preorder)))
(let ((old-history Info-history))
(Info-next-preorder)
(if Info-history-skip-intermediate-nodes
(setq Info-history old-history))))
(t
(error "No more nodes"))))
@ -2767,24 +2783,28 @@ N is the digit argument used to invoke this command."
;; so we can scroll back through it.
(goto-char (point-max))))
;; Keep going down, as long as there are nested menu nodes.
(let (Info-history) ; Don't add intermediate nodes to the history.
(let ((old-history Info-history))
(while (Info-no-error
(Info-last-menu-item)
;; If we go down a menu item, go to the end of the node
;; so we can scroll back through it.
(goto-char (point-max)))))
(goto-char (point-max))))
(if Info-history-skip-intermediate-nodes
(setq Info-history old-history)))
(recenter -1))
((and (Info-no-error (Info-extract-pointer "prev"))
(not (equal (Info-extract-pointer "up")
(Info-extract-pointer "prev"))))
(Info-no-error (Info-prev))
(goto-char (point-max))
(let (Info-history) ; Don't add intermediate nodes to the history.
(let ((old-history Info-history))
(while (Info-no-error
(Info-last-menu-item)
;; If we go down a menu item, go to the end of the node
;; so we can scroll back through it.
(goto-char (point-max)))))
(goto-char (point-max))))
(if Info-history-skip-intermediate-nodes
(setq Info-history old-history)))
(recenter -1))
((Info-no-error (Info-up t))
(goto-char (point-min))