Add symbol property 'save-some-buffers-function' (bug#46374)

* lisp/files.el (save-some-buffers-root): Put non-nil
symbol property 'save-some-buffers-function'.
(save-some-buffers): Check pred for the
symbol property 'save-some-buffers-function'.
(save-some-buffers-default-predicate): Mention
symbol property 'save-some-buffers-function'.
This commit is contained in:
Juri Linkov 2021-10-10 20:38:12 +03:00
parent a3e10af95c
commit 575e626105

View file

@ -5745,7 +5745,9 @@ This allows you to stop `save-some-buffers' from asking
about certain files that you'd usually rather not save. about certain files that you'd usually rather not save.
This function is called (with no parameters) from the buffer to This function is called (with no parameters) from the buffer to
be saved." be saved. When the function's symbol has the property
`save-some-buffers-function', the higher-order function is supposed
to return a predicate used to check buffers."
:group 'auto-save :group 'auto-save
;; FIXME nil should not be a valid option, let alone the default, ;; FIXME nil should not be a valid option, let alone the default,
;; eg so that add-function can be used. ;; eg so that add-function can be used.
@ -5765,6 +5767,7 @@ of the directory that was default during command invocation."
(project-root (project-current))) (project-root (project-current)))
default-directory))) default-directory)))
(lambda () (file-in-directory-p default-directory root)))) (lambda () (file-in-directory-p default-directory root))))
(put 'save-some-buffers-root 'save-some-buffers-function t)
(defun save-some-buffers (&optional arg pred) (defun save-some-buffers (&optional arg pred)
"Save some modified file-visiting buffers. Asks user about each one. "Save some modified file-visiting buffers. Asks user about each one.
@ -5796,9 +5799,10 @@ change the additional actions you can take on files."
(setq pred save-some-buffers-default-predicate)) (setq pred save-some-buffers-default-predicate))
;; Allow `pred' to be a function that returns a predicate ;; Allow `pred' to be a function that returns a predicate
;; with lexical bindings in its original environment (bug#46374). ;; with lexical bindings in its original environment (bug#46374).
(let ((pred-fun (and (functionp pred) (funcall pred)))) (when (and (symbolp pred) (get pred 'save-some-buffers-function))
(when (functionp pred-fun) (let ((pred-fun (and (functionp pred) (funcall pred))))
(setq pred pred-fun))) (when (functionp pred-fun)
(setq pred pred-fun))))
(let* ((switched-buffer nil) (let* ((switched-buffer nil)
(save-some-buffers--switch-window-callback (save-some-buffers--switch-window-callback
(lambda (buffer) (lambda (buffer)