Search code examples
emacsbackup

Viewing / Reloading emacs backup files


I am successfully using the code below to cause emacs to save many versions of each file. But I cannot figure out what commands you use in emacs to actually load those files into a buffer.

I am expecting some kind of a history viewer command!!! I can find nothing.

(setq backup-directory-alist  '(("." . "~/auto-saves")))
(setq version-control     t
    kept-old-versions   2    kept-new-versions  200
    delete-old-versions t    backup-by-copying  t)

Solution

  • You can just open the files in which ever directory you're saving them in (~/autosaves). But the backup-walker package is way better.


    Update: I highly recommend using the no-littering package to keep your ~/.emacs.d (and $HOME) clean. Here's my backup config (assuming you have use-package and melpa set up):

    (use-package no-littering)
    
    (setq make-backup-files t
          vc-make-backup-files t
          version-control t
          kept-new-versions 128
          kept-old-versions 0
          delete-old-versions t
          backup-by-copying t)
    
    (defun force-backup-of-buffer ()
      (setq buffer-backed-up nil))
    (add-hook 'before-save-hook #'force-backup-of-buffer)
    
    (use-package backup-walker)
    
    (let ((dir (no-littering-expand-var-file-name "auto-save/")))
      (make-directory dir t)
      (add-to-list 'auto-save-file-name-transforms `(".*" ,dir t) 'append))
    

    If you don't want to use no-littering, set backup-directory-alist, tramp-persistency-file-name, tramp-backup-directory-alist, and tramp-auto-save-directory.

    (setq emacs-persistence-directory 
      (expand-file-name "var" user-emacs-directory))
    (let ((dir (expand-file-name "backup" emacs-persistence-directory)))
      (unless (file-directory-p dir)
        (make-directory dir t))
      (setq backup-directory-alist `(("." . ,dir))))
    
    (let ((backup-dir (concat emacs-persistence-directory "tramp-backup/")))
      (setq tramp-persistency-file-name (concat emacs-persistence-directory
                                                "tramp")
            tramp-backup-directory-alist `(("." . ,backup-dir))
            tramp-auto-save-directory (concat emacs-persistence-directory
                                              "tramp-auto-save/"))
      (dolist (d (list tramp-auto-save-directory backup-dir))
        (unless (file-exists-p d)
          (make-directory d t))))
    

    Side note: auto-save is a different feature than backups. Backups save a copy the first time you save a buffer (C-x C-s). Above, I have the function force-backup-of-buffer on before-save-hook to backup on every save. Autosave saves a copy every time you make a certain number of edits. For a given file, there can be many backups, but there's only one autosave.