diff options
| author | Karl Heuer | 1994-04-21 16:51:53 +0000 |
|---|---|---|
| committer | Karl Heuer | 1994-04-21 16:51:53 +0000 |
| commit | 981947af1ad2f7d3e3cc16afd273e73a41fc1ed1 (patch) | |
| tree | 3fd98775dee3d3a72d357753d34ac91467e8788d | |
| parent | 3c59c255dac5b0598d9aabd7c2bd89edaafd4303 (diff) | |
| download | emacs-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.el | 43 |
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. |
| 1233 | Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where you click. | 1228 | Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where you click. |
| 1234 | At end of the node's text, moves to the next node." | 1229 | At 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. | ||
| 1242 | Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where point is. | ||
| 1243 | If 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. |