# HG changeset patch # User Karl Heuer # Date 766947113 0 # Node ID 52b0ebfd3191eb0275b39f4135bcf8da56eac91c # Parent 5f1e5be68fcdbcbd6912211c242301cfbb1c6ef9 (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. diff -r 5f1e5be68fcd -r 52b0ebfd3191 lisp/info.el --- a/lisp/info.el Thu Apr 21 14:39:40 1994 +0000 +++ b/lisp/info.el Thu Apr 21 16:51:53 1994 +0000 @@ -1010,10 +1010,7 @@ (defun Info-next-preorder () "Go to the next node, popping up a level if there is none." (interactive) - (cond ((looking-at "\\*note[ \n]*\\([^:]*\\):") - (Info-follow-reference - (buffer-substring (match-beginning 1) (match-end 1)))) - ((Info-no-error (Info-next-menu-item)) ) + (cond ((Info-no-error (Info-next-menu-item)) ) ((Info-no-error (Info-up)) (forward-line 1)) (t (error "No more nodes")))) @@ -1029,16 +1026,14 @@ (interactive) (if (pos-visible-in-window-p (point-max)) (Info-next-preorder) - (scroll-up)) - ) + (scroll-up))) (defun Info-scroll-down () "Read the previous screen. If start of buffer is visible, go to last entry." (interactive) (if (pos-visible-in-window-p (point-min)) (Info-last-preorder) - (scroll-down)) - ) + (scroll-down))) (defun Info-next-reference () "Move cursor to the next cross-reference or menu item in the node." @@ -1228,19 +1223,35 @@ (t (error "No %s around position %d" errorstring pos))))))) -(defun Info-follow-nearest-node (click) +(defun Info-mouse-follow-nearest-node (click) "\\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. -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") (let* ((start (event-start click)) (window (car start)) (pos (car (cdr start)))) (select-window window) (goto-char pos)) + (and (not (Info-try-follow-nearest-node)) + (save-excursion (forward-line 1) (eobp)) + (Info-next-preorder))) + +(defun Info-follow-nearest-node () + "\\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) (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)) ((setq node (Info-get-token (point) "\\* " "\\* \\([^:]*\\)::")) (Info-goto-node node)) @@ -1253,10 +1264,8 @@ ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)")) (Info-goto-node "Top")) ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)")) - (Info-goto-node node)) - ((save-excursion (forward-line 1) (eobp)) - (Info-next))) - )) + (Info-goto-node node))) + node)) (defvar Info-mode-map nil "Keymap containing Info commands.") @@ -1266,7 +1275,7 @@ (suppress-keymap Info-mode-map) (define-key Info-mode-map "." 'beginning-of-buffer) (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 "\e\t" 'Info-prev-reference) (define-key Info-mode-map "1" 'Info-nth-menu-item) @@ -1301,7 +1310,7 @@ (define-key Info-mode-map "u" 'Info-up) (define-key Info-mode-map "," 'Info-index-next) (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.