diff options
author | JSDurand <mmemmew@gmail.com> | 2023-06-18 17:06:03 +0800 |
---|---|---|
committer | JSDurand <mmemmew@gmail.com> | 2023-06-18 17:06:03 +0800 |
commit | 409afb58f365d609c80c598a5de687213c027065 (patch) | |
tree | 4b41bddb6449f2eab5662dc90f992cbde71db4cb | |
parent | 3d8fffd03f44e5734e96cb76ea5b29b544955697 (diff) |
desktop and bookmark: proper save mechanism
* bookmark-conf.el (durand-saving-bookmarks): This variable indicates
whether or not we are saving bookmarks already.
(#'bookmark-write-file): Just a formating change.
(durand-save-bookmark-or-desktop): Save bookmarks and/or the desktop
file, depending on its argument.
(ctl-x-r-map): Bind 'C-x r s' to `durand-save-bookmark-or-desktop`.
* desktop-conf.el (durand-saving-bookmarks): In case this variable is
not defined, silence the errors.
(desktop-also-save-bookmarks): If we are not already saving
bookmarks, save the bookmarks as well.
(desktop-save-hook): Add `desktop-also-save-bookmarks` to this hook,
so that when saving desktop and not already saving bookmarks, Emacs
can automatically save bookmarks as well.
-rw-r--r-- | bookmark-conf.el | 30 | ||||
-rw-r--r-- | desktop-conf.el | 12 |
2 files changed, 41 insertions, 1 deletions
diff --git a/bookmark-conf.el b/bookmark-conf.el index 074628f..eddb3d5 100644 --- a/bookmark-conf.el +++ b/bookmark-conf.el @@ -442,8 +442,36 @@ Modified by Durand to use `print' instead of `pp'. (kill-buffer (current-buffer)) (progress-reporter-done reporter)))))) -(advice-add #'bookmark-write-file :override #'durand-bookmark-write-file) +(advice-add #'bookmark-write-file :override + #'durand-bookmark-write-file) +;;; Intelligent saving of bookmarks and desktop files + +(load-config "desktop-conf.el") + +(defvar durand-saving-bookmarks nil + "Non-nil if we are saving bookmarks already.") + +(defun durand-save-bookmark-or-desktop (&optional arg) + "Save bookmarks and/or desktop depending on ARG. + +If and only if ARG is non-nil, save the desktop file. + +If and only if ARG is an integer, do not save bookmarks. + +Below are listed three possible scenarios: + +1. ARG = nil: save bookmarks only. +2. ARG = '(4): save both bookmarks and desktop. +3. ARG = integer: save desktop only." + (interactive "P") + (cond (arg + (let ((durand-saving-bookmarks t)) + (desktop-save (car desktop-path)) + (message "desktop saved")))) + (cond ((not (integerp arg)) (bookmark-save)))) + +(define-key ctl-x-r-map (vector ?s) #'durand-save-bookmark-or-desktop) (provide 'bookmark-conf) ;;; bookmark-conf.el ends here diff --git a/desktop-conf.el b/desktop-conf.el index 462c549..074aad0 100644 --- a/desktop-conf.el +++ b/desktop-conf.el @@ -198,5 +198,17 @@ no questions asked." (desktop-save-mode 1) +;;; Add a hook to save bookmarks if we are not already saving them. + +(defvar durand-saving-bookmarks) + +(defun desktop-also-save-bookmarks () + "Save bookmarks if we are not already saving bookmarks." + (cond + ((and (functionp #'bookmark-save) (not durand-saving-bookmarks)) + (bookmark-save)))) + +(add-hook 'desktop-save-hook #'desktop-also-save-bookmarks) + (provide 'desktop-conf) ;;; desktop-conf.el ends here |