Accept new always' value for option buffer-offer-save'

Also revert ee512e9a82

* lisp/files.el (buffer-offer-save): In addition to nil and t, now
  allows a third symbol value, `always'. A buffer where this option is
  set to `always' will always be offered for save by
  `save-some-buffers'.
  (save-some-buffers): Check the exact value of this buffer-local
  variable. No longer check the buffer name, or the value of
  `write-contents-functions'.
* doc/lispref/buffers.texi (Killing Buffers): Note change in manual.
* doc/lispref/files.texi (Saving Buffers): Remove note about buffer
  names.
* etc/NEWS: Mention in NEWS.
This commit is contained in:
Eric Abrahamsen 2017-09-24 14:01:21 -07:00
parent 638f64c40a
commit 3d3778d82a
4 changed files with 26 additions and 19 deletions

View file

@ -1089,12 +1089,15 @@ is not cleared by changing major modes.
@defopt buffer-offer-save
This variable, if non-@code{nil} in a particular buffer, tells
@code{save-buffers-kill-emacs} and @code{save-some-buffers} (if the
second optional argument to that function is @code{t}) to offer to
save that buffer, just as they offer to save file-visiting buffers.
@xref{Definition of save-some-buffers}. The variable
@code{buffer-offer-save} automatically becomes buffer-local when set
for any reason. @xref{Buffer-Local Variables}.
@code{save-buffers-kill-emacs} to offer to save that buffer, just as
it offers to save file-visiting buffers. If @code{save-some-buffers}
is called with the second optional argument set to @code{t}, it will
also offer to save the buffer. Lastly, if this variable is set to the
symbol @code{always}, both @code{save-buffers-kill-emacs} and
@code{save-some-buffers} will always offer to save. @xref{Definition
of save-some-buffers}. The variable @code{buffer-offer-save}
automatically becomes buffer-local when set for any reason.
@xref{Buffer-Local Variables}.
@end defopt
@defvar buffer-save-without-query

View file

@ -368,8 +368,7 @@ With an argument of 0, unconditionally do @emph{not} make any backup file.
This command saves some modified file-visiting buffers. Normally it
asks the user about each buffer. But if @var{save-silently-p} is
non-@code{nil}, it saves all the file-visiting buffers without
querying the user. Additionally, buffers whose name begins with a
space (``internal'' buffers) will not be offered for save.
querying the user.
@vindex save-some-buffers-default-predicate
The optional @var{pred} argument provides a predicate that controls

View file

@ -117,6 +117,11 @@ The effect is similar to that of "toolBar" resource on the tool bar.
* Changes in Emacs 26.1
+++
** Option 'buffer-offer-save' can be set to new value, 'always'. When
set to 'always', the command `save-some-buffers' will always offer
this buffer for saving.
** Security vulnerability related to Enriched Text mode is removed.
+++
@ -144,8 +149,7 @@ init file:
'save-buffer' process. Previously, saving a buffer that was not
visiting a file would always prompt for a file name. Now it only does
so if 'write-contents-functions' is nil (or all its functions return
nil). A non-nil buffer-local value for this variable is sufficient
for 'save-some-buffers' to consider the buffer for saving.
nil).
---
** New variable 'executable-prefix-env' for inserting magic signatures.

View file

@ -150,8 +150,13 @@ Called with an absolute file name as argument, it returns t to enable backup.")
(defcustom buffer-offer-save nil
"Non-nil in a buffer means always offer to save buffer on exit.
Do so even if the buffer is not visiting a file.
Automatically local in all buffers."
:type 'boolean
Automatically local in all buffers.
Set to the symbol `always' to offer to save buffer whenever
`save-some-buffers' is called."
:type '(choice (const :tag "Never" nil)
(const :tag "On Emacs exit" t)
(const :tag "Whenever save-some-buffers is called" always))
:group 'backup)
(make-variable-buffer-local 'buffer-offer-save)
(put 'buffer-offer-save 'permanent-local t)
@ -5188,15 +5193,11 @@ change the additional actions you can take on files."
(and (buffer-live-p buffer)
(buffer-modified-p buffer)
(not (buffer-base-buffer buffer))
(not (eq (aref (buffer-name buffer) 0) ?\s))
(or
(buffer-file-name buffer)
(and pred
(progn
(set-buffer buffer)
(and buffer-offer-save (> (buffer-size) 0))))
(buffer-local-value
'write-contents-functions buffer))
(with-current-buffer buffer
(or (eq buffer-offer-save 'always)
(and pred buffer-offer-save (> (buffer-size) 0)))))
(or (not (functionp pred))
(with-current-buffer buffer (funcall pred)))
(if arg