What is a good way to take a backup of my .emacs file each time Emacs starts? I want to keep multiple copies for when I need to get back to a previous version.
My first thought is to issue a shell command from within the .emacs file:
cp ~/.emacs ~/Backups/.emacs-yyyymmdd:hhmmss
... appending the current timestamp to get a unique filename. But as far as I know you can't issue shell commands from the .emacs file.
I've read about BackupEachSave and ForceBackups. Does anyone have experience with these? Do they work well?
EDIT:
Event_jr's answer about version control is a possible solution. I prefer using a shell command, though, because version control applies to all files and I don't need multiple backups of every single file.
I looked at the 'version control' variable. It's described in the Emacs manual:
Emacs can also make numbered backup files. Numbered backup file names contain ‘.~’, the >number, and another ‘~’ after the original file name. Thus, the backup files of eval.c >would be called eval.c.~1~, eval.c.~2~, and so on, all the way through names like eval.c.~259~ >and beyond.
The variable version-control determines whether to make single backup files or multiple >numbered backup files.
So, I added this to my .emacs:
; Version control and backups:
(setq version-control t)
Works as advertised.
This section tells how to control backups on a per-file basis. I haven't explored it.
The question you should really be asking is how do I never lose a revision of any file I edit in Emacs, including ~/.emacs
?
The answer is versioned backups. The variable that controls this feature is called version-control
, which is kind of confusing, as it relates completely to backups, not VCS.
This is also a feature of Emacs; there is no additional package to install. Almost everything I work on is in VCS, but I still find it extremely useful to have all revisions of my work easily accessible. Storage is so cheap, so why not?
EDIT: describe the save-buffer
aspect of backup every file.
You should read the documentation (C-h k C-x C-s) of save-buffer
to understand the nuances, but basically passing it C-u C-u will force it to backup after every save. I actaully remap it to my own function
(defun le::save-buffer-force-backup (arg)
"save buffer, always with a 2 \\[universal-argument]'s
see `save-buffer'
With ARG, don't force backup.
"
(interactive "P")
(if (consp arg)
(save-buffer)
(save-buffer 16)))
(global-set-key [remap save-buffer] 'le::save-buffer-force-backup)
as far as I know you can't issue shell commands from the .emacs file.
Sure you can:
(shell-command "cp ~/.emacs ~/.emacs-`date +%Y%m%d:%H%M`")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With