branch: externals/bufferlo
commit 3b8a134f10fe7a156da3653572879fbf464dcd0f
Author: shipmints <shipmi...@gmail.com>
Commit: shipmints <shipmi...@gmail.com>

    Support define-ibuffer-op opstring prompt functions
    
    For Emacs < 31, use static strings.
    For Emacs > 30, use context-sensitive prompt functions.
---
 bufferlo.el | 52 +++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 39 insertions(+), 13 deletions(-)

diff --git a/bufferlo.el b/bufferlo.el
index b620a57e5b..7d14364f7b 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -1887,19 +1887,45 @@ 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))
+(eval-when-compile
+  (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" ; 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))
+
+    (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))))
 
 (when bufferlo-ibuffer-bind-keys
   (define-key ibuffer-mode-map "-" #'ibuffer-do-bufferlo-remove))

Reply via email to