(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.
This commit is contained in:
parent
8dba3a0626
commit
74223bbdaf
2 changed files with 12 additions and 11 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue