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

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

[elpa] externals/bufferlo f6aa3d9fa8 1/4: Improve local buffer menu


From: ELPA Syncer
Subject: [elpa] externals/bufferlo f6aa3d9fa8 1/4: Improve local buffer menu
Date: Fri, 10 Nov 2023 18:57:28 -0500 (EST)

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

    Improve local buffer menu
    
    The function `bufferlo-list-buffers' now creates a distinct local
    buffer menu for each frame/tab, similar to `bufferlo-ibuffer'.
---
 README.org  |  2 +-
 bufferlo.el | 28 ++++++++++++++++++++++++++--
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/README.org b/README.org
index 5bc56c691c..bc2f52f47f 100644
--- a/README.org
+++ b/README.org
@@ -56,7 +56,7 @@ respective global commands:
   ~ibuffer~ filtered for local buffers.
   Alternatively, use "/ l" in ibuffer.
 - ~bufferlo-list-buffers~:
-  Display a list of local buffers in the "*Buffer List"* buffer.
+  Display a list of local buffers in a buffer-menu buffer.
 
 Bufferlo provides functions to manage the local buffer lists:
 - ~bufferlo-clear~:
diff --git a/bufferlo.el b/bufferlo.el
index 2886f6cabc..07c19ad949 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -516,11 +516,35 @@ 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))
 
+(defvar-local bufferlo--buffer-menu-this-frame nil)
+
+(defun bufferlo--local-buffer-list-this-frame ()
+  "Return the local buffer list of the buffer's frame."
+  (bufferlo-buffer-list bufferlo--buffer-menu-this-frame))
+
 (defun bufferlo-list-buffers ()
-  "Display a list of local buffers in the \"*Buffer List*\" buffer."
+  "Display a list of local buffers."
   (interactive)
   (display-buffer
-   (list-buffers-noselect nil #'bufferlo-buffer-list)))
+   (let* ((old-buffer (current-buffer))
+          (name (or
+                 (seq-find (lambda (b)
+                             (string-match-p
+                              "\\`\\*Local Buffer List\\*\\(<[0-9]*>\\)?\\'"
+                              (buffer-name b)))
+                           (bufferlo-buffer-list))
+                 (generate-new-buffer-name "*Local Buffer List*")))
+         (buffer (get-buffer-create name)))
+     (with-current-buffer buffer
+       (Buffer-menu-mode)
+       (setq bufferlo--buffer-menu-this-frame (selected-frame))
+       (setq Buffer-menu-files-only nil)
+       (setq Buffer-menu-buffer-list #'bufferlo--local-buffer-list-this-frame)
+       (setq Buffer-menu-filter-predicate nil)
+       (list-buffers--refresh #'bufferlo--local-buffer-list-this-frame 
old-buffer)
+       (tabulated-list-print)
+       (revert-buffer))
+     buffer)))
 
 (with-eval-after-load 'ibuf-ext
   (define-ibuffer-filter bufferlo-local-buffers



reply via email to

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