Mercurial > emacs
comparison lisp/view.el @ 13078:d7735534db86
(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.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 25 Sep 1995 18:36:32 +0000 |
parents | f286a0f591f6 |
children | 05bae277596e |
comparison
equal
deleted
inserted
replaced
13077:65092cab3f43 | 13078:d7735534db86 |
---|---|
26 ;; This package provides the `view' minor 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.") | 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 | |
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) | |
33 | 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))) |
37 | 59 |
68 (define-key view-mode-map "\e\C-r" 'View-search-regexp-backward) | 90 (define-key view-mode-map "\e\C-r" 'View-search-regexp-backward) |
69 (define-key view-mode-map "n" 'View-search-last-regexp-forward) | 91 (define-key view-mode-map "n" 'View-search-last-regexp-forward) |
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) |
76 "View FILE in View mode, returning to previous buffer when done. | 102 "View FILE in View mode, returning to previous buffer when done. |
77 The usual Emacs commands are not available; instead, | 103 The usual Emacs commands are not available; instead, |
86 (had-a-buf (get-file-buffer file-name)) | 112 (had-a-buf (get-file-buffer file-name)) |
87 (buf-to-view (find-file-noselect file-name))) | 113 (buf-to-view (find-file-noselect file-name))) |
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) |
97 "View FILE in View mode in other window. | 123 "View FILE in View mode in other window. |
98 Return to previous buffer when done. | 124 Return to previous buffer when done. |
106 (interactive "fView file: ") | 132 (interactive "fView file: ") |
107 (let ((old-arrangement (current-window-configuration)) | 133 (let ((old-arrangement (current-window-configuration)) |
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) |
117 "View BUFFER in View mode, returning to previous buffer when done. | 143 "View BUFFER in View mode, returning to previous buffer when done. |
118 The usual Emacs commands are not available; instead, | 144 The usual Emacs commands are not available; instead, |
123 | 149 |
124 This command runs the normal hook `view-mode-hook'." | 150 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) |
132 "View BUFFER in View mode in another window. | 158 "View BUFFER in View mode in another window. |
133 Return to previous buffer when done, unless NOT-RETURN is non-nil. | 159 Return to previous buffer when done, unless NOT-RETURN is non-nil. |
140 | 166 |
141 This command runs the normal hook `view-mode-hook'." | 167 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 |
152 default to \"scroll size\" lines (initially size of window). | 191 default to \"scroll size\" lines (initially size of window). |
153 Search commands default to a repeat count of one. | 192 Search commands default to a repeat count of one. |
178 C-n moves down lines vertically. | 217 C-n moves down lines vertically. |
179 C-p moves upward lines vertically. | 218 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)) |
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) | |
197 | 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 |
201 (format "continue viewing %s" | 240 (format "continue viewing %s" |
202 (if (buffer-file-name) | 241 (if (buffer-file-name) |
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 | |
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 | 248 |
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 |
225 "Type \\[Helper-help] for help, \\[Helper-describe-bindings] for commands, \\[view-exit] to quit."))) | 255 "Type \\[Helper-help] for help, \\[Helper-describe-bindings] for commands, \\[view-exit] to quit."))) |
226 | 256 |
227 (defun view-exit () | 257 (defun view-exit () |
228 "Exit from view-mode. | 258 "Exit from view-mode. |
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 |
251 (defun view-scroll-size () | 284 (defun view-scroll-size () |
252 (min (view-window-size) (or view-scroll-size (view-window-size)))) | 285 (min (view-window-size) (or view-scroll-size (view-window-size)))) |
284 (setq lines | 317 (setq lines |
285 (if lines (prefix-numeric-value lines) | 318 (if lines (prefix-numeric-value lines) |
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)) |
293 (scroll-up nil) | 327 (scroll-up nil) |
294 (if (>= (- lines) (view-window-size)) | 328 (if (>= (- lines) (view-window-size)) |