Adjust backupfile handling
authorJoerg Jaspert <joerg.jaspert.sp@dlh.de>
Fri, 13 Oct 2017 11:40:50 +0000 (13:40 +0200)
committerJoerg Jaspert <joerg.jaspert.sp@dlh.de>
Fri, 13 Oct 2017 11:40:50 +0000 (13:40 +0200)
.emacs.d/config/emacs.org

index 1884dd1..75ec59c 100644 (file)
@@ -1589,7 +1589,61 @@ Shell. zsh in my case.
      (setq global-auto-revert-non-file-buffers t)
      (global-auto-revert-mode)))
  #+END_SRC
+** Backup file handling
+[2017-10-13 Fr 12:54]
+ 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
+(setq backup-directory-alist `(("" . ,jj-backup-directory)))
+(defun my-backup-file-name (fpath)
+  "Return a new file path of a given file path.
+If the new path's directories does not exist, create them."
+  (let* (
+         (backupRootDir jj-backup-directory)
+         (filePath (replace-regexp-in-string "[A-Za-z]:" "" fpath )) ; remove Windows driver letter in path, for example, “C:”
+         (backupFilePath (replace-regexp-in-string "//" "/" (concat backupRootDir filePath "~") ))
+         )
+    (make-directory (file-name-directory backupFilePath) (file-name-directory backupFilePath))
+    backupFilePath
+    )
+  )
+(setq make-backup-file-name-function 'my-backup-file-name)
+
+(validate-setq delete-old-versions t)
+(validate-setq kept-new-versions 12)
+(validate-setq kept-old-versions 4)
+(validate-setq version-control t)
+(validate-setq backup-by-copying t)
+(validate-setq backup-by-copying-when-linked t) ;; Copy linked files, don't rename.
+(validate-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))
 
+#+END_SRC
 ** CANCELLED backups                                             :CANCELLED:
 CLOSED: [2017-08-26 Sa 14:41]
  Emacs should keep backup copies of files I edit, but I do not want them