emacs-diffs
[Top][All Lists]
Advanced

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

master f6225d125c0: Optionally show internal buffers in Buffer Menu mode


From: Mattias Engdegård
Subject: master f6225d125c0: Optionally show internal buffers in Buffer Menu mode
Date: Tue, 6 Feb 2024 07:54:44 -0500 (EST)

branch: master
commit f6225d125c07bbde8c828b40eb6e81333e051c2a
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    Optionally show internal buffers in Buffer Menu mode
    
    Internal buffers were never shown before but they can be of interest
    to Elisp developers, especially since there is no general mechanism to
    remove unused buffers.
    
    * lisp/buff-menu.el (Buffer-menu-show-internal)
    (Buffer-menu--selection-message, Buffer-menu-toggle-internal): New.
    (Buffer-menu-mode-map): Bind to `I`.
    (Buffer-menu-mode-menu): Add menu entry.
    (list-buffers--refresh): Extend filtering logic.
    * etc/NEWS: Announce.
---
 etc/NEWS          |  6 ++++++
 lisp/buff-menu.el | 33 +++++++++++++++++++++++++++++----
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 5180c26aa92..f980d612a57 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1303,6 +1303,12 @@ will return the URL for that bug.
 This allows for rcirc logs to use a custom timestamp format, than the
 chat buffers use by default.
 
+---
+*** New command 'Buffer-menu-toggle-internal', locally bound to 'I'.
+This command toggles the display of internal buffers in Buffer Menu mode;
+that is, buffers not visiting a file and whose names start with a space.
+Previously, such buffers were never shown.
+
 ** Customize
 
 +++
diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 5796544c534..9561141f0c3 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -100,6 +100,10 @@ as it is by default."
 This is set by the prefix argument to `buffer-menu' and related
 commands.")
 
+(defvar-local Buffer-menu-show-internal nil
+  "Non-nil if the current Buffer Menu lists internal buffers.
+Internal buffers are those whose names start with a space.")
+
 (defvar-local Buffer-menu-filter-predicate nil
   "Function to filter out buffers in the buffer list.
 Buffers that don't satisfy the predicate will be skipped.
@@ -140,6 +144,7 @@ then the buffer will be displayed in the buffer list.")
   "V"           #'Buffer-menu-view
   "O"           #'Buffer-menu-view-other-window
   "T"           #'Buffer-menu-toggle-files-only
+  "I"           #'Buffer-menu-toggle-internal
   "M-s a C-s"   #'Buffer-menu-isearch-buffers
   "M-s a C-M-s" #'Buffer-menu-isearch-buffers-regexp
   "M-s a C-o"   #'Buffer-menu-multi-occur
@@ -197,6 +202,10 @@ then the buffer will be displayed in the buffer list.")
      :help "Toggle whether the current buffer-menu displays only file buffers"
      :style toggle
      :selected Buffer-menu-files-only]
+    ["Show Internal Buffers" Buffer-menu-toggle-internal
+     :help "Toggle whether the current buffer-menu displays internal buffers"
+     :style toggle
+     :selected Buffer-menu-show-internal]
     "---"
     ["Refresh" revert-buffer
      :help "Refresh the *Buffer List* buffer contents"]
@@ -317,6 +326,11 @@ ARG, show only buffers that are visiting files."
   (interactive "P")
   (display-buffer (list-buffers-noselect arg)))
 
+(defun Buffer-menu--selection-message ()
+  (message (cond (Buffer-menu-files-only "Showing only file-visiting buffers.")
+                 (Buffer-menu-show-internal "Showing all buffers.")
+                (t "Showing all non-internal buffers."))))
+
 (defun Buffer-menu-toggle-files-only (arg)
   "Toggle whether the current `buffer-menu' displays only file buffers.
 With a positive ARG, display only file buffers.  With zero or
@@ -325,9 +339,18 @@ negative ARG, display other buffers as well."
   (setq Buffer-menu-files-only
        (cond ((not arg) (not Buffer-menu-files-only))
              ((> (prefix-numeric-value arg) 0) t)))
-  (message (if Buffer-menu-files-only
-              "Showing only file-visiting buffers."
-            "Showing all non-internal buffers."))
+  (Buffer-menu--selection-message)
+  (revert-buffer))
+
+(defun Buffer-menu-toggle-internal (arg)
+  "Toggle whether the current `buffer-menu' displays internal buffers.
+With a positive ARG, display non-internal buffers only.  With zero or
+negative ARG, display internal buffers as well."
+  (interactive "P" Buffer-menu-mode)
+  (setq Buffer-menu-show-internal
+       (cond ((not arg) (not Buffer-menu-show-internal))
+             ((> (prefix-numeric-value arg) 0) t)))
+  (Buffer-menu--selection-message)
   (revert-buffer))
 
 (define-obsolete-function-alias 'Buffer-menu-sort 'tabulated-list-sort
@@ -667,6 +690,7 @@ See more at `Buffer-menu-filter-predicate'."
         (marked-buffers (Buffer-menu-marked-buffers))
         (buffer-menu-buffer (current-buffer))
        (show-non-file (not Buffer-menu-files-only))
+        (show-internal Buffer-menu-show-internal)
        (filter-predicate (and (functionp Buffer-menu-filter-predicate)
                               Buffer-menu-filter-predicate))
        entries name-width)
@@ -686,7 +710,8 @@ See more at `Buffer-menu-filter-predicate'."
               (file buffer-file-name))
          (when (and (buffer-live-p buffer)
                     (or buffer-list
-                        (and (or (not (string= (substring name 0 1) " "))
+                        (and (or show-internal
+                                  (not (string= (substring name 0 1) " "))
                                   file)
                              (not (eq buffer buffer-menu-buffer))
                              (or file show-non-file)



reply via email to

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