# HG changeset patch # User Eric S. Raymond <esr@snark.thyrsus.com> # Date 712946982 0 # Node ID 27262a6c632a9fe83ff2145a3f6ed8bb56e0d334 # Parent a95dc78760256bd3fc09b530d1e8bb8d8243cdf0 *** empty log message *** diff -r a95dc7876025 -r 27262a6c632a lisp/info.el --- a/lisp/info.el Tue Aug 04 16:08:22 1992 +0000 +++ b/lisp/info.el Tue Aug 04 16:49:42 1992 +0000 @@ -329,6 +329,14 @@ (goto-char (nth 2 (car hl))) (Info-restore-point (cdr hl))))) +(defun Info-restore-point (hl) + "If this node has been visited, restore the point value when we left." + (if hl + (if (and (equal (nth 0 (car hl)) Info-current-file) + (equal (nth 1 (car hl)) Info-current-node)) + (goto-char (nth 2 (car hl))) + (Info-restore-point (cdr hl))))) + (defvar Info-last-search nil "Default regexp for \\<info-mode-map>\\[Info-search] command to search for.") @@ -706,6 +714,57 @@ (switch-to-buffer (prog1 (other-buffer (current-buffer)) (bury-buffer (current-buffer))))) +(defun Info-next-menu-item () + (interactive) + (save-excursion + (forward-line -1) + (search-forward "\n* menu:" nil t) + (or (search-forward "\n* " nil t) + (error "No more items in menu")) + (Info-goto-node (Info-extract-menu-node-name)))) + +(defun Info-last-menu-item () + (interactive) + (save-excursion + (forward-line 1) + (search-backward "\n* menu:" nil t) + (or (search-backward "\n* " nil t) + (error "No previous items in menu")) + (Info-goto-node (Info-extract-menu-node-name)))) + +(defmacro no-error (&rest body) + (list 'condition-case nil (cons 'progn (append body '(t))) '(error nil))) + +(defun Info-next-preorder () + "Go to the next node, popping up a level if there is none." + (interactive) + (cond ((no-error (Info-next-menu-item)) ) + ((no-error (Info-up)) (forward-line 1)) + (t (error "No more nodes")))) + +(defun Info-last-preorder () + "Go to the last node, popping up a level if there is none." + (interactive) + (cond ((no-error (Info-last-menu-item)) ) + ((no-error (Info-up)) (forward-line -1)) + (t (error "No previous nodes")))) + +(defun Info-scroll-up () + "Read the next screen. If end of buffer is visible, go to next entry." + (interactive) + (if (pos-visible-in-window-p (point-max)) + (Info-next-preorder) + (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)) + ) + (defun Info-undefined () "Make command be undefined in Info." (interactive) @@ -804,7 +863,8 @@ (setq Info-mode-map (make-keymap)) (suppress-keymap Info-mode-map) (define-key Info-mode-map "." 'beginning-of-buffer) - (define-key Info-mode-map " " '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 "1" 'Info-first-menu-item) (define-key Info-mode-map "2" 'Info-second-menu-item) (define-key Info-mode-map "3" 'Info-third-menu-item)