1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-05 22:20:24 -08:00

Ibuffer filter by modes: Accept several mode names

Extend all mode filters so that they handle >1 mode.
For instance, if the users want to filter all buffers in
C or C++ mode, then they can call the filter interactively
with input: 'c-mode,c++-mode' (Bug#32731).

* lisp/ibuf-macs.el(define-ibuffer-filter): Add key :accept-list.
If the value of this key is non-nil, then the filter accepts
either a single qualifier or a list of them; in the latter case,
the resultant filter is the `or' composition of the individual ones.

* lisp/ibuf-ext.el (ibuffer-filter-by-used-mode)
(ibuffer-filter-by-mode, ibuffer-filter-by-derived-mode)
Set :accept-list value non-nil.
Interactively, accept a comma separated list of mode names.

* etc/NEWS(Ibuffer): Announce this change.

Co-authored-by: Noam Postavsky <npostavs@gmail.com>
This commit is contained in:
Tino Calancha 2018-09-29 18:40:46 +09:00
parent 3bbe9e6091
commit 2296bf188f
3 changed files with 73 additions and 42 deletions

View file

@ -1228,28 +1228,33 @@ If INCLUDE-PARENTS is non-nil then include parent modes."
;;;###autoload (autoload 'ibuffer-filter-by-mode "ibuf-ext")
(define-ibuffer-filter mode
"Limit current view to buffers with major mode QUALIFIER."
"Limit current view to buffers with major mode(s) specified by QUALIFIER.
QUALIFIER is the mode name as a symbol or a list of symbols.
Called interactively, accept a comma separated list of mode names."
(:description "major mode"
:reader
(let* ((buf (ibuffer-current-buffer))
(default (if (and buf (buffer-live-p buf))
(symbol-name (buffer-local-value
'major-mode buf)))))
(intern
(completing-read
(mapcar #'intern
(completing-read-multiple
(if default
(format "Filter by major mode (default %s): " default)
"Filter by major mode: ")
obarray
#'(lambda (e)
(string-match "-mode\\'" (symbol-name e)))
t nil nil default))))
(lambda (e)
(string-match "-mode\\'" (if (symbolp e) (symbol-name e) e)))
t nil nil default)))
:accept-list t)
(eq qualifier (buffer-local-value 'major-mode buf)))
;;;###autoload (autoload 'ibuffer-filter-by-used-mode "ibuf-ext")
(define-ibuffer-filter used-mode
"Limit current view to buffers with major mode QUALIFIER.
Called interactively, this function allows selection of modes
"Limit current view to buffers with major mode(s) specified by QUALIFIER.
QUALIFIER is the mode name as a symbol or a list of symbols.
Called interactively, accept a comma separated list of mode names
currently used by buffers."
(:description "major mode in use"
:reader
@ -1257,23 +1262,29 @@ currently used by buffers."
(default (if (and buf (buffer-live-p buf))
(symbol-name (buffer-local-value
'major-mode buf)))))
(intern
(completing-read
(mapcar #'intern
(completing-read-multiple
(if default
(format "Filter by major mode (default %s): " default)
"Filter by major mode: ")
(ibuffer-list-buffer-modes) nil t nil nil default))))
(ibuffer-list-buffer-modes) nil t nil nil default)))
:accept-list t)
(eq qualifier (buffer-local-value 'major-mode buf)))
;;;###autoload (autoload 'ibuffer-filter-by-derived-mode "ibuf-ext")
(define-ibuffer-filter derived-mode
"Limit current view to buffers whose major mode inherits from QUALIFIER."
"Limit current view to buffers with major mode(s) specified by QUALIFIER.
QUALIFIER is the mode name as a symbol or a list of symbols.
Restrict the view to buffers whose major mode derivates
from modes specified by QUALIFIER.
Called interactively, accept a comma separated list of mode names."
(:description "derived mode"
:reader
(intern
(completing-read "Filter by derived mode: "
(ibuffer-list-buffer-modes t)
nil t)))
:reader
(mapcar #'intern
(completing-read-multiple "Filter by derived mode: "
(ibuffer-list-buffer-modes t)
nil t))
:accept-list t)
(with-current-buffer buf (derived-mode-p qualifier)))
;;;###autoload (autoload 'ibuffer-filter-by-name "ibuf-ext")