aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1995-09-25 18:36:32 +0000
committerRichard M. Stallman1995-09-25 18:36:32 +0000
commitc88daaeff50d98a592f760548f04288e4da5a40d (patch)
treecd8ae9e61df44d9a2f0f026bb13d3dee50562068
parentb708f0ad5fb5203ddc042dc58fe83f9711fb97f6 (diff)
downloademacs-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.el116
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.
176If you use this function to turn on View mode,
177\"exiting\" View mode does nothing except turn View mode off.
178The 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.
150Letters do not insert themselves. Instead these commands are provided. 189Letters do not insert themselves. Instead these commands are provided.
151Most commands take prefix arguments. Commands dealing with lines 190Most commands take prefix arguments. Commands dealing with lines
@@ -180,21 +219,21 @@ C-p moves upward lines vertically.
180C-l recenters the screen. 219C-l recenters the screen.
181q exit view-mode and return to previous buffer. 220q exit view-mode and return to previous buffer.
182 221
183Entry to this mode runs the normal hook `view-mode-hook'. 222This 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'.
229If you viewed an existing buffer, that buffer returns to its previous mode. 259If you viewed an existing buffer, that buffer returns to its previous mode.
230If you viewed a file that was not present in Emacs, its buffer is killed." 260If 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))