new backup handling using backups-mode
authorJoerg Jaspert <joerg@debian.org>
Wed, 21 May 2014 20:53:53 +0000 (22:53 +0200)
committerJoerg Jaspert <joerg@debian.org>
Wed, 21 May 2014 20:53:53 +0000 (22:53 +0200)
.emacs.d/config/emacs.org

index e03ed63..be785c1 100644 (file)
@@ -769,34 +769,6 @@ disabling that.
 #+END_SRC
 
 ** Miscellaneous stuff
-Emacs should keep backup copies of files I edit, but I do not want them
-to clutter up the filesystem everywhere. So I put them into one defined
-place, backup-directory, which even contains my username (for systems
-where =temporary-file-directory= is not inside my home).
-#+BEGIN_SRC emacs-lisp :tangle yes
-(setq backup-directory-alist `(("." . ,jj-backup-directory)))
-(setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
-
-(setq version-control t)     ;; Use version numbers for backups
-(setq kept-new-versions 10)  ;; Number of newest versions to keep
-(setq kept-old-versions 2)   ;; Number of oldest versions to keep
-(setq delete-old-versions t) ;; Ask to delete excess backup versions?
-
-(add-hook 'before-save-hook  'force-backup-of-buffer)
-
-(setq backup-by-copying-when-linked t) ;; Copy linked files, don't rename.
-(setq backup-by-copying t)
-(setq make-backup-files t)
-
-(setq backup-enable-predicate
-      (lambda (name)
-        (and (normal-backup-enable-predicate name)
-             (not
-              (let ((method (file-remote-p name 'method)))
-                (when (stringp method)
-                  (member method '("su" "sudo"))))))))
-#+END_SRC
-
 Weeks start on Monday, not sunday.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (setq calendar-week-start-day 1)
@@ -962,6 +934,71 @@ Quickly move around in buffers.
 
     (bind-key "C-c e A" 'ascii-toggle)))
 #+END_SRC
+** backups
+Emacs should keep backup copies of files I edit, but I do not want them
+to clutter up the filesystem everywhere. So I put them into one defined
+place, backup-directory, which even contains my username (for systems
+where =temporary-file-directory= is not inside my home).
+#+BEGIN_SRC emacs-lisp :tangle yes
+(use-package backups-mode
+  :load-path "elisp/backups-mode"
+  :bind   (("\C-cv" . save-version)
+           ("\C-cb" . list-backups)
+           ("\C-ck" . kill-buffer-prompt)
+           ("\C-cw" . backup-walker-start))
+  :init
+  (progn
+    (setq backup-directory jj-backup-directory)
+    (setq tramp-backup-directory (concat jj-backup-directory "/tramp"))
+    (if (not (file-exists-p tramp-backup-directory))
+        (make-directory tramp-backup-directory))
+    (setq tramp-backup-directory-alist `((".*" . ,tramp-backup-directory)))
+    (setq backup-directory-alist `(("." . ,jj-backup-directory)))
+    (setq auto-save-list-file-prefix (concat jj-backup-directory ".auto-saves-"))
+    (setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
+
+    (setq version-control t)     ;; Use version numbers for backups
+    (setq kept-new-versions 10)  ;; Number of newest versions to keep
+    (setq kept-old-versions 2)   ;; Number of oldest versions to keep
+    (setq delete-old-versions t) ;; Ask to delete excess backup versions?
+    (setq backup-by-copying t)
+    (setq backup-by-copying-when-linked t) ;; Copy linked files, don't rename.
+    (setq make-backup-files t)
+
+    (defadvice kill-buffer (around kill-buffer)
+      "Always save before killing a file buffer"
+      (when (and (buffer-modified-p)
+                 (buffer-file-name)
+                 (file-exists-p (buffer-file-name)))
+        (save-buffer))
+      ad-do-it)
+    (ad-activate 'kill-buffer)
+
+    (defadvice save-buffers-kill-emacs (around save-buffers-kill-emacs)
+      "Always save before killing emacs"
+      (save-some-buffers t)
+      ad-do-it)
+    (ad-activate 'save-buffers-kill-emacs)
+
+    (defun kill-buffer-prompt ()
+      "Allows one to kill a buffer without saving it.
+This is necessary since once you start backups-mode all file based buffers
+are saved automatically when they are killed"
+      (interactive)
+      (if (and (buffer-modified-p) (buffer-file-name) (file-exists-p (buffer-file-name)) (y-or-n-p "Save buffer?"))
+          (save-buffer)
+        (set-buffer-modified-p nil))
+      (kill-buffer))
+
+    (setq backup-enable-predicate
+          (lambda (name)
+            (and (normal-backup-enable-predicate name)
+                 (not
+                  (let ((method (file-remote-p name 'method)))
+                    (when (stringp method)
+                      (member method '("su" "sudo"))))))))))
+
+#+END_SRC
 ** markdown-mode
 [2014-05-20 Tue 23:04]
 #+BEGIN_SRC emacs-lisp :tangle yes