changeset 46825:f43392bbb789

(ibuffer-list-buffer-modes): New. (ibuffer-filter-by-used-mode): New.
author Colin Walters <walters@gnu.org>
date Tue, 06 Aug 2002 06:04:44 +0000
parents 86fa1b4393a2
children e020f18c490a
files lisp/ibuf-ext.el
diffstat 1 files changed, 39 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ibuf-ext.el	Tue Aug 06 06:04:22 2002 +0000
+++ b/lisp/ibuf-ext.el	Tue Aug 06 06:04:44 2002 +0000
@@ -922,6 +922,26 @@
 	 (error "Ibuffer: bad qualifier %s" qualifier))
        (concat " [" (cadr type) ": " (format "%s]" (cdr qualifier)))))))
   
+
+(defun ibuffer-list-buffer-modes ()
+  "Create an alist of buffer modes currently in use.
+The list returned will be of the form ("MODE-NAME" . MODE-SYMBOL)."
+  (let ((bufs (buffer-list))
+	(modes)
+	(this-mode))
+    (while bufs
+      (setq this-mode 
+	    (with-current-buffer 
+		(car bufs)
+	      major-mode)
+	    bufs (cdr bufs))
+      (add-to-list 
+       'modes
+       `(,(symbol-name this-mode) . 
+	 ,this-mode)))
+    modes)) 
+
+
 ;;; Extra operation definitions
 
 ;;;###autoload (autoload 'ibuffer-filter-by-mode "ibuf-ext.el")
@@ -942,6 +962,25 @@
 			 "")))))
   (eq qualifier (with-current-buffer buf major-mode)))
 
+;;;###autoload (autoload 'ibuffer-filter-by-used-mode "ibuf-ext.el")
+(define-ibuffer-filter used-mode 
+  "Toggle current view to buffers with major mode QUALIFIER.
+Called interactively, this function allows selection of modes
+currently used by buffers."
+  (:description "major mode in use"
+		:reader
+		(intern 
+		 (completing-read "Filter by major mode: " 
+				  (ibuffer-list-buffer-modes)
+				  nil
+				  t
+				  (let ((buf (ibuffer-current-buffer)))
+				    (if (and buf (buffer-live-p buf))
+					(with-current-buffer buf
+					  (symbol-name major-mode))
+				      "")))))
+  (eq qualifier (with-current-buffer buf major-mode)))
+
 ;;;###autoload (autoload 'ibuffer-filter-by-name "ibuf-ext.el")
 (define-ibuffer-filter name 
   "Toggle current view to buffers with name matching QUALIFIER."