GNU bug report logs - #32731
26.1.50; Ibuffer filter by mode: Handle >1 mode names

Previous Next

Package: emacs;

Reported by: Tino Calancha <tino.calancha <at> gmail.com>

Date: Thu, 13 Sep 2018 18:20:02 UTC

Severity: wishlist

Found in version 26.1.50

Done: Tino Calancha <tino.calancha <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 32731 <at> debbugs.gnu.org (full text, mbox):

From: Noam Postavsky <npostavs <at> gmail.com>
To: Tino Calancha <tino.calancha <at> gmail.com>
Cc: 32731 <at> debbugs.gnu.org
Subject: Re: bug#32731: 26.1.50; Ibuffer filter by mode: Handle >1 mode names
Date: Thu, 13 Sep 2018 15:09:41 -0400
On 13 September 2018 at 14:19, Tino Calancha <tino.calancha <at> gmail.com> wrote:

> +;;;###autoload
> +(defun ibuffer-filter-by-used-modes(modes)
> +  "Limit current view to buffers with major mode in MODES.
> +MODES is a list of mode names (symbols).
> +When called interactively, accept the mode names separated by commas."
> +  (interactive
> +   (let* ((buf (ibuffer-current-buffer))
> +          (default (if (and buf (buffer-live-p buf))
> +                       (symbol-name (buffer-local-value
> +                                     'major-mode buf)))))
> +     (list
> +      (mapcar #'intern
> +              (split-string
> +               (completing-read
> +                (if default
> +                    (format "Filter by major mode (default %s): " default)
> +                  "Filter by major mode: ")
> +                (ibuffer-list-buffer-modes)
> +                nil nil nil nil default)
> +               "\\s-*,\\s-*" t)))))

This will use completion only for the first mode, right? Perhaps
completing-read-multiple would make more sense here.

> +  (setq modes (delete-dups modes))
> +  (mapc #'ibuffer-filter-by-used-mode modes)
> +  (let ((nb_modes (length modes)))
> +    (when (>= nb_modes 2)
> +      (cl-loop repeat (- nb_modes 2) do (ibuffer-or-filter))
> +      (message nil)

What's this `message' call for?

> +      (ibuffer-or-filter))))

Maybe it's simpler to construct the filter directly? As in:

  (push `(or ,@(mapcar (lambda (m) `(used-mode . ,m)) modes))
        ibuffer-filtering-qualifiers)
  (ibuffer-update nil t)




This bug report was last modified 6 years and 297 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.