From c4cf6d91f36ebd8d05109926d9e16ba02693cb9f Mon Sep 17 00:00:00 2001 From: Ivan Andrus Date: Mon, 23 Apr 2012 22:07:40 -0400 Subject: [PATCH] * lisp/ibuf-ext.el (ibuffer-list-buffer-modes): Add `include-parents' arg. (ibuffer-filter-by-derived-mode): New filter. * lisp/ibuffer.el (ibuffer-mode-map): Bind to `/ w'. --- etc/NEWS | 2 ++ lisp/ChangeLog | 6 ++++++ lisp/ibuf-ext.el | 24 +++++++++++++++++++----- lisp/ibuffer.el | 3 ++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/etc/NEWS b/etc/NEWS index fcf9fc9397e..8dcd70b413b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -74,6 +74,8 @@ character when doing minibuffer filename prompts. * Changes in Specialized Modes and Packages in Emacs 24.2 +** New `derived-mode' filter for Ibuffer, bound to `/ w'. + ** Apropos *** The faces used by Apropos are now directly customizable. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c6a024a36e0..8b4409fec0a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-24 Ivan Andrus (tiny change) + + * ibuf-ext.el (ibuffer-list-buffer-modes): Add `include-parents' arg. + (ibuffer-filter-by-derived-mode): New filter. + * ibuffer.el (ibuffer-mode-map): Bind to `/ w'. + 2012-04-23 Andreas Politz * subr.el (accept-change-group): Fix arg usage (Bug#6095). diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index 22ec2f5df1f..dc90617f92e 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -973,8 +973,9 @@ Interactively, prompt for NAME, and use the current filters." (concat " [" (cadr type) ": " (format "%s]" (cdr qualifier))))))) -(defun ibuffer-list-buffer-modes () +(defun ibuffer-list-buffer-modes (&optional include-parents) "Create an alist of buffer modes currently in use. +If INCLUDE-PARENTS is non-nil then include parent modes. The list returned will be of the form (\"MODE-NAME\" . MODE-SYMBOL)." (let ((bufs (buffer-list)) (modes) @@ -982,10 +983,13 @@ The list returned will be of the form (\"MODE-NAME\" . MODE-SYMBOL)." (while bufs (setq this-mode (buffer-local-value 'major-mode (car bufs)) bufs (cdr bufs)) - (add-to-list - 'modes - `(,(symbol-name this-mode) . - ,this-mode))) + (while this-mode + (add-to-list + 'modes + `(,(symbol-name this-mode) . + ,this-mode)) + (setq this-mode (and include-parents + (get this-mode 'derived-mode-parent))))) modes)) @@ -1027,6 +1031,16 @@ currently used by buffers." ""))))) (eq qualifier (buffer-local-value 'major-mode buf))) +(define-ibuffer-filter derived-mode + "Toggle current view to buffers whose major mode inherits from QUALIFIER." + (:description "derived mode" + :reader + (intern + (completing-read "Filter by derived mode: " + (ibuffer-list-buffer-modes t) + nil nil ""))) + (with-current-buffer buf (derived-mode-p qualifier))) + ;;;###autoload (autoload 'ibuffer-filter-by-name "ibuf-ext") (define-ibuffer-filter name "Toggle current view to buffers with name matching QUALIFIER." diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 464b35fc3a6..b8c000b6884 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -503,6 +503,7 @@ directory, like `default-directory'." (define-key map (kbd "/ m") 'ibuffer-filter-by-mode) (define-key map (kbd "/ M") 'ibuffer-filter-by-used-mode) + (define-key map (kbd "/ w") 'ibuffer-filter-by-derived-mode) (define-key map (kbd "/ n") 'ibuffer-filter-by-name) (define-key map (kbd "/ c") 'ibuffer-filter-by-content) (define-key map (kbd "/ e") 'ibuffer-filter-by-predicate) @@ -2645,7 +2646,7 @@ will be inserted before the group at point." ;;;;;; ibuffer-backward-filter-group ibuffer-forward-filter-group ;;;;;; ibuffer-toggle-filter-group ibuffer-mouse-toggle-filter-group ;;;;;; ibuffer-interactive-filter-by-mode ibuffer-mouse-filter-by-mode -;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "1400db1bc3d4a3010cbc4807a6725072") +;;;;;; ibuffer-auto-mode) "ibuf-ext" "ibuf-ext.el" "b2b8f11ad22546ad05d6db0b7d388ac1") ;;; Generated autoloads from ibuf-ext.el (autoload 'ibuffer-auto-mode "ibuf-ext" "\ -- 2.39.2