82 lines
3.4 KiB
EmacsLisp
82 lines
3.4 KiB
EmacsLisp
;;; syd-autosave.el -*- lexical-binding: t; -*-
|
|
|
|
(require 'syd-prelude)
|
|
|
|
(setq backup-directory-alist
|
|
`(("." . ,(file-name-concat syd-data-dir "backup")))
|
|
auto-save-list-file-prefix (let ((dir (file-name-concat syd-cache-dir
|
|
"autosave/")))
|
|
(make-directory dir t)
|
|
dir)
|
|
;; Nil means untracked files under VC won't get backed up.
|
|
vc-make-backup-files t
|
|
;; Nil will clobber symlinks.
|
|
backup-by-copying t
|
|
;; Use versioned backups.
|
|
version-control t
|
|
;; Don't create ugly lockfiles. See
|
|
;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Interlocking.html#Interlocking
|
|
;; This is a good feature, but not very relevant to a single-user system.
|
|
create-lockfiles nil
|
|
auto-save-file-name-transforms
|
|
;; Good grief, girl...
|
|
`(("\\`/[^/]*:\\([^/]*/\\)*\\([^/]*\\)\\'"
|
|
,(concat auto-save-list-file-prefix "tramp-\\2") t)
|
|
(".*"
|
|
,(file-name-concat syd-cache-dir "autosave") t))
|
|
kept-new-versions 5
|
|
delete-old-versions t)
|
|
|
|
;; Save your cursor position in recently-opened files.
|
|
(use-package saveplace
|
|
:hook (on-first-file-hook . save-place-mode)
|
|
:custom (save-place-file (file-name-concat syd-cache-dir "places")))
|
|
|
|
;; Keep track of recently-visited files.
|
|
(use-package recentf
|
|
:hook ((on-first-file-hook . recentf-mode)
|
|
(find-file-hook . recentf-save-list))
|
|
:custom (recentf-save-file (file-name-concat syd-data-dir "recentf")))
|
|
|
|
(use-package savehist
|
|
:defer-incrementally custom
|
|
:hook (on-first-input-hook . savehist-mode)
|
|
:custom (savehist-file (file-name-concat syd-cache-dir "savehist"))
|
|
:config
|
|
(setq savehist-save-minibuffer-history t
|
|
savehist-autosave-interval nil ; save on kill only
|
|
savehist-additional-variables
|
|
'(kill-ring ; persist clipboard
|
|
register-alist ; persist macros
|
|
mark-ring global-mark-ring ; persist marks
|
|
search-ring regexp-search-ring)) ; persist searches
|
|
(syd-add-hook 'savehist-save-hook
|
|
(defun syd--savehist-unpropertize-variables-h ()
|
|
"Remove text properties from `kill-ring' to reduce savehist cache size."
|
|
(setq kill-ring
|
|
(mapcar #'substring-no-properties
|
|
(cl-remove-if-not #'stringp kill-ring))
|
|
register-alist
|
|
(cl-loop for (reg . item) in register-alist
|
|
if (stringp item)
|
|
collect (cons reg (substring-no-properties item))
|
|
else collect (cons reg item))))
|
|
(defun syd--savehist-remove-unprintable-registers-h ()
|
|
"Remove unwriteable registers (e.g. containing window configurations).
|
|
Otherwise, `savehist' would discard `register-alist' entirely if we don't omit
|
|
the unwritable tidbits."
|
|
;; Save new value in the temp buffer savehist is running
|
|
;; `savehist-save-hook' in. We don't want to actually remove the
|
|
;; unserializable registers in the current session!
|
|
(setq-local register-alist
|
|
(cl-remove-if-not #'savehist-printable register-alist)))))
|
|
|
|
;; Stay out of my config dir!
|
|
(setq bookmark-default-file
|
|
(file-name-concat syd-data-dir "bookmarks")
|
|
transient-history-file
|
|
(file-name-concat syd-data-dir "transient/history.el"))
|
|
|
|
|
|
(provide 'syd-autosave)
|