julian@uhccux.uhcc.hawaii.edu (Julian Cowley) (01/29/89)
[Oops, my previous attempt at posting this had an error in it. Please pardon.] Since there currently seems to be a flourish of sources in this newsgroup, here is a little code for viewing buffers. Basically, it is a simple emulation of `more', and is set up as a minor mode so that it can be toggled like other minor modes such as overwrite-mode. I find it best when it is placed on a global keystroke which is normally undefined, such as this: (global-set-key "\M-#" 'view-buffer-mode) Have fun, and enjoy it. julian@uhccux.uhcc.hawaii.edu uunet!ucsd!nosc!uhccux!julian julian@uhccux.bitnet "People who aren't amused don't talk." <----------------------------- cut here -----------------------------> ;; Define a simple viewing minor mode for the current buffer ;; Written by Julian Cowley <julian@uhccux.uhcc.hawaii.edu> Jan. 89 ;; ;; The standard GNU copying restrictions apply here. (defvar view-buffer-mode-map nil "The keymap for View buffer mode.") (defvar old-local-map nil "Temporary storage for the buffer's local map while View buffer mode is in effect.") (defvar old-buffer-read-only nil "Temporary storage for the buffer's buffer-read-only variable while View buffer mode is in effect.") (make-variable-buffer-local 'viewing-buffer) (make-variable-buffer-local 'old-local-map) (make-variable-buffer-local 'old-buffer-read-only) (or (assq 'viewing-buffer minor-mode-alist) (setq minor-mode-alist (append minor-mode-alist '((viewing-buffer " View"))))) (if view-buffer-mode-map () (setq view-buffer-mode-map (make-sparse-keymap)) (define-key view-buffer-mode-map " " 'scroll-up) (define-key view-buffer-mode-map "\r" 'scroll-up-line) (define-key view-buffer-mode-map "\C-d" 'scroll-up-half-screen) (define-key view-buffer-mode-map "\C-?" 'scroll-down) (define-key view-buffer-mode-map "." 'beginning-of-buffer) (define-key view-buffer-mode-map "e" 'end-of-buffer) (define-key view-buffer-mode-map "<" 'beginning-of-buffer) (define-key view-buffer-mode-map ">" 'end-of-buffer) (define-key view-buffer-mode-map "g" 'goto-line) (define-key view-buffer-mode-map "=" 'what-line) (define-key view-buffer-mode-map "\C-hm" 'describe-view-buffer-mode)) (defun view-buffer-mode () "Minor mode to view buffers. Toggles on each call. The bindings are:\\{view-buffer-mode-map}" (interactive) (if viewing-buffer ;; if we are currently viewing a buffer, restore the ;; original buffer (progn (use-local-map old-local-map) (setq buffer-read-only old-buffer-read-only viewing-buffer nil)) ;; save the local map and the state of buffer-read-only (setq old-local-map (current-local-map)) (use-local-map view-buffer-mode-map) (setq old-buffer-read-only buffer-read-only buffer-read-only t viewing-buffer t)) ;; update the mode line (set-buffer-modified-p (buffer-modified-p))) (defun describe-view-buffer-mode () "Display documentation of View buffer mode." (interactive) (with-output-to-temp-buffer "*Help*" (princ "View Mode:\n") (princ (documentation 'view-buffer-mode)) (print-help-return-message))) (defun scroll-up-line () (interactive) (scroll-up 1)) (defun scroll-up-half-screen () (interactive) (scroll-up (/ (screen-height) 2)))