From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tino Calancha Newsgroups: gmane.emacs.bugs Subject: bug#32731: 26.1.50; Ibuffer filter by mode: Handle >1 mode names Date: Fri, 14 Sep 2018 03:19:21 +0900 Message-ID: <87bm919s5y.fsf@calancha-pc.dy.bbexcite.jp> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1536862699 28015 195.159.176.226 (13 Sep 2018 18:18:19 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 13 Sep 2018 18:18:19 +0000 (UTC) To: 32731@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Sep 13 20:18:15 2018 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1g0WBy-00079r-GF for geb-bug-gnu-emacs@m.gmane.org; Thu, 13 Sep 2018 20:18:14 +0200 Original-Received: from localhost ([::1]:43836 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g0WE5-0006lb-0j for geb-bug-gnu-emacs@m.gmane.org; Thu, 13 Sep 2018 14:20:25 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55472) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g0WDt-0006k0-FA for bug-gnu-emacs@gnu.org; Thu, 13 Sep 2018 14:20:14 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g0WDo-0008RC-79 for bug-gnu-emacs@gnu.org; Thu, 13 Sep 2018 14:20:13 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:35329) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1g0WDi-0008N7-Cw for bug-gnu-emacs@gnu.org; Thu, 13 Sep 2018 14:20:06 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1g0WDi-0000Z2-72 for bug-gnu-emacs@gnu.org; Thu, 13 Sep 2018 14:20:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Tino Calancha Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 13 Sep 2018 18:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 32731 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.15368627992154 (code B ref -1); Thu, 13 Sep 2018 18:20:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 13 Sep 2018 18:19:59 +0000 Original-Received: from localhost ([127.0.0.1]:39587 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1g0WDf-0000Yg-8I for submit@debbugs.gnu.org; Thu, 13 Sep 2018 14:19:59 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:34256) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1g0WDe-0000YS-0J for submit@debbugs.gnu.org; Thu, 13 Sep 2018 14:19:58 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g0WDU-00086L-Ge for submit@debbugs.gnu.org; Thu, 13 Sep 2018 14:19:52 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:50576) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1g0WDM-0007wK-Q1 for submit@debbugs.gnu.org; Thu, 13 Sep 2018 14:19:43 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:55031) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g0WDL-0006LK-MA for bug-gnu-emacs@gnu.org; Thu, 13 Sep 2018 14:19:40 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g0WDC-0007o6-Gj for bug-gnu-emacs@gnu.org; Thu, 13 Sep 2018 14:19:35 -0400 Original-Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:34481) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1g0WDB-0007mJ-PO for bug-gnu-emacs@gnu.org; Thu, 13 Sep 2018 14:19:30 -0400 Original-Received: by mail-wr1-x431.google.com with SMTP id g33-v6so7406873wrd.1 for ; Thu, 13 Sep 2018 11:19:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version; bh=nBIT0e9ZZpcI7WpV6f2xE4Mc3+qh5joff++NRy3CoK0=; b=rTNwHudhJSHbRIvl2R52ryUkfDhXJ3OsmU+WQYYgD0GoydNHcqDqcxVYWg7wwgBGOW qH5DbF/KiMY9XFqi1W0CbNi0Py5SWO0Esb7q6N/cjVpsEEuc/huB+hJNSN2LjRdaEALc Vq6Wo1x6M7eUrxM/BKU2fqvLzDPZLzKdJ8HWp2qux4wU5/QI3nFbrZwhmR6WndtFt03J YHrILfhM68KeG74KKq4J+hsLvmZW5h7t3uSjd9qKCA6j6LrZAnnP8l0uCwS7kosrTZAP HdSafuKwjKUWjc2adCYhmIhZQMrnMEsfzgxszMdth0R0P4mJNzAFCFJ96RcZAG+8DTFe qZng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version; bh=nBIT0e9ZZpcI7WpV6f2xE4Mc3+qh5joff++NRy3CoK0=; b=eZOcSKWLEFq1TQbV+bG6qNDVILPbPlsX67QRKBOjYyQNl3AogIz/hAxKGinxzEPh53 4GmceNiz6qDa33V/B0f1yyeDygEF8MR+taMYuEaHQMX5eEnkdoSNYdyuuSi26znWdOFc l1FmVyNzs8HCNHyDSKzluVvKVp7vVp+NOrf1EIWF8zQ03i1G2ItjvQ1bPBwW2AdqjjcI GPuWi6Mksgzflt2vpxkWd2A/1+iMU5PCNbSTN1Arf6QYlVgBuzL71UDfzRkr4VJmKw3l YyIDJ4HSHUSatpG+HdAsDpds+6STYHvxoJEaw5z95ANDAg1PkZNYu/MJakwdK/k1tDoA 8XNg== X-Gm-Message-State: APzg51Aalyt95/IyY/2H+B3ow9NbWJtQvntywCKOCQjy8LF5w0TwwVQY bLDv3PUp1sbq1F4kUWPZgBsXr4jl X-Google-Smtp-Source: ANB0Vda25x3ImuaJ8rUatLIk22nBdnv8Fxbu4U/+SAJsqEeK1S8Ht+FgrHhrl7XJOWKBe1uIjn7wmw== X-Received: by 2002:a1c:55c2:: with SMTP id j185-v6mr6873936wmb.104.1536862767752; Thu, 13 Sep 2018 11:19:27 -0700 (PDT) Original-Received: from calancha-pc.dy.bbexcite.jp (15.red-83-50-151.dynamicip.rima-tde.net. [83.50.151.15]) by smtp.gmail.com with ESMTPSA id z141-v6sm4495782wmc.3.2018.09.13.11.19.25 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 13 Sep 2018 11:19:26 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:150296 Archived-At: Severity: wishlist Ibuffer filtering is a great feature. If you just want to filter by 1 major, then it's quite straight. /m [mode1-name] RET Filtering by >1 major mode is still possible; you must combine the individuals filters with `ibuffer-or-filter': /m [mode1-name] RET /m [mode2-name] RET /| /m [mode3-name] RET /| . . . /m [modeN-name] RET /| This become a bit cumbersome with > 2 mode names; you also need to remember how to combine filters, which I usually forget :-| Following patch adds a new command `ibuffer-filter-by-used-modes', similar as `ibuffer-filter-by-used-mode', to simplify this filtering. The new command accepts a list of mode names, and it takes care internally of the filter composition. Interactively, it preserves the interface of `ibuffer-filter-by-used-mode', with the only difference that the user might input a comma separated list of mode names. For instance, ;; Following produces identical result as the original command M-x ibuffer-filter-by-used-modes RET mode1-mode RET ;; This is equivalent to create the N filters + OR-compose them M-x ibuffer-filter-by-used-modes RET mode1-mode,mode2-mode,...,modeN-mode RET --8<-----------------------------cut here---------------start------------->8--- commit e36ff5779764e531cc149e4342e93cb6e37c30ee Author: Tino Calancha Date: Fri Sep 14 03:10:11 2018 +0900 Ibuffer filter by mode: Handle >1 mode names Extend used mode filtering so that we can input >1 mode. For instance, if we want to filter all buffers in C or C++ mode, then we can call the filter interactively with input: 'c-mode,c++-mode'. * lisp/ibuf-ext.el (ibuffer-filter-by-used-modes): New command. Accept a list of mode names (symbols). Interactively, accept a comma separated list of mode names. * lisp/ibuffer.el(ibuffer-mode-map): Rebind '/ m' to the new command. * etc/NEWS(Ibuffer): Announce this change. diff --git a/etc/NEWS b/etc/NEWS index a54ac2db43..6ef6f20b05 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -48,6 +48,11 @@ often cause crashes. Set it to nil if you really need those fonts. ** Ibuffer --- +*** The new command 'ibuffer-filter-by-used-modes', bound +to '/ m', extends 'ibuffer-filter-by-used-mode'; it makes easy +filtering buffers by a list of major modes. + +--- *** New toggle 'ibuffer-do-toggle-lock', bound to 'L'. ** Imenu diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index a3143e5e29..b7c3ae8030 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -1265,6 +1265,34 @@ used-mode (ibuffer-list-buffer-modes) nil t nil nil default)))) (eq qualifier (buffer-local-value 'major-mode buf))) +;;;###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))))) + (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) + (ibuffer-or-filter)))) + ;;;###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." diff --git a/lisp/ibuffer.el b/lisp/ibuffer.el index 08b0801cb5..f7c20d0da3 100644 --- a/lisp/ibuffer.el +++ b/lisp/ibuffer.el @@ -519,7 +519,7 @@ ibuffer-mode-map (define-key map (kbd "s m") 'ibuffer-do-sort-by-major-mode) (define-key map (kbd "/ RET") 'ibuffer-filter-by-mode) - (define-key map (kbd "/ m") 'ibuffer-filter-by-used-mode) + (define-key map (kbd "/ m") 'ibuffer-filter-by-used-modes) (define-key map (kbd "/ M") 'ibuffer-filter-by-derived-mode) (define-key map (kbd "/ n") 'ibuffer-filter-by-name) (define-key map (kbd "/ *") 'ibuffer-filter-by-starred-name) --8<-----------------------------cut here---------------end--------------->8--- In GNU Emacs 26.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.11) of 2018-09-14 built Repository revision: 41cdda22c78eb0b00612ce25cdb356dd64322fcc