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))

Reply via email to