Eric Abrahamsen writes: > Eli Zaretskii writes: > >>> From: Eric Abrahamsen >>> Date: Tue, 23 May 2017 15:19:11 +0800 >>> >>> Most special-mode buffers aren't visiting a file, and thus they miss out >>> on all the `do-auto-save' and `save-some-buffers' mechanisms. I'd guess >>> a fair number of packages that use special-mode *do* have some concept >>> of saving, or persisting data in some other way. >>> >>> I think the `write-contents-functions' hook would be an ideal way of >>> solving this problem, except that the way `basic-save-buffer' is >>> written, it won't let you get that far without having a file name. >>> >>> My proposal is to declare `write-contents-functions' as *explicitly* a >>> hook for buffers that don't have any file associated with them at all >>> (this would be in contrast to `write-file-functions'). Then we'd move it >>> up higher in the process: either earlier in `basic-save-buffer', or all >>> the way up to `save-buffer' -- that way `basic-save-buffer' could only >>> be for buffers that have a file. Okay, I've poked at this in all the ways I can think of, and it seems to work okay. Basic recap: The goal is to re-interpret `write-contents-functions' as a mechanism for allowing buffers that are not visiting a file to specify a custom save mechanism. The original idea was to let special-mode buffers install their own save routines, which would run on `save-buffer', and also as a part of the `save-some-buffers' routine. If the buffer-local value of `write-contents-functions' is non-nil for buffer BUF, then `save-some-buffers' will accept BUF as a potentially saveable buffer. `basic-save-buffer' has been rearranged so that the `write-contents-functions' hook is run a little earlier on. Only if the functions in that hook fail will `basic-save-buffer' go on to prompt the user for a file to save the buffer in. I'm leaving `do-auto-save' as a problem for another day. I've done a proper commit, with manual edits and everything. I'm a bit leery of just committing this, as it theoretically touches every buffer in an Emacs session. If anyone wants to take a hard stare at it, that would be very welcome. Eric