I've seen the post How do I control how Emacs makes backup files? And a few similar post showing very similar solutions. I'm well aware of this approach. But it doesn't do quite what I would like it to do. I would like each file that I'm going to back up have its own personalized backup directory.
For example, let's say I have the following files in the current directory, /Users/me/project_a/
apple.txt
banana.txt
coconut.txt
when I edit these files, I would like them to have their backups stored in directories as follows:
/Users/me/project_a/.backups/apple.txt/
/Users/me/project_a/.backups/banana.txt/
/Users/me/project_a/.backups/coconut.txt/
If I another project directory, say /Users/me/project_b/
, with files
needle.doc
thread.doc
thimble.doc
Then, their respective backups should be located as
/Users/me/project_b/.backups/needle.doc/
/Users/me/project_b/.backups/thread.doc/
/Users/me/project_b/.backups/thimble.doc/
Yes, I'm using the name of the file being backed up as part of the path name for the directory into which it's been saved. So, if I have three previous versions of thimble.doc
, the full path name for the backups would be:
/Users/me/project_b/.backups/thimble.doc/thimble.doc.~1~
/Users/me/project_b/.backups/thimble.doc/thimble.doc.~2~
/Users/me/project_b/.backups/thimble.doc/thimble.doc.~3~
I have a work around to accomplish that (see below). Ideally, I would name the backups as:
/Users/me/project_b/.backups/thimble.doc/bak.~1~
/Users/me/project_b/.backups/thimble.doc/bak.~2~
/Users/me/project_b/.backups/thimble.doc/bak.~3~
I haven't yet figured out how to get there. (Any suggestions?)
Here's how I'm able to accomplish the less ideal version of this using the .dir-locals.el
file with the following code for saving .txt
and .tex
files.
(let (a b)
(dolist (ae-fh (directory-files-recursively "." "\\.\\(txt\\|tex\\)$"))
(setq a (file-name-nondirectory ae-fh))
(setq a (replace-regexp-in-string "\\." "\\\\." a))
(setq b (concat "./.backups/" (file-name-nondirectory ae-fh)))
(add-to-list 'backup-directory-alist (cons a b))
))
I've already made backup-directory-alist
a buffer-local variable.
This accomplishes what I want, but I don't really like this approach. I would like to altogether avoid using .dir-locals.el
as a solution to this problem. But also, I would like to avoid junking up the backup-directory-alist
. It would be nice if there were a hook I could apply to the backup process which would inform emacs on the fly how it should name the backup file.
Does anyone know how to do this or know where to point me? I've considered trying to redefine make-backup-file-name-function
, but I don't entirely understand what I'm doing with the elisp and right now I've got projects that need to be worked on.
What can folks tell me?