Making Emacs Autosaving of Files Ignore Email Drafts
This week I noticed that a ton of files like
*message*-20201029-134012 piled up in my home folder. These are email drafts from
message-mode, and the numbers are a date-time-stamp.
These didn’t appear ever before. So I figured it might have something to do with autosaving after looking at the change history of my configuration file – and it sure does.
I had enabled
auto-save-visited-mode in emacs some time last month. It saves the files you open (“visit”) in Emacs automatically to disk. That’s a fairly new feature since version 26.1: before, you had
auto-save-mode, but that would auto-save to a temporary copy of the file you looked at.
Normally, I’d deactivate the autosave feature for email drafts, and that’d be it. But
auto-save-visited-mode is a global mode. You can turn it on or off, but the setting affects all buffers for all files. Meh.
real-auto-save package is a bit more clever. It has the same effect, but can be activated on a per-buffer (or per-file) basis.
I just created a PR on GitHub to create a global mode so that I don’t have to selectively enable
real-auto-save. I want to have it on by default, and deactivate for e.g.
I’m no Emacs Lisp wiz, but this was pretty simple (after looking at how existing packages do such things).
I basically executed this code to test if a global mode would work, and then submitted a PR with the relevant changes:
;; Load the package (require 'real-auto-save) (setq real-auto-save-interval 10) ;; in seconds ;; Helpers to enable/disable the note per-buffer ;; (so I don't have to use lambdas) (defun turn-on-real-auto-save () (real-auto-save-mode 1)) (defun turn-off-real-auto-save () (real-auto-save-mode -1)) ;; Here's the kicker: add a global mode! (define-globalized-minor-mode global-real-auto-save-mode real-auto-save-mode turn-on-real-auto-save) ;; Enable globally (global-real-auto-save-mode 1) ;; Disable for message-mode (add-hook 'message-mode-hook #'turn-off-real-auto-save)
In my layman understanding,
define-globalized-minor-mode takes 3 arguments:
- The global mode’s name
- The corresponding local mode’s name (which has no effect on it’s own apart from the name association?)
- The global mode execution function (which actually turns this on)
The global minor modes are enabled first, then the hook for having an email buffer open is executed, and I don’t get the autosaving files anymore. Nice!
I have to figure out why the drafts (1) appeared in these locations, since they don’t match any of my configuration, and (2) why they didn’t auto-delete when sending the email.
Receive new posts via email.