Skip to content

Commit

Permalink
Browser-like Info-history button menu (bug#37184)
Browse files Browse the repository at this point in the history
* doc/misc/info.texi (Help-Int): Using tool-bar to navigate history.

* lisp/info.el (Info-history-menu): New function.
(Info-history-back-menu, Info-history-forward-menu): New commands.
(Info-mode-map): Bind Info-history-back-menu and
Info-history-forward-menu to tool-bar on C-key.
  • Loading branch information
link0ff committed Aug 27, 2019
1 parent ba1f779 commit ba5d979
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
8 changes: 8 additions & 0 deletions doc/misc/info.texi
Original file line number Diff line number Diff line change
Expand Up @@ -886,6 +886,14 @@ which the header says is the @samp{Previous} node (from this node, the
to revisit nodes in the history list in the forward direction, so that
@kbd{r} will return you to the node you came from by typing @kbd{l}.

@cindex using tool-bar to navigate history
Clicking the mouse on the left arrow icon in the tool-bar while
holding down the @key{CTRL} key in Emacs opens a menu of previously
visited nodes: the same nodes that you can revisit by
@code{Info-history-back}. Selecting a node after clicking on the
right arrow icon revisits the same nodes as available by
@code{Info-history-forward}.

@kindex L @r{(Info mode)}
@findex Info-history
@cindex history list of visited nodes
Expand Down
5 changes: 5 additions & 0 deletions etc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -953,6 +953,11 @@ early init file.

** Info

+++
*** Clicking on the left/right arrow icon in the Info tool-bar while
holding down the Ctrl key pops up a menu of previously visited Info nodes
where you can select a node to go back (like in browsers).

---
*** Info can now follow 'file://' protocol URLs.
The 'file://' URLs in Info documents can now be followed by passing
Expand Down
32 changes: 32 additions & 0 deletions lisp/info.el
Original file line number Diff line number Diff line change
Expand Up @@ -4059,6 +4059,8 @@ If FORK is non-nil, it is passed to `Info-goto-node'."
(define-key map [follow-link] 'mouse-face)
(define-key map [XF86Back] 'Info-history-back)
(define-key map [XF86Forward] 'Info-history-forward)
(define-key map [tool-bar C-Back\ in\ history] 'Info-history-back-menu)
(define-key map [tool-bar C-Forward\ in\ history] 'Info-history-forward-menu)
map)
"Keymap containing Info commands.")

Expand Down Expand Up @@ -4151,6 +4153,36 @@ If FORK is non-nil, it is passed to `Info-goto-node'."
:vert-only t)
map))

(defun Info-history-menu (e name history command)
(let* ((i (length history))
(map (make-sparse-keymap name)))
(mapc (lambda (history)
(let ((file (nth 0 history))
(node (nth 1 history)))
(when (stringp file)
(setq file (file-name-sans-extension
(file-name-nondirectory file))))
(define-key map (vector (intern (format "history-%i" i)))
`(menu-item ,(format "(%s) %s" file node)
(lambda ()
(interactive)
(dotimes (_ ,i) (call-interactively ',command))))))
(setq i (1- i)))
(reverse history))
(let* ((selection (x-popup-menu e map))
(binding (and selection (lookup-key map (vector (car selection))))))
(if binding (call-interactively binding)))))

(defun Info-history-back-menu (e)
"Pop up the menu with a list of previously visited Info nodes."
(interactive "e")
(Info-history-menu e "Back in history" Info-history 'Info-history-back))

(defun Info-history-forward-menu (e)
"Pop up the menu with a list of Info nodes visited with ‘Info-history-back’."
(interactive "e")
(Info-history-menu e "Forward in history" Info-history-forward 'Info-history-forward))

(defvar Info-menu-last-node nil)
;; Last node the menu was created for.
;; Value is a list, (FILE-NAME NODE-NAME).
Expand Down

0 comments on commit ba5d979

Please sign in to comment.