aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl Heuer1994-04-21 16:51:53 +0000
committerKarl Heuer1994-04-21 16:51:53 +0000
commit981947af1ad2f7d3e3cc16afd273e73a41fc1ed1 (patch)
tree3fd98775dee3d3a72d357753d34ac91467e8788d
parent3c59c255dac5b0598d9aabd7c2bd89edaafd4303 (diff)
downloademacs-981947af1ad2f7d3e3cc16afd273e73a41fc1ed1.tar.gz
emacs-981947af1ad2f7d3e3cc16afd273e73a41fc1ed1.zip
(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.
-rw-r--r--lisp/info.el43
1 files changed, 26 insertions, 17 deletions
diff --git a/lisp/info.el b/lisp/info.el
index ea39ddd19c5..881aecccaa3 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1010,10 +1010,7 @@ N is the digit argument used to invoke this command."
1010(defun Info-next-preorder () 1010(defun Info-next-preorder ()
1011 "Go to the next node, popping up a level if there is none." 1011 "Go to the next node, popping up a level if there is none."
1012 (interactive) 1012 (interactive)
1013 (cond ((looking-at "\\*note[ \n]*\\([^:]*\\):") 1013 (cond ((Info-no-error (Info-next-menu-item)) )
1014 (Info-follow-reference
1015 (buffer-substring (match-beginning 1) (match-end 1))))
1016 ((Info-no-error (Info-next-menu-item)) )
1017 ((Info-no-error (Info-up)) (forward-line 1)) 1014 ((Info-no-error (Info-up)) (forward-line 1))
1018 (t (error "No more nodes")))) 1015 (t (error "No more nodes"))))
1019 1016
@@ -1029,16 +1026,14 @@ N is the digit argument used to invoke this command."
1029 (interactive) 1026 (interactive)
1030 (if (pos-visible-in-window-p (point-max)) 1027 (if (pos-visible-in-window-p (point-max))
1031 (Info-next-preorder) 1028 (Info-next-preorder)
1032 (scroll-up)) 1029 (scroll-up)))
1033 )
1034 1030
1035(defun Info-scroll-down () 1031(defun Info-scroll-down ()
1036 "Read the previous screen. If start of buffer is visible, go to last entry." 1032 "Read the previous screen. If start of buffer is visible, go to last entry."
1037 (interactive) 1033 (interactive)
1038 (if (pos-visible-in-window-p (point-min)) 1034 (if (pos-visible-in-window-p (point-min))
1039 (Info-last-preorder) 1035 (Info-last-preorder)
1040 (scroll-down)) 1036 (scroll-down)))
1041 )
1042 1037
1043(defun Info-next-reference () 1038(defun Info-next-reference ()
1044 "Move cursor to the next cross-reference or menu item in the node." 1039 "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 (t 1223 (t
1229 (error "No %s around position %d" errorstring pos))))))) 1224 (error "No %s around position %d" errorstring pos)))))))
1230 1225
1231(defun Info-follow-nearest-node (click) 1226(defun Info-mouse-follow-nearest-node (click)
1232 "\\<Info-mode-map>Follow a node reference near point. 1227 "\\<Info-mode-map>Follow a node reference near point.
1233Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where you click. 1228Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where you click.
1234At end of the node's text, moves to the next node." 1229At end of the node's text, moves to the next node, or up if none."
1235 (interactive "e") 1230 (interactive "e")
1236 (let* ((start (event-start click)) 1231 (let* ((start (event-start click))
1237 (window (car start)) 1232 (window (car start))
1238 (pos (car (cdr start)))) 1233 (pos (car (cdr start))))
1239 (select-window window) 1234 (select-window window)
1240 (goto-char pos)) 1235 (goto-char pos))
1236 (and (not (Info-try-follow-nearest-node))
1237 (save-excursion (forward-line 1) (eobp))
1238 (Info-next-preorder)))
1239
1240(defun Info-follow-nearest-node ()
1241 "\\<Info-mode-map>Follow a node reference near point.
1242Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where point is.
1243If no reference to follow, moves to the next node, or up if none."
1244 (interactive)
1245 (or (Info-try-follow-nearest-node)
1246 (Info-next-preorder)))
1247
1248;; Common subroutine.
1249(defun Info-try-follow-nearest-node ()
1250 "Follow a node reference near point. Return non-nil if successful."
1241 (let (node) 1251 (let (node)
1242 (cond 1252 (cond
1243 ((setq node (Info-get-token (point) "\\*note[ \n]" "\\*note[ \n]\\([^:]*\\):")) 1253 ((setq node (Info-get-token (point) "\\*note[ \n]"
1254 "\\*note[ \n]\\([^:]*\\):"))
1244 (Info-follow-reference node)) 1255 (Info-follow-reference node))
1245 ((setq node (Info-get-token (point) "\\* " "\\* \\([^:]*\\)::")) 1256 ((setq node (Info-get-token (point) "\\* " "\\* \\([^:]*\\)::"))
1246 (Info-goto-node node)) 1257 (Info-goto-node node))
@@ -1253,10 +1264,8 @@ At end of the node's text, moves to the next node."
1253 ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)")) 1264 ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)"))
1254 (Info-goto-node "Top")) 1265 (Info-goto-node "Top"))
1255 ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)")) 1266 ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)"))
1256 (Info-goto-node node)) 1267 (Info-goto-node node)))
1257 ((save-excursion (forward-line 1) (eobp)) 1268 node))
1258 (Info-next)))
1259 ))
1260 1269
1261(defvar Info-mode-map nil 1270(defvar Info-mode-map nil
1262 "Keymap containing Info commands.") 1271 "Keymap containing Info commands.")
@@ -1266,7 +1275,7 @@ At end of the node's text, moves to the next node."
1266 (suppress-keymap Info-mode-map) 1275 (suppress-keymap Info-mode-map)
1267 (define-key Info-mode-map "." 'beginning-of-buffer) 1276 (define-key Info-mode-map "." 'beginning-of-buffer)
1268 (define-key Info-mode-map " " 'Info-scroll-up) 1277 (define-key Info-mode-map " " 'Info-scroll-up)
1269 (define-key Info-mode-map "\C-m" 'Info-next-preorder) 1278 (define-key Info-mode-map "\C-m" 'Info-follow-nearest-node)
1270 (define-key Info-mode-map "\t" 'Info-next-reference) 1279 (define-key Info-mode-map "\t" 'Info-next-reference)
1271 (define-key Info-mode-map "\e\t" 'Info-prev-reference) 1280 (define-key Info-mode-map "\e\t" 'Info-prev-reference)
1272 (define-key Info-mode-map "1" 'Info-nth-menu-item) 1281 (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 (define-key Info-mode-map "u" 'Info-up) 1310 (define-key Info-mode-map "u" 'Info-up)
1302 (define-key Info-mode-map "," 'Info-index-next) 1311 (define-key Info-mode-map "," 'Info-index-next)
1303 (define-key Info-mode-map "\177" 'Info-scroll-down) 1312 (define-key Info-mode-map "\177" 'Info-scroll-down)
1304 (define-key Info-mode-map [mouse-2] 'Info-follow-nearest-node) 1313 (define-key Info-mode-map [mouse-2] 'Info-mouse-follow-nearest-node)
1305 ) 1314 )
1306 1315
1307;; Info mode is suitable only for specially formatted data. 1316;; Info mode is suitable only for specially formatted data.