emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/bufferlo 1dd04e4b41 14/37: Better ibuffer support


From: ELPA Syncer
Subject: [elpa] externals/bufferlo 1dd04e4b41 14/37: Better ibuffer support
Date: Sun, 5 Nov 2023 09:57:32 -0500 (EST)

branch: externals/bufferlo
commit 1dd04e4b411bd2ccad835d4c2ff2152c1d870300
Author: Florian Rommel <mail@florommel.de>
Commit: Florian Rommel <mail@florommel.de>

    Better ibuffer support
---
 README.org  |  1 +
 bufferlo.el | 38 +++++++++++++++++++++++++++++---------
 2 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/README.org b/README.org
index f8935d6227..0256ede30a 100644
--- a/README.org
+++ b/README.org
@@ -53,6 +53,7 @@ respective global commands:
   Call it with the prefix argument to get the global list (all buffers).
 - ~bufferlo-ibuffer~:
   ~ibuffer~ filtered for local buffers.
+  Alternatively, use "/ l" in ibuffer.
 
 Bufferlo provides functions to manage the local buffer lists:
 - ~bufferlo-clear~:
diff --git a/bufferlo.el b/bufferlo.el
index c2f29d3c37..a3804b3f0c 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -99,6 +99,11 @@ This is a list of regular expressions that match buffer 
names."
   :group 'bufferlo
   :type '(repeat string))
 
+(defcustom bufferlo-ibuffer-bind-local-buffer-filter t
+  "If this is true bind the local buffer filter to \"/ l\" in ibuffer."
+  :group 'bufferlo
+  :type '(repeat string))
+
 (defvar bufferlo--desktop-advice-active nil)
 
 ;;;###autoload
@@ -405,16 +410,31 @@ If the prefix arument is given, include all buffers."
          (lambda (b) (member (if (stringp b) b (car b)) lbs)))))))
   (switch-to-buffer buffer norecord force-same-window))
 
-(defun bufferlo-ibuffer ()
-  "Invoke `ibuffer' filtered for local buffers."
+(with-eval-after-load 'ibuf-ext
+  (define-ibuffer-filter bufferlo-local-buffers
+      "Limit current view to local buffers."
+    (:description "local buffers" :reader nil)
+    (bufferlo-local-buffer-p buf)))
+
+(with-eval-after-load 'ibuffer
+  (when bufferlo-ibuffer-bind-local-buffer-filter
+    (require 'ibuf-ext)
+    (define-key ibuffer--filter-map (kbd "l")
+                #'ibuffer-filter-by-bufferlo-local-buffers)))
+
+(defun bufferlo-ibuffer (&optional other-window-p noselect shrink)
+  "Invoke `ibuffer' filtered for local buffers.
+Every frame/tab gets its own local bufferlo ibuffer buffer.
+The parameters OTHER-WINDOW-P NOSELECT SHRINK are passed to `ibuffer'."
   (interactive)
-  (require 'ibuffer)
-  (defvar ibuffer-maybe-show-predicates)
-  (let ((ibuffer-maybe-show-predicates
-         (append ibuffer-maybe-show-predicates
-                 (list (lambda (b)
-                         (not (memq b (bufferlo-buffer-list))))))))
-    (ibuffer)))
+  (let ((name (or
+               (seq-find (lambda (b)
+                           (string-match-p "\*Bufferlo Ibuffer\*.*"
+                                           (buffer-name b)))
+                         (bufferlo-buffer-list))
+               (generate-new-buffer-name "*Bufferlo Ibuffer*"))))
+    (ibuffer other-window-p name '((bufferlo-local-buffers . nil))
+             noselect shrink)))
 
 (provide 'bufferlo)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]