branch: externals/bufferlo commit 812892ec9280f4e53295ef10d01a0769b8f074d3 Author: shipmints <shipmi...@gmail.com> Commit: shipmints <shipmi...@gmail.com>
Allow both old and new define-ibuffer-op macro references to coexist This allows Emacs 31 users the benefit of enhanced context for ibuffer remove prompts, while < 31 users get the old behavior. --- bufferlo.el | 53 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/bufferlo.el b/bufferlo.el index b5aa953ff7..81f738fa3e 100644 --- a/bufferlo.el +++ b/bufferlo.el @@ -1937,19 +1937,46 @@ The parameters OTHER-WINDOW-P NOSELECT SHRINK are passed to `ibuffer'." (ibuffer other-window-p name '((bufferlo-orphan-buffers . nil)) noselect shrink))) -(define-ibuffer-op ibuffer-do-bufferlo-remove () - "Remove marked buffers from bufferlo's local buffer list." - ( - :active-opstring "remove from bufferlo locals" ; prompt - :opstring "removed from bufferlo locals:" ; success - :modifier-p t - :dangerous t - :complex t - :after (ibuffer-update nil t) - ) - (when bufferlo-mode - (bufferlo-remove buf) - t)) +;; Below allows both old and new define-ibuffer-op macros to coexist. +(defmacro bufferlo--ibuffer-do-wrapper () + (if (< emacs-major-version 31) + '(define-ibuffer-op ibuffer-do-bufferlo-remove () + "Remove marked buffers from bufferlo's local buffer list." + ( + :active-opstring "remove from bufferlo locals" + :opstring "removed from bufferlo locals:" + :modifier-p t + :dangerous t + :complex t + :after (ibuffer-update nil t) + ) + (when bufferlo-mode + (bufferlo-remove buf) + t)) + + '(defun bufferlo--ibuffer-do-bufferlo-remove-prompt (op) + "`ibuffer' prompt helper for OP." + (let ((bookmark-name (bufferlo--current-bookmark-name))) + (format "%s from %slocals:" op + (if bookmark-name + (format "bufferlo bookmark \"%s\" " bookmark-name) + "")))) + + '(define-ibuffer-op ibuffer-do-bufferlo-remove () + "Remove marked buffers from bufferlo's local buffer list." + ( + :active-opstring (lambda () (bufferlo--ibuffer-do-bufferlo-remove-prompt "remove")) + :opstring (lambda () (bufferlo--ibuffer-do-bufferlo-remove-prompt "removed")) + :modifier-p t + :dangerous t + :complex t + :after (ibuffer-update nil t) + ) + (when bufferlo-mode + (bufferlo-remove buf) + t)) + )) +(bufferlo--ibuffer-do-wrapper) (when bufferlo-ibuffer-bind-keys (define-key ibuffer-mode-map "-" #'ibuffer-do-bufferlo-remove))