emacs-devel
[Top][All Lists]
Advanced

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

Toggle internal buffers in Buffer Menu


From: Alain Schneble
Subject: Toggle internal buffers in Buffer Menu
Date: Sat, 20 Aug 2016 23:10:38 +0200

Hello

The following patch extends buffer menu (list-buffers) to allow toggling
display of internal buffers (bound to key "I" by default).

>From f5d754576126770efba226b2598727a36f7ad695 Mon Sep 17 00:00:00 2001
From: Alain Schneble <address@hidden>
Date: Sat, 20 Aug 2016 22:33:00 +0200
Subject: [PATCH] Add toggling of internal buffers to Buffer Menu

* lisp/buff-menu.el (Buffer-menu-include-internal-buffers): Add variable
to track state whether or not to display internal buffers.
(Buffer-menu-toggle-internal-buffers): Add function to toggle flag in
variable above and map prefix argument.
(Buffer-menu-toggle-files-only): Update doc string.
(list-buffers--refresh): Include new toggle flag in buffer filter
criteria.
(Buffer-menu-mode-map): Add new key binding (I to toggle display of
internal buffers).
---
 lisp/buff-menu.el | 31 ++++++++++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el
index 4742628..3c72098 100644
--- a/lisp/buff-menu.el
+++ b/lisp/buff-menu.el
@@ -96,6 +96,11 @@ Buffer-menu-files-only
 commands.")
 (make-variable-buffer-local 'Buffer-menu-files-only)
 
+(defvar Buffer-menu-include-internal-buffers nil
+  "Non-nil if the current Buffer Menu lists internal buffers as well.
+This is set by `Buffer-menu-toggle-internal-buffers'.")
+(make-variable-buffer-local 'Buffer-menu-include-internal-buffers)
+
 (defvar Info-current-file) ; from info.el
 (defvar Info-current-node) ; from info.el
 
@@ -127,6 +132,7 @@ Buffer-menu-mode-map
     (define-key map "b" 'Buffer-menu-bury)
     (define-key map "V" 'Buffer-menu-view)
     (define-key map "T" 'Buffer-menu-toggle-files-only)
+    (define-key map "I" 'Buffer-menu-toggle-internal-buffers)
     (define-key map (kbd "M-s a C-s")   'Buffer-menu-isearch-buffers)
     (define-key map (kbd "M-s a M-C-s") 'Buffer-menu-isearch-buffers-regexp)
     (define-key map (kbd "M-s a C-o") 'Buffer-menu-multi-occur)
@@ -146,6 +152,10 @@ Buffer-menu-mode-map
       '(menu-item "Show Only File Buffers" Buffer-menu-toggle-files-only
                  :button (:toggle . Buffer-menu-files-only)
                  :help "Toggle whether the current buffer-menu displays only 
file buffers"))
+    (bindings--define-key menu-map [ti]
+      '(menu-item "Show Internal Buffers" Buffer-menu-toggle-internal-buffers
+                 :button (:toggle . Buffer-menu-include-internal-buffers)
+                 :help "Toggle whether the current buffer-menu displays 
internal buffers as well."))
     (bindings--define-key menu-map [s1] menu-bar-separator)
     ;; FIXME: The "Select" entries could use better names...
     (bindings--define-key menu-map [sel]
@@ -306,7 +316,20 @@ Buffer-menu-toggle-files-only
              ((> (prefix-numeric-value arg) 0) t)))
   (message (if Buffer-menu-files-only
               "Showing only file-visiting buffers."
-            "Showing all non-internal buffers."))
+            "Showing non file-visiting buffers."))
+  (revert-buffer))
+
+(defun Buffer-menu-toggle-internal-buffers (arg)
+  "Toggle whether the current buffer-menu displays internal buffers.
+With a positive ARG, display only non internal buffers.  With zero or
+negative ARG, display internal buffers as well."
+  (interactive "P")
+  (setq Buffer-menu-include-internal-buffers
+       (cond ((not arg) (not Buffer-menu-include-internal-buffers))
+             ((<= (prefix-numeric-value arg) 0) t)))
+  (message (if Buffer-menu-include-internal-buffers
+              "Showing internal buffers."
+            "Showing only non-internal buffers."))
   (revert-buffer))
 
 (defalias 'Buffer-menu-sort 'tabulated-list-sort)
@@ -624,16 +647,18 @@ list-buffers--refresh
   ;; Collect info for each buffer we're interested in.
   (let ((buffer-menu-buffer (current-buffer))
        (show-non-file (not Buffer-menu-files-only))
+        (show-internal Buffer-menu-include-internal-buffers)
        entries)
     (dolist (buffer (or buffer-list
                        (buffer-list (if Buffer-menu-use-frame-buffer-list
                                         (selected-frame)))))
       (with-current-buffer buffer
        (let* ((name (buffer-name))
-              (file buffer-file-name))
+              (file buffer-file-name)
+               (internal (string= (substring name 0 1) " ")))
          (when (and (buffer-live-p buffer)
                     (or buffer-list
-                        (and (not (string= (substring name 0 1) " "))
+                        (and (or (not internal) show-internal)
                              (not (eq buffer buffer-menu-buffer))
                              (or file show-non-file))))
            (push (list buffer
-- 
2.8.1.windows.1

Would you agree to include this feature?  If so, I'll have a look at the
info.  It might be worth to extend it and mention this functionality
somewhere.

Thanks,
Alain

reply via email to

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