branch: externals/bufferlo
commit 0044b70214fff282ca3c76ba5e60ab378019f9a2
Author: shipmints <[email protected]>
Commit: shipmints <[email protected]>
Simplify bufferlo--clone-undelete-frame-advice
bufferlo--tab-bar-undo-close-tab-advice
Replace bufferlo-bookmark-frame-clone-policy with
bufferlo-bookmark-frame-duplicate-policy
Change bufferlo--clone-undelete-frame-advice so quit deletes the
unneeded frame.
Change bufferlo--tab-bar-undo-close-tab-advice so quit deletes the
unneeded tab.
Updated docs.
---
README.org | 6 ----
bufferlo.el | 105 +++++++++++++++++++++++++++++-------------------------------
2 files changed, 51 insertions(+), 60 deletions(-)
diff --git a/README.org b/README.org
index 8232e01a03..fdf736a510 100644
--- a/README.org
+++ b/README.org
@@ -579,11 +579,6 @@ settings.
(setq bufferlo-bookmark-frame-duplicate-policy 'raise) ; do not load, raise
the existing frame
#+end_src
Note: 'raise is considered to act as 'clear by bookmark set loading.
-#+begin_src emacs-lisp
- ;; retain the bookmark when cloning a bookmarked frame via `clone-frame' or
C-x 5 c
- (setq bufferlo-bookmark-frame-clone-policy 'prompt) ; default
- (setq bufferlo-bookmark-frame-clone-policy 'allow) ; old default behavior
-#+end_src
*** Tab bookmark options
@@ -1102,7 +1097,6 @@ remain in force until they are saved if this policy is
set to t.
(setq bufferlo-bookmark-frame-load-make-frame 'restore-geometry)
(setq bufferlo-bookmark-frame-load-policy 'prompt)
(setq bufferlo-bookmark-frame-duplicate-policy 'prompt)
- (setq bufferlo-bookmark-frame-clone-policy 'prompt)
(setq bufferlo-bookmark-tab-replace-policy 'new)
(setq bufferlo-bookmark-tab-duplicate-policy 'prompt)
(setq bufferlo-bookmark-tab-in-bookmarked-frame-policy 'prompt)
diff --git a/bufferlo.el b/bufferlo.el
index d0dda5de2b..c7bc090afd 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -282,21 +282,6 @@ Note: \\='raise is considered \\='clear during
bookmark-set loading."
(const :tag "Clear (with message)" clear-warn)
(const :tag "Raise" raise)))
-(defcustom bufferlo-bookmark-frame-clone-policy 'prompt
- "Control bookmark duplication on cloned and undeleted frames.
-Duplicate active bookmarks cause potentially confusing race
-conditions.
-
-\\='prompt allows you to select a policy interactively.
-
-\\='allow allows duplicates.
-
-\\='disassociate will clear the bookmark on the newly cloned or
-undeleted frame."
- :type '(radio (const :tag "Prompt" prompt)
- (const :tag "Allow" allow)
- (const :tag "Disassociate" disassociate)))
-
(defcustom bufferlo-bookmarks-load-tabs-make-frame nil
"If non-nil, make a new frame for tabs loaded by `bufferlo-bookmarks-load'.
If nil, tab bookmarks are loaded into the current frame."
@@ -1264,27 +1249,36 @@ the advised functions."
(defun bufferlo--clone-undelete-frame-advice (oldfn &rest args)
"Activate the advice for `clone-frame' and `undelete-frame'.
OLDFN is the original function. ARGS is for compatibility with
-the advised functions. Honors `bufferlo-bookmark-frame-clone-policy'."
+the advised functions. Honors `bufferlo-bookmark-frame-duplicate-policy'."
(let ((bufferlo--desktop-advice-active t)
(bufferlo--desktop-advice-active-force t))
(apply oldfn args))
- (let ((fbm (frame-parameter nil 'bufferlo-bookmark-frame-name))
- (clone-policy bufferlo-bookmark-frame-clone-policy))
- (when fbm
- (when (eq clone-policy 'prompt)
- (pcase (let ((read-answer-short t))
- (with-local-quit
- (read-answer "Disassociate cloned/undeleted frame bookmark:
Allow, Disassociate "
- '(("allow" ?a "Allow bookmark")
- ("disassociate" ?d "Disassociate bookmark")
- ("help" ?h "Help")
- ("quit" ?q "Quit--retains the bookmark")))))
- ("disassociate" (setq clone-policy 'disassociate))
- (_ (setq clone-policy 'allow)))) ; allow, quit cases
- (pcase clone-policy
- ('allow)
- ('disassociate
- (set-frame-parameter nil 'bufferlo-bookmark-frame-name nil))))))
+ (when-let* ((bookmark-name (frame-parameter nil
'bufferlo-bookmark-frame-name))
+ (abm (assoc bookmark-name (bufferlo--active-bookmarks))))
+ (let* ((msg nil)
+ (msg-append (lambda (s) (setq msg (concat msg "; " s)))))
+ (catch :raise
+ (when
+ (catch :abort
+ (let ((duplicate-policy (bufferlo--bookmark-get-duplicate-policy
+ bookmark-name "frame"
bufferlo-bookmark-frame-duplicate-policy 'undelete)))
+ (pcase duplicate-policy
+ ('allow)
+ ('clear
+ (setq bookmark-name nil))
+ ('clear-warn
+ (setq bookmark-name nil)
+ (funcall msg-append "cleared frame bookmark"))
+ ('raise
+ (delete-frame)
+ (bufferlo--bookmark-raise abm)
+ (throw :raise t)))
+ (set-frame-parameter nil 'bufferlo-bookmark-frame-name
bookmark-name))
+ (when msg
+ (message "Undelete frame bufferlo bookmark%s%s"
+ (if bookmark-name (format ": %s" bookmark-name) "")
+ (or msg ""))))
+ (delete-frame))))))
(defun bufferlo--tab-bar-undo-close-tab-advice (oldfn &rest args)
"Activate the advice for `tab-bar-undo-close-tab'.
@@ -1296,27 +1290,30 @@ the advised functions. Honors
`bufferlo-bookmark-tab-duplicate-policy'."
(when-let* ((current-tab (bufferlo--current-tab))
(bookmark-name (alist-get 'bufferlo-bookmark-tab-name
current-tab))
(abm (assoc bookmark-name (bufferlo--active-bookmarks))))
- (let ((msg)
- (msg-append (lambda (s) (setq msg (concat msg "; " s)))))
- (catch :abort
- (let ((duplicate-policy (bufferlo--bookmark-get-duplicate-policy
- bookmark-name "tab"
bufferlo-bookmark-tab-duplicate-policy 'undelete)))
- (pcase duplicate-policy
- ('allow)
- ('clear
- (setq bookmark-name nil))
- ('clear-warn
- (setq bookmark-name nil)
- (funcall msg-append "cleared tab bookmark"))
- ('raise
- (tab-bar-close-tab)
- (bufferlo--bookmark-raise abm)
- (throw :abort t)))
- (setf (alist-get 'bufferlo-bookmark-tab-name (cdr current-tab))
bookmark-name))
- (when msg
- (message "Undo close tab bufferlo bookmark%s%s"
- (if bookmark-name (format ": %s" bookmark-name) "")
- (or msg "")))))))
+ (let* ((msg nil)
+ (msg-append (lambda (s) (setq msg (concat msg "; " s)))))
+ (catch :raise
+ (when
+ (catch :abort
+ (let ((duplicate-policy (bufferlo--bookmark-get-duplicate-policy
+ bookmark-name "tab"
bufferlo-bookmark-tab-duplicate-policy 'undelete)))
+ (pcase duplicate-policy
+ ('allow)
+ ('clear
+ (setq bookmark-name nil))
+ ('clear-warn
+ (setq bookmark-name nil)
+ (funcall msg-append "cleared tab bookmark"))
+ ('raise
+ (tab-bar-close-tab)
+ (bufferlo--bookmark-raise abm)
+ (throw :raise t)))
+ (setf (alist-get 'bufferlo-bookmark-tab-name (cdr
current-tab)) bookmark-name))
+ (when msg
+ (message "Undo close tab bufferlo bookmark%s%s"
+ (if bookmark-name (format ": %s" bookmark-name) "")
+ (or msg ""))))
+ (tab-bar-close-tab))))))
(defsubst bufferlo--warn ()
"Warn if `bufferlo-mode' is not enabled."