summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2022-01-09 21:02:31 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2022-01-09 22:17:45 -0500
commit74223bbdaff7533709fe6e81837e09d98320c1ee (patch)
tree94a038891c01e37ce60280db90e1815a9f0d1ea4
parent8dba3a06261ebb21cb83145505a0c6e35a123c12 (diff)
downloademacs-74223bbdaff7533709fe6e81837e09d98320c1ee.tar.gz
emacs-74223bbdaff7533709fe6e81837e09d98320c1ee.tar.bz2
emacs-74223bbdaff7533709fe6e81837e09d98320c1ee.zip
(save-some-buffers): Simplify the fix for bug#46374
* lisp/files.el (save-some-buffers): Only check the `save-some-buffers-function` property on functions from `save-some-buffers-default-predicate` since callers which provide a `pred` argument can arrange to compute `pred` themselves if needed. * test/lisp/files-tests.el (files-tests-buffer-offer-save): Don't test with `pred` set to `save-some-buffers-root` since it's not an appropriate function for that any more.
-rw-r--r--lisp/files.el21
-rw-r--r--test/lisp/files-tests.el2
2 files changed, 12 insertions, 11 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 9a7b26ee03c..888c2d37846 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -5755,7 +5755,7 @@ to return a predicate used to check buffers."
;; FIXME nil should not be a valid option, let alone the default,
;; eg so that add-function can be used.
:type '(choice (const :tag "Default" nil)
- (function :tag "Only in subdirs of root"
+ (function :tag "Only in subdirs of current project"
save-some-buffers-root)
(function :tag "Custom function"))
:version "26.1")
@@ -5791,21 +5791,22 @@ all with no questions.
Optional second argument PRED determines which buffers are considered:
If PRED is nil, all the file-visiting buffers are considered.
If PRED is t, then certain non-file buffers will also be considered.
-If PRED is a zero-argument function, it indicates for each buffer whether
-to consider it or not when called with that buffer current.
+If PRED is a function, it is called with no argument in each buffer and
+should return non-nil if that buffer should be considered.
PRED defaults to the value of `save-some-buffers-default-predicate'.
See `save-some-buffers-action-alist' if you want to
change the additional actions you can take on files."
(interactive "P")
(unless pred
- (setq pred save-some-buffers-default-predicate))
- ;; Allow `pred' to be a function that returns a predicate
- ;; with lexical bindings in its original environment (bug#46374).
- (when (and (symbolp pred) (get pred 'save-some-buffers-function))
- (let ((pred-fun (and (functionp pred) (funcall pred))))
- (when (functionp pred-fun)
- (setq pred pred-fun))))
+ (setq pred
+ ;; Allow `pred' to be a function that returns a predicate
+ ;; with lexical bindings in its original environment (bug#46374).
+ (if (and (symbolp save-some-buffers-default-predicate)
+ (get save-some-buffers-default-predicate
+ 'save-some-buffers-function))
+ (funcall save-some-buffers-default-predicate)
+ save-some-buffers-default-predicate)))
(let* ((switched-buffer nil)
(save-some-buffers--switch-window-callback
(lambda (buffer)
diff --git a/test/lisp/files-tests.el b/test/lisp/files-tests.el
index 57597762afd..be9339a8f5b 100644
--- a/test/lisp/files-tests.el
+++ b/test/lisp/files-tests.el
@@ -1769,7 +1769,7 @@ PRED is nil."
(files-tests-with-all-permutations
buffers-offer
buffers-offer-init
- (dolist (pred `(nil t save-some-buffers-root))
+ (dolist (pred `(nil t))
(dolist (callers-dir `(nil save-some-buffers-root))
(let* ((head-offer (cadar buffers-offer))
(res (cond ((null pred)