diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/view.el | 98 |
1 files changed, 26 insertions, 72 deletions
diff --git a/lisp/view.el b/lisp/view.el index 2f9eb44e68a..c2aae6e7c15 100644 --- a/lisp/view.el +++ b/lisp/view.el | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | ;;; view.el --- peruse file or buffer without editing. | 1 | ;;; view.el --- peruse file or buffer without editing. |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 1985, 1989, 1994 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 1985, 1989, 1994, 1995 Free Software Foundation, Inc. |
| 4 | 4 | ||
| 5 | ;; Author: K. Shane Hartman | 5 | ;; Author: K. Shane Hartman |
| 6 | ;; Maintainer: FSF | 6 | ;; Maintainer: FSF |
| @@ -23,67 +23,42 @@ | |||
| 23 | 23 | ||
| 24 | ;;; Commentary: | 24 | ;;; Commentary: |
| 25 | 25 | ||
| 26 | ;; This package provides the `view' major mode documented in the Emacs | 26 | ;; This package provides the `view' minor mode documented in the Emacs |
| 27 | ;; user's manual. | 27 | ;; user's manual. |
| 28 | 28 | ||
| 29 | ;;; Code: | 29 | ;;; Code: |
| 30 | 30 | ||
| 31 | (defvar view-mode nil "Non-nil if view-mode is enabled.") | ||
| 32 | (make-variable-buffer-local 'view-mode) | ||
| 33 | |||
| 34 | (or (assq 'view-mode minor-mode-alist) | ||
| 35 | (setq minor-mode-alist | ||
| 36 | (cons '(view-mode " View") minor-mode-alist))) | ||
| 37 | |||
| 31 | (defvar view-mode-map nil) | 38 | (defvar view-mode-map nil) |
| 32 | (if view-mode-map | 39 | (if view-mode-map |
| 33 | nil | 40 | nil |
| 34 | (setq view-mode-map (make-keymap)) | 41 | (setq view-mode-map (make-keymap)) |
| 35 | (fillarray (nth 1 view-mode-map) 'View-undefined) | 42 | (suppress-keymap view-mode-map) |
| 36 | (define-key view-mode-map "\C-c" (lookup-key global-map "\C-c")) | ||
| 37 | (define-key view-mode-map "q" 'view-exit) | 43 | (define-key view-mode-map "q" 'view-exit) |
| 38 | (define-key view-mode-map "-" 'negative-argument) | ||
| 39 | (define-key view-mode-map "0" 'digit-argument) | ||
| 40 | (define-key view-mode-map "1" 'digit-argument) | ||
| 41 | (define-key view-mode-map "2" 'digit-argument) | ||
| 42 | (define-key view-mode-map "3" 'digit-argument) | ||
| 43 | (define-key view-mode-map "4" 'digit-argument) | ||
| 44 | (define-key view-mode-map "5" 'digit-argument) | ||
| 45 | (define-key view-mode-map "6" 'digit-argument) | ||
| 46 | (define-key view-mode-map "7" 'digit-argument) | ||
| 47 | (define-key view-mode-map "8" 'digit-argument) | ||
| 48 | (define-key view-mode-map "9" 'digit-argument) | ||
| 49 | (define-key view-mode-map "\C-u" 'universal-argument) | ||
| 50 | (define-key view-mode-map "\e" nil) | ||
| 51 | (define-key view-mode-map "\C-x" 'Control-X-prefix) | ||
| 52 | (define-key view-mode-map "\e-" 'negative-argument) | ||
| 53 | (define-key view-mode-map "\e0" 'digit-argument) | ||
| 54 | (define-key view-mode-map "\e1" 'digit-argument) | ||
| 55 | (define-key view-mode-map "\e2" 'digit-argument) | ||
| 56 | (define-key view-mode-map "\e3" 'digit-argument) | ||
| 57 | (define-key view-mode-map "\e4" 'digit-argument) | ||
| 58 | (define-key view-mode-map "\e5" 'digit-argument) | ||
| 59 | (define-key view-mode-map "\e6" 'digit-argument) | ||
| 60 | (define-key view-mode-map "\e7" 'digit-argument) | ||
| 61 | (define-key view-mode-map "\e8" 'digit-argument) | ||
| 62 | (define-key view-mode-map "\e9" 'digit-argument) | ||
| 63 | (define-key view-mode-map "<" 'beginning-of-buffer) | 44 | (define-key view-mode-map "<" 'beginning-of-buffer) |
| 64 | (define-key view-mode-map ">" 'end-of-buffer) | 45 | (define-key view-mode-map ">" 'end-of-buffer) |
| 65 | (define-key view-mode-map "\ev" 'View-scroll-lines-backward) | 46 | (define-key view-mode-map "\ev" 'View-scroll-lines-backward) |
| 66 | (define-key view-mode-map "\C-v" 'View-scroll-lines-forward) | 47 | (define-key view-mode-map "\C-v" 'View-scroll-lines-forward) |
| 67 | (define-key view-mode-map " " 'View-scroll-lines-forward) | 48 | (define-key view-mode-map " " 'View-scroll-lines-forward) |
| 68 | (define-key view-mode-map "\177" 'View-scroll-lines-backward) | 49 | (define-key view-mode-map "\C-?" 'View-scroll-lines-backward) |
| 69 | (define-key view-mode-map "\n" 'View-scroll-one-more-line) | 50 | (define-key view-mode-map "\n" 'View-scroll-one-more-line) |
| 70 | (define-key view-mode-map "\r" 'View-scroll-one-more-line) | 51 | (define-key view-mode-map "\r" 'View-scroll-one-more-line) |
| 71 | (define-key view-mode-map "\C-l" 'recenter) | ||
| 72 | (define-key view-mode-map "z" 'View-scroll-lines-forward-set-scroll-size) | 52 | (define-key view-mode-map "z" 'View-scroll-lines-forward-set-scroll-size) |
| 73 | (define-key view-mode-map "g" 'View-goto-line) | 53 | (define-key view-mode-map "g" 'View-goto-line) |
| 74 | (define-key view-mode-map "=" 'what-line) | 54 | (define-key view-mode-map "=" 'what-line) |
| 75 | (define-key view-mode-map "." 'set-mark-command) | 55 | (define-key view-mode-map "." 'set-mark-command) |
| 76 | (define-key view-mode-map "\C-@" 'set-mark-command) | ||
| 77 | (define-key view-mode-map "'" 'View-back-to-mark) | 56 | (define-key view-mode-map "'" 'View-back-to-mark) |
| 78 | (define-key view-mode-map "@" 'View-back-to-mark) | 57 | (define-key view-mode-map "@" 'View-back-to-mark) |
| 79 | (define-key view-mode-map "x" 'exchange-point-and-mark) | 58 | (define-key view-mode-map "x" 'exchange-point-and-mark) |
| 80 | (define-key view-mode-map "h" 'Helper-describe-bindings) | 59 | (define-key view-mode-map "h" 'Helper-describe-bindings) |
| 81 | (define-key view-mode-map "?" 'Helper-describe-bindings) | 60 | (define-key view-mode-map "?" 'Helper-describe-bindings) |
| 82 | (define-key view-mode-map (char-to-string help-char) 'Helper-help) | 61 | (define-key view-mode-map (char-to-string help-char) 'Helper-help) |
| 83 | (define-key view-mode-map "\C-n" 'next-line) | ||
| 84 | (define-key view-mode-map "\C-p" 'previous-line) | ||
| 85 | (define-key view-mode-map "\C-s" 'isearch-forward) | ||
| 86 | (define-key view-mode-map "\C-r" 'isearch-backward) | ||
| 87 | (define-key view-mode-map "s" 'isearch-forward) | 62 | (define-key view-mode-map "s" 'isearch-forward) |
| 88 | (define-key view-mode-map "r" 'isearch-backward) | 63 | (define-key view-mode-map "r" 'isearch-backward) |
| 89 | (define-key view-mode-map "/" 'View-search-regexp-forward) | 64 | (define-key view-mode-map "/" 'View-search-regexp-forward) |
| @@ -154,9 +129,8 @@ This command runs the normal hook `view-mode-hook'." | |||
| 154 | 129 | ||
| 155 | ;;;###autoload | 130 | ;;;###autoload |
| 156 | (defun view-buffer-other-window (buffer-name not-return) | 131 | (defun view-buffer-other-window (buffer-name not-return) |
| 157 | "View BUFFER in View mode in another window, | 132 | "View BUFFER in View mode in another window. |
| 158 | returning to original buffer when done *only* if | 133 | Return to previous buffer when done, unless NOT-RETURN is non-nil. |
| 159 | prefix argument NOT-RETURN is nil (which is the default). | ||
| 160 | 134 | ||
| 161 | The usual Emacs commands are not available in View mode; instead, | 135 | The usual Emacs commands are not available in View mode; instead, |
| 162 | a special set of commands (mostly letters and punctuation) | 136 | a special set of commands (mostly letters and punctuation) |
| @@ -172,7 +146,7 @@ This command runs the normal hook `view-mode-hook'." | |||
| 172 | 146 | ||
| 173 | ;;;###autoload | 147 | ;;;###autoload |
| 174 | (defun view-mode (&optional prev-buffer action) | 148 | (defun view-mode (&optional prev-buffer action) |
| 175 | "Major mode for viewing text but not editing it. | 149 | "Minor mode for viewing text but not editing it. |
| 176 | Letters do not insert themselves. Instead these commands are provided. | 150 | Letters do not insert themselves. Instead these commands are provided. |
| 177 | Most commands take prefix arguments. Commands dealing with lines | 151 | Most commands take prefix arguments. Commands dealing with lines |
| 178 | default to \"scroll size\" lines (initially size of window). | 152 | default to \"scroll size\" lines (initially size of window). |
| @@ -218,10 +192,6 @@ Entry to this mode runs the normal hook `view-mode-hook'. | |||
| 218 | mode-line-buffer-identification) | 192 | mode-line-buffer-identification) |
| 219 | (make-local-variable 'view-old-buffer-read-only) | 193 | (make-local-variable 'view-old-buffer-read-only) |
| 220 | (setq view-old-buffer-read-only buffer-read-only) | 194 | (setq view-old-buffer-read-only buffer-read-only) |
| 221 | (make-local-variable 'view-old-mode-name) | ||
| 222 | (setq view-old-mode-name mode-name) | ||
| 223 | (make-local-variable 'view-old-major-mode) | ||
| 224 | (setq view-old-major-mode major-mode) | ||
| 225 | (make-local-variable 'view-old-local-map) | 195 | (make-local-variable 'view-old-local-map) |
| 226 | (setq view-old-local-map (current-local-map)) | 196 | (setq view-old-local-map (current-local-map)) |
| 227 | (make-local-variable 'view-old-Helper-return-blurb) | 197 | (make-local-variable 'view-old-Helper-return-blurb) |
| @@ -234,8 +204,7 @@ Entry to this mode runs the normal hook `view-mode-hook'. | |||
| 234 | (if (buffer-file-name) | 204 | (if (buffer-file-name) |
| 235 | "Viewing %f" | 205 | "Viewing %f" |
| 236 | "Viewing %b"))) | 206 | "Viewing %b"))) |
| 237 | (setq mode-name "View") | 207 | (setq view-mode t) |
| 238 | (setq major-mode 'view-mode) | ||
| 239 | (setq Helper-return-blurb | 208 | (setq Helper-return-blurb |
| 240 | (format "continue viewing %s" | 209 | (format "continue viewing %s" |
| 241 | (if (buffer-file-name) | 210 | (if (buffer-file-name) |
| @@ -258,9 +227,10 @@ Entry to this mode runs the normal hook `view-mode-hook'. | |||
| 258 | (setq goal-column nil) | 227 | (setq goal-column nil) |
| 259 | 228 | ||
| 260 | (use-local-map view-mode-map) | 229 | (use-local-map view-mode-map) |
| 261 | (run-hooks 'view-hook 'view-mode-hook) | 230 | (run-hooks 'view-mode-hook) |
| 262 | (view-helpful-message)) | 231 | (message |
| 263 | 232 | (substitute-command-keys | |
| 233 | "Type \\[Helper-help] for help, \\[Helper-describe-bindings] for commands, \\[view-exit] to quit."))) | ||
| 264 | 234 | ||
| 265 | (defun view-exit () | 235 | (defun view-exit () |
| 266 | "Exit from view-mode. | 236 | "Exit from view-mode. |
| @@ -269,8 +239,6 @@ If you viewed a file that was not present in Emacs, its buffer is killed." | |||
| 269 | (interactive) | 239 | (interactive) |
| 270 | (setq mode-line-buffer-identification | 240 | (setq mode-line-buffer-identification |
| 271 | view-old-mode-line-buffer-identification) | 241 | view-old-mode-line-buffer-identification) |
| 272 | (setq major-mode view-old-major-mode) | ||
| 273 | (setq mode-name view-old-mode-name) | ||
| 274 | (use-local-map view-old-local-map) | 242 | (use-local-map view-old-local-map) |
| 275 | (setq buffer-read-only view-old-buffer-read-only) | 243 | (setq buffer-read-only view-old-buffer-read-only) |
| 276 | 244 | ||
| @@ -288,24 +256,11 @@ If you viewed a file that was not present in Emacs, its buffer is killed." | |||
| 288 | (set-window-configuration view-return-here))) | 256 | (set-window-configuration view-return-here))) |
| 289 | (if action (funcall action viewed-buffer)))) | 257 | (if action (funcall action viewed-buffer)))) |
| 290 | 258 | ||
| 291 | (defun view-helpful-message () | ||
| 292 | (message | ||
| 293 | (substitute-command-keys | ||
| 294 | "Type \\[Helper-help] for help, \\[Helper-describe-bindings] for commands, \\[view-exit] to quit."))) | ||
| 295 | |||
| 296 | (defun View-undefined () | ||
| 297 | (interactive) | ||
| 298 | (ding) | ||
| 299 | (view-helpful-message)) | ||
| 300 | |||
| 301 | (defun view-window-size () (1- (window-height))) | 259 | (defun view-window-size () (1- (window-height))) |
| 302 | 260 | ||
| 303 | (defun view-scroll-size () | 261 | (defun view-scroll-size () |
| 304 | (min (view-window-size) (or view-scroll-size (view-window-size)))) | 262 | (min (view-window-size) (or view-scroll-size (view-window-size)))) |
| 305 | 263 | ||
| 306 | (defvar view-hook nil | ||
| 307 | "Normal hook run when starting to view a buffer or file.") | ||
| 308 | |||
| 309 | (defvar view-mode-hook nil | 264 | (defvar view-mode-hook nil |
| 310 | "Normal hook run when starting to view a buffer or file.") | 265 | "Normal hook run when starting to view a buffer or file.") |
| 311 | 266 | ||
| @@ -322,13 +277,13 @@ If you viewed a file that was not present in Emacs, its buffer is killed." | |||
| 322 | ; (funcall view-last-command view-last-command-argument)) | 277 | ; (funcall view-last-command view-last-command-argument)) |
| 323 | ; (setq this-command view-last-command-entry)) | 278 | ; (setq this-command view-last-command-entry)) |
| 324 | 279 | ||
| 325 | (defun View-goto-line (&optional line) | 280 | (defun View-goto-line (line) |
| 326 | "Move to line LINE in View mode. | 281 | "Move to line LINE in View mode. |
| 327 | Display is centered at LINE. Sets mark at starting position and pushes | 282 | Display is centered at LINE. Sets mark at starting position and pushes |
| 328 | mark ring." | 283 | mark ring." |
| 329 | (interactive "p") | 284 | (interactive "p") |
| 330 | (push-mark) | 285 | (push-mark) |
| 331 | (goto-line (or line 1)) | 286 | (goto-line line) |
| 332 | (recenter (/ (view-window-size) 2))) | 287 | (recenter (/ (view-window-size) 2))) |
| 333 | 288 | ||
| 334 | (defun View-scroll-lines-forward (&optional lines) | 289 | (defun View-scroll-lines-forward (&optional lines) |
| @@ -336,14 +291,13 @@ mark ring." | |||
| 336 | No arg means whole window full, or number of lines set by \\[View-scroll-lines-forward-set-scroll-size]. | 291 | No arg means whole window full, or number of lines set by \\[View-scroll-lines-forward-set-scroll-size]. |
| 337 | Arg is number of lines to scroll." | 292 | Arg is number of lines to scroll." |
| 338 | (interactive "P") | 293 | (interactive "P") |
| 294 | (setq lines | ||
| 295 | (if lines (prefix-numeric-value lines) | ||
| 296 | (view-scroll-size))) | ||
| 339 | (if (and (pos-visible-in-window-p (point-max)) | 297 | (if (and (pos-visible-in-window-p (point-max)) |
| 340 | ;; Allow scrolling backward at the end of the buffer. | 298 | ;; Allow scrolling backward at the end of the buffer. |
| 341 | (or (null lines) | 299 | (> lines 0)) |
| 342 | (> lines 0))) | ||
| 343 | (view-exit) | 300 | (view-exit) |
| 344 | (setq lines | ||
| 345 | (if lines (prefix-numeric-value lines) | ||
| 346 | (view-scroll-size))) | ||
| 347 | ;; (view-last-command 'View-scroll-lines-forward lines) | 301 | ;; (view-last-command 'View-scroll-lines-forward lines) |
| 348 | (if (>= lines (view-window-size)) | 302 | (if (>= lines (view-window-size)) |
| 349 | (scroll-up nil) | 303 | (scroll-up nil) |
| @@ -424,7 +378,7 @@ pushes mark ring." | |||
| 424 | Displays line at center of window. Pops mark ring so successive | 378 | Displays line at center of window. Pops mark ring so successive |
| 425 | invocations return to earlier marks." | 379 | invocations return to earlier marks." |
| 426 | (interactive) | 380 | (interactive) |
| 427 | (goto-char (or (mark) (point-min))) | 381 | (goto-char (or (mark t) (point-min))) |
| 428 | (pop-mark) | 382 | (pop-mark) |
| 429 | (recenter (/ (view-window-size) 2))) | 383 | (recenter (/ (view-window-size) 2))) |
| 430 | 384 | ||