Subject: bug#25478: 26.0.50; No hooks are called when auto-saving

From: Eli Zaretskii <[email-masked]>
Date: Fri, 20 Jan 2017 10:45:05 +0200

> From: Glenn Morris <[email-masked]>
> Date: Thu, 19 Jan 2017 15:29:04 -0500
> Cc: [email-masked]
> 
> Philipp Stephani wrote:
> 
> > The Emacs manual states:
> >
> > "If you want auto-saving to be done in the visited file rather than in
> > a separate auto-save file, set the variable
> > 'auto-save-visited-file-name' to a non-'nil' value.  In this mode, there
> > is no real difference between auto-saving and explicit saving."
> >
> > However, there is a significant difference between auto-saving and
> > explicit saving, even in this mode: auto-saving doesn't run
> > before-save-hook, after-save-hook, write-contents-functions, or
> > write-file-functions.  Either some of these hooks should be run during
> > auto-saving if auto-save-visited-file-name is t, or new hooks should be
> > created to run in this case.
> 
> The phrasing of the manual can easily be changed if it's creating
> unreasonable expectations.

I've done that now on the release branch.

> Do you have a use case for autosave running hooks?
> One could argue that it is a low-level
> operation that should not be modifiable in this way.

Auto-save has its own hook.  But that's just the tip of an iceberg,
because nowadays various modes can completely change what happens at
save-buffer time by using the hooks mentioned above, and those hooks
run only when basic-save-buffer is invoked; they won't be run during
auto-saving.

And there are other differences, too.  E.g., if save-buffer asks the
user for a suitable encoding, it will record the value used in
buffer-file-coding-system, so that future saves reuse that
automatically.  Auto-saving doesn't record the value, so if the user
doesn't change the buffer's file encoding manually, she will be
prompted to provide an encoding on every auto-save.

All in all, I think this option is subtly dangerous and should be
either deprecated or completely reimplemented to invoke
basic-save-buffer instead.  I'm quite sure this option made sense in
the past, when complications with encoding and save-related hooks
didn't exist, but that is no longer the case in Emacs these days.
If someone thinks using this option will allow them not to bother with
saving their edits, they are in for an unpleasant surprise.

(Not sure whether we should close this bug now that the documentation
is fixed.)