aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2008-06-11 01:47:48 +0000
committerStefan Monnier2008-06-11 01:47:48 +0000
commit9b106871a4ace6f2b5a441db801db3727ea4377a (patch)
tree0cd3646523136583c0895fecfa217cd0c61f5f5d
parent2f4c3d6df6d79fd49cb49cf3aa7f4610b78b21b4 (diff)
downloademacs-9b106871a4ace6f2b5a441db801db3727ea4377a.tar.gz
emacs-9b106871a4ace6f2b5a441db801db3727ea4377a.zip
* emacs-lisp/map-ynp.el (map-y-or-n-p): Add support for other-window-scroll.
* files.el (save-some-buffers-action-alist): Only use recursive-edit if the user enabled recursive-minibuffers.
-rw-r--r--lisp/ChangeLog15
-rw-r--r--lisp/emacs-lisp/map-ynp.el56
-rw-r--r--lisp/files.el84
3 files changed, 88 insertions, 67 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index c1a72c69428..3810d954628 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,10 +1,17 @@
12008-06-11 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * files.el (save-some-buffers-action-alist): Only use recursive-edit
4 if the user enabled recursive-minibuffers.
5
6 * emacs-lisp/map-ynp.el (map-y-or-n-p): Add support for other-window-scroll.
7
12008-06-11 Jason Rumney <jasonr@gnu.org> 82008-06-11 Jason Rumney <jasonr@gnu.org>
2 9
3 * term/w32-win.el (w32-menu-bar-open): Rename from menu-bar-open. 10 * term/w32-win.el (w32-menu-bar-open): Rename from menu-bar-open.
4 Use tmm-menubar if menu is disabled in this frame. 11 Use tmm-menubar if menu is disabled in this frame.
5 12
6 * menu-bar.el (menu-bar-open): Determine how to open menu bar 13 * menu-bar.el (menu-bar-open): Determine how to open menu bar
7 from frame type, per documentation. Add w32 case. 14 from frame type, per documentation. Add w32 case.
8 15
92008-06-10 Stefan Monnier <monnier@iro.umontreal.ca> 162008-06-10 Stefan Monnier <monnier@iro.umontreal.ca>
10 17
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index 3c28113414e..634538f33a9 100644
--- a/lisp/emacs-lisp/map-ynp.el
+++ b/lisp/emacs-lisp/map-ynp.el
@@ -81,20 +81,14 @@ Returns the number of actions taken."
81 ;; Non-nil means we should use mouse menus to ask. 81 ;; Non-nil means we should use mouse menus to ask.
82 use-menus 82 use-menus
83 delayed-switch-frame 83 delayed-switch-frame
84 (next (if (or (and list (symbolp list)) 84 ;; Rebind other-window-scroll-buffer so that subfunctions can set
85 (subrp list) 85 ;; it temporarily, without risking affecting the caller.
86 (byte-code-function-p list) 86 (other-window-scroll-buffer other-window-scroll-buffer)
87 (and (consp list) 87 (next (if (functionp list)
88 (eq (car list) 'lambda))) 88 (lambda () (setq elt (funcall list)))
89 (function (lambda () 89 (lambda () (when list
90 (setq elt (funcall list)))) 90 (setq elt (pop list))
91 (function (lambda () 91 t)))))
92 (if list
93 (progn
94 (setq elt (car list)
95 list (cdr list))
96 t)
97 nil))))))
98 (if (and (listp last-nonmenu-event) 92 (if (and (listp last-nonmenu-event)
99 use-dialog-box) 93 use-dialog-box)
100 ;; Make a list describing a dialog box. 94 ;; Make a list describing a dialog box.
@@ -125,11 +119,22 @@ Returns the number of actions taken."
125 "") 119 "")
126 ;; Make a map that defines each user key as a vector containing 120 ;; Make a map that defines each user key as a vector containing
127 ;; its definition. 121 ;; its definition.
128 map (cons 'keymap 122 map
129 (append (mapcar (lambda (elt) 123 (let ((map (make-sparse-keymap)))
130 (cons (car elt) (vector (nth 1 elt)))) 124 (set-keymap-parent map query-replace-map)
131 action-alist) 125 (define-key map [?\C-\M-v] 'scroll-other-window)
132 query-replace-map)))) 126 (define-key map [M-next] 'scroll-other-window)
127 (define-key map [?\C-\M-\S-v] 'scroll-other-window-down)
128 (define-key map [M-prior] 'scroll-other-window-down)
129 ;; The above are rather inconvenient, so maybe we should
130 ;; provide the non-other keys for the other-scroll as well.
131 ;; (define-key map [?\C-v] 'scroll-other-window)
132 ;; (define-key map [next] 'scroll-other-window)
133 ;; (define-key map [?\M-v] 'scroll-other-window-down)
134 ;; (define-key map [prior] 'scroll-other-window-down)
135 (dolist (elt action-alist)
136 (define-key map (vector (car elt)) (vector (nth 1 elt))))
137 map)))
133 (unwind-protect 138 (unwind-protect
134 (progn 139 (progn
135 (if (stringp prompter) 140 (if (stringp prompter)
@@ -165,7 +170,7 @@ Returns the number of actions taken."
165 (single-key-description char))) 170 (single-key-description char)))
166 (setq def (lookup-key map (vector char)))) 171 (setq def (lookup-key map (vector char))))
167 (cond ((eq def 'exit) 172 (cond ((eq def 'exit)
168 (setq next (function (lambda () nil)))) 173 (setq next (lambda () nil)))
169 ((eq def 'act) 174 ((eq def 'act)
170 ;; Act on the object. 175 ;; Act on the object.
171 (funcall actor elt) 176 (funcall actor elt)
@@ -177,7 +182,7 @@ Returns the number of actions taken."
177 ;; Act on the object and then exit. 182 ;; Act on the object and then exit.
178 (funcall actor elt) 183 (funcall actor elt)
179 (setq actions (1+ actions) 184 (setq actions (1+ actions)
180 next (function (lambda () nil)))) 185 next (lambda () nil)))
181 ((eq def 'quit) 186 ((eq def 'quit)
182 (setq quit-flag t) 187 (setq quit-flag t)
183 (setq next `(lambda () 188 (setq next `(lambda ()
@@ -220,13 +225,18 @@ C-g to quit (cancel the whole command);
220 (format "or . (period) to %s \ 225 (format "or . (period) to %s \
221the current %s and exit." 226the current %s and exit."
222 action object)))) 227 action object))))
223 (save-excursion 228 (with-current-buffer standard-output
224 (set-buffer standard-output)
225 (help-mode))) 229 (help-mode)))
226 230
227 (setq next `(lambda () 231 (setq next `(lambda ()
228 (setq next ',next) 232 (setq next ',next)
229 ',elt))) 233 ',elt)))
234 ((and (symbolp def) (commandp def))
235 (call-interactively def)
236 ;; Regurgitated; try again.
237 (setq next `(lambda ()
238 (setq next ',next)
239 ',elt)))
230 ((vectorp def) 240 ((vectorp def)
231 ;; A user-defined key. 241 ;; A user-defined key.
232 (if (funcall (aref def 0) elt) ;Call its function. 242 (if (funcall (aref def 0) elt) ;Call its function.
diff --git a/lisp/files.el b/lisp/files.el
index 0dc8ba20b2d..b38871096cc 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -4163,22 +4163,28 @@ This requires the external program `diff' to be in your `exec-path'."
4163 nil) 4163 nil)
4164 4164
4165(defvar save-some-buffers-action-alist 4165(defvar save-some-buffers-action-alist
4166 '((?\C-r 4166 `((?\C-r
4167 (lambda (buf) 4167 ,(lambda (buf)
4168 (view-buffer buf 4168 (if (not enable-recursive-minibuffers)
4169 (lambda (ignore) 4169 (progn (display-buffer buf)
4170 (exit-recursive-edit))) 4170 (setq other-window-scroll-buffer buf))
4171 (recursive-edit) 4171 (view-buffer buf (lambda (_) (exit-recursive-edit)))
4172 ;; Return nil to ask about BUF again. 4172 (recursive-edit))
4173 nil) 4173 ;; Return nil to ask about BUF again.
4174 nil)
4174 "view this buffer") 4175 "view this buffer")
4175 (?d (lambda (buf) 4176 (?d ,(lambda (buf)
4176 (save-window-excursion 4177 (if (null buffer-file-name)
4177 (diff-buffer-with-file buf)) 4178 (message "Not applicable: no file")
4178 (view-buffer (get-buffer-create "*Diff*") 4179 (save-window-excursion (diff-buffer-with-file buf))
4179 (lambda (ignore) (exit-recursive-edit))) 4180 (if (not enable-recursive-minibuffers)
4180 (recursive-edit) 4181 (progn (display-buffer (get-buffer-create "*Diff*"))
4181 nil) 4182 (setq other-window-scroll-buffer "*Diff*"))
4183 (view-buffer (get-buffer-create "*Diff*")
4184 (lambda (_) (exit-recursive-edit)))
4185 (recursive-edit)))
4186 ;; Return nil to ask about BUF again.
4187 nil)
4182 "view changes in this buffer")) 4188 "view changes in this buffer"))
4183 "ACTION-ALIST argument used in call to `map-y-or-n-p'.") 4189 "ACTION-ALIST argument used in call to `map-y-or-n-p'.")
4184 4190
@@ -4216,31 +4222,29 @@ change the additional actions you can take on files."
4216 ;; and record the number thus saved. 4222 ;; and record the number thus saved.
4217 (setq files-done 4223 (setq files-done
4218 (map-y-or-n-p 4224 (map-y-or-n-p
4219 (function 4225 (lambda (buffer)
4220 (lambda (buffer) 4226 (and (buffer-modified-p buffer)
4221 (and (buffer-modified-p buffer) 4227 (not (buffer-base-buffer buffer))
4222 (not (buffer-base-buffer buffer)) 4228 (or
4223 (or 4229 (buffer-file-name buffer)
4224 (buffer-file-name buffer) 4230 (and pred
4225 (and pred 4231 (progn
4226 (progn 4232 (set-buffer buffer)
4227 (set-buffer buffer) 4233 (and buffer-offer-save (> (buffer-size) 0)))))
4228 (and buffer-offer-save (> (buffer-size) 0))))) 4234 (or (not (functionp pred))
4229 (or (not (functionp pred)) 4235 (with-current-buffer buffer (funcall pred)))
4230 (with-current-buffer buffer (funcall pred))) 4236 (if arg
4231 (if arg 4237 t
4232 t 4238 (setq queried t)
4233 (setq queried t) 4239 (if (buffer-file-name buffer)
4234 (if (buffer-file-name buffer) 4240 (format "Save file %s? "
4235 (format "Save file %s? " 4241 (buffer-file-name buffer))
4236 (buffer-file-name buffer)) 4242 (format "Save buffer %s? "
4237 (format "Save buffer %s? " 4243 (buffer-name buffer))))))
4238 (buffer-name buffer))))))) 4244 (lambda (buffer)
4239 (function 4245 (with-current-buffer buffer
4240 (lambda (buffer) 4246 (save-buffer)))
4241 (set-buffer buffer) 4247 (buffer-list)
4242 (save-buffer)))
4243 (buffer-list)
4244 '("buffer" "buffers" "save") 4248 '("buffer" "buffers" "save")
4245 save-some-buffers-action-alist)) 4249 save-some-buffers-action-alist))
4246 ;; Maybe to save abbrevs, and record whether 4250 ;; Maybe to save abbrevs, and record whether