Commit 981947af authored by Karl Heuer's avatar Karl Heuer
Browse files

(Info-next-preorder): Don't follow footnotes here.

(Info-mouse-follow-nearest-node, Info-follow-nearest-node): Split into mouse
and keyboard versions.
(Info-mode-map): Bind them to mouse-2 and RET.
(Info-try-follow-nearest-node): Common subroutine.
parent 3c59c255
...@@ -1010,10 +1010,7 @@ N is the digit argument used to invoke this command." ...@@ -1010,10 +1010,7 @@ N is the digit argument used to invoke this command."
(defun Info-next-preorder () (defun Info-next-preorder ()
"Go to the next node, popping up a level if there is none." "Go to the next node, popping up a level if there is none."
(interactive) (interactive)
(cond ((looking-at "\\*note[ \n]*\\([^:]*\\):") (cond ((Info-no-error (Info-next-menu-item)) )
(Info-follow-reference
(buffer-substring (match-beginning 1) (match-end 1))))
((Info-no-error (Info-next-menu-item)) )
((Info-no-error (Info-up)) (forward-line 1)) ((Info-no-error (Info-up)) (forward-line 1))
(t (error "No more nodes")))) (t (error "No more nodes"))))
...@@ -1029,16 +1026,14 @@ N is the digit argument used to invoke this command." ...@@ -1029,16 +1026,14 @@ N is the digit argument used to invoke this command."
(interactive) (interactive)
(if (pos-visible-in-window-p (point-max)) (if (pos-visible-in-window-p (point-max))
(Info-next-preorder) (Info-next-preorder)
(scroll-up)) (scroll-up)))
)
(defun Info-scroll-down () (defun Info-scroll-down ()
"Read the previous screen. If start of buffer is visible, go to last entry." "Read the previous screen. If start of buffer is visible, go to last entry."
(interactive) (interactive)
(if (pos-visible-in-window-p (point-min)) (if (pos-visible-in-window-p (point-min))
(Info-last-preorder) (Info-last-preorder)
(scroll-down)) (scroll-down)))
)
(defun Info-next-reference () (defun Info-next-reference ()
"Move cursor to the next cross-reference or menu item in the node." "Move cursor to the next cross-reference or menu item in the node."
...@@ -1228,19 +1223,35 @@ SIG optional fourth argument, controls action on no match ...@@ -1228,19 +1223,35 @@ SIG optional fourth argument, controls action on no match
(t (t
(error "No %s around position %d" errorstring pos))))))) (error "No %s around position %d" errorstring pos)))))))
(defun Info-follow-nearest-node (click) (defun Info-mouse-follow-nearest-node (click)
"\\<Info-mode-map>Follow a node reference near point. "\\<Info-mode-map>Follow a node reference near point.
Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where you click. Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where you click.
At end of the node's text, moves to the next node." At end of the node's text, moves to the next node, or up if none."
(interactive "e") (interactive "e")
(let* ((start (event-start click)) (let* ((start (event-start click))
(window (car start)) (window (car start))
(pos (car (cdr start)))) (pos (car (cdr start))))
(select-window window) (select-window window)
(goto-char pos)) (goto-char pos))
(and (not (Info-try-follow-nearest-node))
(save-excursion (forward-line 1) (eobp))
(Info-next-preorder)))
(defun Info-follow-nearest-node ()
"\\<Info-mode-map>Follow a node reference near point.
Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where point is.
If no reference to follow, moves to the next node, or up if none."
(interactive)
(or (Info-try-follow-nearest-node)
(Info-next-preorder)))
;; Common subroutine.
(defun Info-try-follow-nearest-node ()
"Follow a node reference near point. Return non-nil if successful."
(let (node) (let (node)
(cond (cond
((setq node (Info-get-token (point) "\\*note[ \n]" "\\*note[ \n]\\([^:]*\\):")) ((setq node (Info-get-token (point) "\\*note[ \n]"
"\\*note[ \n]\\([^:]*\\):"))
(Info-follow-reference node)) (Info-follow-reference node))
((setq node (Info-get-token (point) "\\* " "\\* \\([^:]*\\)::")) ((setq node (Info-get-token (point) "\\* " "\\* \\([^:]*\\)::"))
(Info-goto-node node)) (Info-goto-node node))
...@@ -1253,10 +1264,8 @@ At end of the node's text, moves to the next node." ...@@ -1253,10 +1264,8 @@ At end of the node's text, moves to the next node."
((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)")) ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)"))
(Info-goto-node "Top")) (Info-goto-node "Top"))
((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)")) ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)"))
(Info-goto-node node)) (Info-goto-node node)))
((save-excursion (forward-line 1) (eobp)) node))
(Info-next)))
))
(defvar Info-mode-map nil (defvar Info-mode-map nil
"Keymap containing Info commands.") "Keymap containing Info commands.")
...@@ -1266,7 +1275,7 @@ At end of the node's text, moves to the next node." ...@@ -1266,7 +1275,7 @@ At end of the node's text, moves to the next node."
(suppress-keymap Info-mode-map) (suppress-keymap Info-mode-map)
(define-key Info-mode-map "." 'beginning-of-buffer) (define-key Info-mode-map "." 'beginning-of-buffer)
(define-key Info-mode-map " " 'Info-scroll-up) (define-key Info-mode-map " " 'Info-scroll-up)
(define-key Info-mode-map "\C-m" 'Info-next-preorder) (define-key Info-mode-map "\C-m" 'Info-follow-nearest-node)
(define-key Info-mode-map "\t" 'Info-next-reference) (define-key Info-mode-map "\t" 'Info-next-reference)
(define-key Info-mode-map "\e\t" 'Info-prev-reference) (define-key Info-mode-map "\e\t" 'Info-prev-reference)
(define-key Info-mode-map "1" 'Info-nth-menu-item) (define-key Info-mode-map "1" 'Info-nth-menu-item)
...@@ -1301,7 +1310,7 @@ At end of the node's text, moves to the next node." ...@@ -1301,7 +1310,7 @@ At end of the node's text, moves to the next node."
(define-key Info-mode-map "u" 'Info-up) (define-key Info-mode-map "u" 'Info-up)
(define-key Info-mode-map "," 'Info-index-next) (define-key Info-mode-map "," 'Info-index-next)
(define-key Info-mode-map "\177" 'Info-scroll-down) (define-key Info-mode-map "\177" 'Info-scroll-down)
(define-key Info-mode-map [mouse-2] 'Info-follow-nearest-node) (define-key Info-mode-map [mouse-2] 'Info-mouse-follow-nearest-node)
) )
;; Info mode is suitable only for specially formatted data. ;; Info mode is suitable only for specially formatted data.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment