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)))