diff options
| author | Richard M. Stallman | 1995-09-25 18:36:32 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1995-09-25 18:36:32 +0000 |
| commit | c88daaeff50d98a592f760548f04288e4da5a40d (patch) | |
| tree | cd8ae9e61df44d9a2f0f026bb13d3dee50562068 | |
| parent | b708f0ad5fb5203ddc042dc58fe83f9711fb97f6 (diff) | |
| download | emacs-c88daaeff50d98a592f760548f04288e4da5a40d.tar.gz emacs-c88daaeff50d98a592f760548f04288e4da5a40d.zip | |
(view-mode-enter): Renamed from view-mode. Callers changed.
Don't create local vars here. Set view-mode-auto-exit.
Don't change local map--just set view-mode.
(view-mode): New function toggles minor mode in the usual way.
(view-mode-map): Put this on minor-mode-map-alist.
(view-mode-exit): Do the exit actions only if view-mode-auto-exit.
(View-scroll-lines-forward): Exit only if view-scroll-lines-forward.
(view-mode-auto-exit, view-old-buffer-read-only)
(view-old-Helper-return-blurb, view-scroll-size, view-last-regexp)
(view-exit-action, view-return-here, view-exit-position):
Defvar them and make them always-local.
| -rw-r--r-- | lisp/view.el | 116 |
1 files changed, 75 insertions, 41 deletions
diff --git a/lisp/view.el b/lisp/view.el index b7cdb00d2fb..06f30a5bff6 100644 --- a/lisp/view.el +++ b/lisp/view.el | |||
| @@ -28,9 +28,31 @@ | |||
| 28 | 28 | ||
| 29 | ;;; Code: | 29 | ;;; Code: |
| 30 | 30 | ||
| 31 | (defvar view-mode nil "Non-nil if view-mode is enabled.") | 31 | (defvar view-mode nil "Non-nil if View mode is enabled.") |
| 32 | (make-variable-buffer-local 'view-mode) | 32 | (make-variable-buffer-local 'view-mode) |
| 33 | 33 | ||
| 34 | (defvar view-mode-auto-exit nil | ||
| 35 | "Non-nil means scrolling past the end of buffer exits View mode.") | ||
| 36 | (make-variable-buffer-local 'view-mode-auto-exit) | ||
| 37 | |||
| 38 | (defvar view-old-buffer-read-only nil) | ||
| 39 | (make-variable-buffer-local 'view-old-buffer-read-only) | ||
| 40 | (defvar view-old-Helper-return-blurb) | ||
| 41 | (make-variable-buffer-local 'view-old-Helper-return-blurb) | ||
| 42 | |||
| 43 | (defvar view-scroll-size nil) | ||
| 44 | (make-variable-buffer-local 'view-scroll-size) | ||
| 45 | |||
| 46 | (defvar view-last-regexp nil) | ||
| 47 | (make-variable-buffer-local 'view-last-regexp) | ||
| 48 | |||
| 49 | (defvar view-exit-action nil) | ||
| 50 | (make-variable-buffer-local 'view-exit-action) | ||
| 51 | (defvar view-return-here nil) | ||
| 52 | (make-variable-buffer-local 'view-return-here) | ||
| 53 | (defvar view-exit-position nil) | ||
| 54 | (make-variable-buffer-local 'view-exit-position) | ||
| 55 | |||
| 34 | (or (assq 'view-mode minor-mode-alist) | 56 | (or (assq 'view-mode minor-mode-alist) |
| 35 | (setq minor-mode-alist | 57 | (setq minor-mode-alist |
| 36 | (cons '(view-mode " View") minor-mode-alist))) | 58 | (cons '(view-mode " View") minor-mode-alist))) |
| @@ -70,6 +92,10 @@ | |||
| 70 | (define-key view-mode-map "p" 'View-search-last-regexp-backward) | 92 | (define-key view-mode-map "p" 'View-search-last-regexp-backward) |
| 71 | ) | 93 | ) |
| 72 | 94 | ||
| 95 | (or (assq 'view-mode minor-mode-map-alist) | ||
| 96 | (setq minor-mode-map-alist | ||
| 97 | (cons (cons 'view-mode view-mode-map) minor-mode-map-alist))) | ||
| 98 | |||
| 73 | 99 | ||
| 74 | ;;;###autoload | 100 | ;;;###autoload |
| 75 | (defun view-file (file-name) | 101 | (defun view-file (file-name) |
| @@ -88,9 +114,9 @@ This command runs the normal hook `view-mode-hook'." | |||
| 88 | ;; This used to pass t as second argument, | 114 | ;; This used to pass t as second argument, |
| 89 | ;; but then the buffer did not show up in the Buffers menu. | 115 | ;; but then the buffer did not show up in the Buffers menu. |
| 90 | (switch-to-buffer buf-to-view had-a-buf) | 116 | (switch-to-buffer buf-to-view had-a-buf) |
| 91 | (view-mode old-buf | 117 | (view-mode-enter old-buf |
| 92 | (and (not had-a-buf) (not (buffer-modified-p buf-to-view)) | 118 | (and (not had-a-buf) (not (buffer-modified-p buf-to-view)) |
| 93 | 'kill-buffer)))) | 119 | 'kill-buffer)))) |
| 94 | 120 | ||
| 95 | ;;;###autoload | 121 | ;;;###autoload |
| 96 | (defun view-file-other-window (file-name) | 122 | (defun view-file-other-window (file-name) |
| @@ -108,9 +134,9 @@ This command runs the normal hook `view-mode-hook'." | |||
| 108 | (had-a-buf (get-file-buffer file-name)) | 134 | (had-a-buf (get-file-buffer file-name)) |
| 109 | (buf-to-view (find-file-noselect file-name))) | 135 | (buf-to-view (find-file-noselect file-name))) |
| 110 | (switch-to-buffer-other-window buf-to-view) | 136 | (switch-to-buffer-other-window buf-to-view) |
| 111 | (view-mode old-arrangement | 137 | (view-mode-enter old-arrangement |
| 112 | (and (not had-a-buf) (not (buffer-modified-p buf-to-view)) | 138 | (and (not had-a-buf) (not (buffer-modified-p buf-to-view)) |
| 113 | 'kill-buffer)))) | 139 | 'kill-buffer)))) |
| 114 | 140 | ||
| 115 | ;;;###autoload | 141 | ;;;###autoload |
| 116 | (defun view-buffer (buffer-name) | 142 | (defun view-buffer (buffer-name) |
| @@ -125,7 +151,7 @@ This command runs the normal hook `view-mode-hook'." | |||
| 125 | (interactive "bView buffer: ") | 151 | (interactive "bView buffer: ") |
| 126 | (let ((old-buf (current-buffer))) | 152 | (let ((old-buf (current-buffer))) |
| 127 | (switch-to-buffer buffer-name t) | 153 | (switch-to-buffer buffer-name t) |
| 128 | (view-mode old-buf nil))) | 154 | (view-mode-enter old-buf nil))) |
| 129 | 155 | ||
| 130 | ;;;###autoload | 156 | ;;;###autoload |
| 131 | (defun view-buffer-other-window (buffer-name not-return) | 157 | (defun view-buffer-other-window (buffer-name not-return) |
| @@ -142,10 +168,23 @@ This command runs the normal hook `view-mode-hook'." | |||
| 142 | (interactive "bView buffer:\nP") | 168 | (interactive "bView buffer:\nP") |
| 143 | (let ((return-to (and not-return (current-window-configuration)))) | 169 | (let ((return-to (and not-return (current-window-configuration)))) |
| 144 | (switch-to-buffer-other-window buffer-name) | 170 | (switch-to-buffer-other-window buffer-name) |
| 145 | (view-mode return-to))) | 171 | (view-mode-enter return-to))) |
| 146 | 172 | ||
| 147 | ;;;###autoload | 173 | ;;;###autoload |
| 148 | (defun view-mode (&optional prev-buffer action) | 174 | (defun view-mode (&optional arg) |
| 175 | "Toggle View mode. | ||
| 176 | If you use this function to turn on View mode, | ||
| 177 | \"exiting\" View mode does nothing except turn View mode off. | ||
| 178 | The other way to turn View mode on is by calling | ||
| 179 | `view-mode-enter'." | ||
| 180 | (interactive "P") | ||
| 181 | (setq view-mode | ||
| 182 | (if (null arg) | ||
| 183 | (not view-mode) | ||
| 184 | (> (prefix-numeric-value arg) 0))) | ||
| 185 | (force-mode-line-update)) | ||
| 186 | |||
| 187 | (defun view-mode-enter (&optional prev-buffer action) | ||
| 149 | "Minor mode for viewing text but not editing it. | 188 | "Minor mode for viewing text but not editing it. |
| 150 | Letters do not insert themselves. Instead these commands are provided. | 189 | Letters do not insert themselves. Instead these commands are provided. |
| 151 | Most commands take prefix arguments. Commands dealing with lines | 190 | Most commands take prefix arguments. Commands dealing with lines |
| @@ -180,21 +219,21 @@ C-p moves upward lines vertically. | |||
| 180 | C-l recenters the screen. | 219 | C-l recenters the screen. |
| 181 | q exit view-mode and return to previous buffer. | 220 | q exit view-mode and return to previous buffer. |
| 182 | 221 | ||
| 183 | Entry to this mode runs the normal hook `view-mode-hook'. | 222 | This function runs the normal hook `view-mode-hook'. |
| 184 | 223 | ||
| 185 | \\{view-mode-map}" | 224 | \\{view-mode-map}" |
| 186 | ; Not interactive because dangerous things happen | 225 | ; Not interactive because dangerous things happen |
| 187 | ; if you call it without passing a buffer as argument | 226 | ; if you call it without passing a buffer as argument |
| 188 | ; and they are not easy to fix. | 227 | ; and they are not easy to fix. |
| 189 | ; (interactive) | 228 | ; (interactive) |
| 190 | (make-local-variable 'view-old-buffer-read-only) | ||
| 191 | (setq view-old-buffer-read-only buffer-read-only) | 229 | (setq view-old-buffer-read-only buffer-read-only) |
| 192 | (make-local-variable 'view-old-local-map) | ||
| 193 | (setq view-old-local-map (current-local-map)) | ||
| 194 | (make-local-variable 'view-old-Helper-return-blurb) | ||
| 195 | (setq view-old-Helper-return-blurb | 230 | (setq view-old-Helper-return-blurb |
| 196 | (and (boundp 'Helper-return-blurb) Helper-return-blurb)) | 231 | (and (boundp 'Helper-return-blurb) Helper-return-blurb)) |
| 197 | 232 | ||
| 233 | ;; Enable view-exit to make use of the data we just saved | ||
| 234 | ;; and to perform the exit action. | ||
| 235 | (setq view-mode-auto-exit t) | ||
| 236 | |||
| 198 | (setq buffer-read-only t) | 237 | (setq buffer-read-only t) |
| 199 | (setq view-mode t) | 238 | (setq view-mode t) |
| 200 | (setq Helper-return-blurb | 239 | (setq Helper-return-blurb |
| @@ -203,22 +242,13 @@ Entry to this mode runs the normal hook `view-mode-hook'. | |||
| 203 | (file-name-nondirectory (buffer-file-name)) | 242 | (file-name-nondirectory (buffer-file-name)) |
| 204 | (buffer-name)))) | 243 | (buffer-name)))) |
| 205 | 244 | ||
| 206 | (make-local-variable 'view-exit-action) | ||
| 207 | (setq view-exit-action action) | 245 | (setq view-exit-action action) |
| 208 | (make-local-variable 'view-return-here) | ||
| 209 | (setq view-return-here prev-buffer) | 246 | (setq view-return-here prev-buffer) |
| 210 | (make-local-variable 'view-exit-position) | ||
| 211 | (setq view-exit-position (point-marker)) | 247 | (setq view-exit-position (point-marker)) |
| 212 | 248 | ||
| 213 | (make-local-variable 'view-scroll-size) | ||
| 214 | (setq view-scroll-size nil) | ||
| 215 | (make-local-variable 'view-last-regexp) | ||
| 216 | (setq view-last-regexp nil) | ||
| 217 | |||
| 218 | (beginning-of-line) | 249 | (beginning-of-line) |
| 219 | (setq goal-column nil) | 250 | (setq goal-column nil) |
| 220 | 251 | ||
| 221 | (use-local-map view-mode-map) | ||
| 222 | (run-hooks 'view-mode-hook) | 252 | (run-hooks 'view-mode-hook) |
| 223 | (message | 253 | (message |
| 224 | (substitute-command-keys | 254 | (substitute-command-keys |
| @@ -229,22 +259,25 @@ Entry to this mode runs the normal hook `view-mode-hook'. | |||
| 229 | If you viewed an existing buffer, that buffer returns to its previous mode. | 259 | If you viewed an existing buffer, that buffer returns to its previous mode. |
| 230 | If you viewed a file that was not present in Emacs, its buffer is killed." | 260 | If you viewed a file that was not present in Emacs, its buffer is killed." |
| 231 | (interactive) | 261 | (interactive) |
| 232 | (use-local-map view-old-local-map) | 262 | (setq view-mode nil) |
| 233 | (setq buffer-read-only view-old-buffer-read-only) | 263 | (force-mode-line-update) |
| 234 | 264 | (cond (view-mode-auto-exit | |
| 235 | (goto-char view-exit-position) | 265 | (setq buffer-read-only view-old-buffer-read-only) |
| 236 | (set-marker view-exit-position nil) | 266 | (setq view-mode-auto-exit nil) |
| 237 | 267 | ||
| 238 | ;; Now do something to the buffer that we were viewing | 268 | (goto-char view-exit-position) |
| 239 | ;; (such as kill it). | 269 | (set-marker view-exit-position nil) |
| 240 | (let ((viewed-buffer (current-buffer)) | 270 | |
| 241 | (action view-exit-action)) | 271 | ;; Now do something to the buffer that we were viewing |
| 242 | (cond | 272 | ;; (such as kill it). |
| 243 | ((bufferp view-return-here) | 273 | (let ((viewed-buffer (current-buffer)) |
| 244 | (switch-to-buffer view-return-here)) | 274 | (action view-exit-action)) |
| 245 | ((window-configuration-p view-return-here) | 275 | (cond |
| 246 | (set-window-configuration view-return-here))) | 276 | ((bufferp view-return-here) |
| 247 | (if action (funcall action viewed-buffer)))) | 277 | (switch-to-buffer view-return-here)) |
| 278 | ((window-configuration-p view-return-here) | ||
| 279 | (set-window-configuration view-return-here))) | ||
| 280 | (if action (funcall action viewed-buffer)))))) | ||
| 248 | 281 | ||
| 249 | (defun view-window-size () (1- (window-height))) | 282 | (defun view-window-size () (1- (window-height))) |
| 250 | 283 | ||
| @@ -286,7 +319,8 @@ Arg is number of lines to scroll." | |||
| 286 | (view-scroll-size))) | 319 | (view-scroll-size))) |
| 287 | (if (and (pos-visible-in-window-p (point-max)) | 320 | (if (and (pos-visible-in-window-p (point-max)) |
| 288 | ;; Allow scrolling backward at the end of the buffer. | 321 | ;; Allow scrolling backward at the end of the buffer. |
| 289 | (> lines 0)) | 322 | (> lines 0) |
| 323 | view-mode-auto-exit) | ||
| 290 | (view-exit) | 324 | (view-exit) |
| 291 | ;; (view-last-command 'View-scroll-lines-forward lines) | 325 | ;; (view-last-command 'View-scroll-lines-forward lines) |
| 292 | (if (>= lines (view-window-size)) | 326 | (if (>= lines (view-window-size)) |