branch: externals/bufferlo
commit 42b521c1c9e54be7fc2056344d7a717d55106800
Author: shipmints <[email protected]>
Commit: shipmints <[email protected]>
Modernize 'tab-bar-undo-close-tab' handling
On Emacs < 31, advice is used, otherwise
'tab-bar-post-undo-close-tab-functions' is used.
---
bufferlo.el | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/bufferlo.el b/bufferlo.el
index 81f738fa3e..ec1953f6fa 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -906,8 +906,11 @@ string, FACE is the face for STR."
(advice-add #'undelete-frame :around
#'bufferlo--clone-undelete-frame-advice))
;; Undo close tab duplicate check
- (advice-add #'tab-bar-undo-close-tab
- :around #'bufferlo--tab-bar-undo-close-tab-advice)
+ (if (< emacs-major-version 31)
+ (advice-add #'tab-bar-undo-close-tab
+ :around #'bufferlo--tab-bar-undo-close-tab-advice)
+ (add-hook 'tab-bar-post-undo-close-tab-functions
+ #'bufferlo--tab-post-undo-close-tab-function))
;; Switch-tab workaround
(when (< emacs-major-version 31)
(advice-add #'tab-bar-select-tab
@@ -958,8 +961,11 @@ string, FACE is the face for STR."
(when (>= emacs-major-version 29)
(advice-remove #'undelete-frame #'bufferlo--clone-undelete-frame-advice))
;; Undo close tab duplicate check
- (advice-remove #'tab-bar-undo-close-tab
- #'bufferlo--tab-bar-undo-close-tab-advice)
+ (if (< emacs-major-version 31)
+ (advice-remove #'tab-bar-undo-close-tab
+ #'bufferlo--tab-bar-undo-close-tab-advice)
+ (remove-hook 'tab-bar-post-undo-close-tab-functions
+ #'bufferlo--tab-post-undo-close-tab-function))
;; Switch-tab workaround
(when (< emacs-major-version 31)
(advice-remove #'tab-bar-select-tab
#'bufferlo--clear-buffer-lists-activate)
@@ -1379,15 +1385,10 @@ advised functions. Honors
`bufferlo-bookmark-frame-duplicate-policy'."
(or msg ""))))
(delete-frame))))))
-(defun bufferlo--tab-bar-undo-close-tab-advice (oldfn &rest args)
- "Activate the advice for `tab-bar-undo-close-tab'.
-OLDFN is the original function. ARGS is for compatibility with
-the advised functions. Honors `bufferlo-bookmark-tab-duplicate-policy'."
- (let ((bufferlo--desktop-advice-active t)
- (bufferlo--desktop-advice-active-force t))
- (apply oldfn args))
- (when-let* ((current-tab (bufferlo--current-tab))
- (bookmark-name (alist-get 'bufferlo-bookmark-tab-name
current-tab))
+(defun bufferlo--tab-post-undo-close-tab-function (tab)
+ "Handle `tab-bar-undo-close-tab' TAB.
+Honors `bufferlo-bookmark-tab-duplicate-policy'."
+ (when-let* ((bookmark-name (alist-get 'bufferlo-bookmark-tab-name tab))
(this+at-least-one-other
(when (> (seq-count (lambda (x) (string= bookmark-name (car x)))
(bufferlo--active-bookmarks)) 1)
@@ -1415,7 +1416,7 @@ the advised functions. Honors
`bufferlo-bookmark-tab-duplicate-policy'."
(assoc bookmark-name (bufferlo--active-bookmarks)))
(throw :raise t)))
(setf (alist-get 'bufferlo-bookmark-tab-name
- (cdr current-tab))
+ (cdr tab))
bookmark-name))
(when msg
(message "Undo close tab bufferlo bookmark%s%s"
@@ -1423,6 +1424,13 @@ the advised functions. Honors
`bufferlo-bookmark-tab-duplicate-policy'."
(or msg ""))))
(tab-bar-close-tab))))))
+(defun bufferlo--tab-bar-undo-close-tab-advice (oldfn &rest args)
+ "Activate the advice for `tab-bar-undo-close-tab'."
+ (let ((bufferlo--desktop-advice-active t)
+ (bufferlo--desktop-advice-active-force t))
+ (apply oldfn args))
+ (bufferlo--tab-post-undo-close-tab-function (bufferlo--current-tab)))
+
(defsubst bufferlo--warn ()
"Warn if `bufferlo-mode' is not enabled."
(defvar bufferlo--warn-current-command nil)