From unknown Sun Aug 17 22:09:48 2025 X-Loop: help-debbugs@gnu.org Subject: bug#25058: 26.0.50; ibuffer-decompose-filter-group: unwanted side effects Resent-From: Tino Calancha Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Nov 2016 09:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 25058 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 25058@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.14804117093784 (code B ref -1); Tue, 29 Nov 2016 09:29:02 +0000 Received: (at submit) by debbugs.gnu.org; 29 Nov 2016 09:28:29 +0000 Received: from localhost ([127.0.0.1]:45610 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cBeiC-0000yx-MC for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:29 -0500 Received: from eggs.gnu.org ([208.118.235.92]:52409) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cBeiB-0000yg-9L for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cBei1-0002Ba-85 for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:22 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:35762) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cBei1-0002BW-2b for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43360) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cBehz-00022D-Bq for bug-gnu-emacs@gnu.org; Tue, 29 Nov 2016 04:28:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cBehw-00029x-M2 for bug-gnu-emacs@gnu.org; Tue, 29 Nov 2016 04:28:15 -0500 Received: from mail-pg0-x22d.google.com ([2607:f8b0:400e:c05::22d]:36125) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cBehw-00029h-74 for bug-gnu-emacs@gnu.org; Tue, 29 Nov 2016 04:28:12 -0500 Received: by mail-pg0-x22d.google.com with SMTP id f188so67456536pgc.3 for ; Tue, 29 Nov 2016 01:28:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:mime-version; bh=C70zSIM7kmMwOKT/8OJQT5oVHmQtgMfAH6eZIc0Ar4I=; b=lmLO9iyRKE0pjrcLZUHsf/mFvBLFKLHkd4Ieuxq1sa8HegwyULttjgoGGTyzoLnNcK XHkxjmS0WNGa1KEvdtb0FmcrKvfP5Fs6gH8R2OMjlw54ituXwsKC25fX4/G9VAGCI4e7 y1xSODBfE6c84kYVLzhEuLzypnRz78FFypwNY9VIg+N25yaAxvuuwIPgmComNGqnhZCx WiwX/XeS5iekqRu4XuezNofERrRWG8gAkwZlH8TP2ShPzMbPZFYb91DhNrO9KOAUpwd9 wHuo6YuxJUb8Fz+mnggPE40trhCgGoJJAdTLvvkMz4DS/Ond5Rz7OmzeREjBaYRHUZcG SUow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:mime-version; bh=C70zSIM7kmMwOKT/8OJQT5oVHmQtgMfAH6eZIc0Ar4I=; b=Cycz5wYIPybrXV3ovV30jMjcgYZupcoGCQ4Qzknz84Lv3KmeZLW6O/6RSRV9qbCCe2 ReRJ0HL5gB302aecqpLLMr/tUdaxulNjrt6yndXhaqdYd9FUNPxPr5bIJjKq55PArJI7 vXR0Nq+2EGEX/1K6r5TvAT0jpVwI3LVSD+dgmbcP9l5KMxSPO4CWMHtg1DP1EtGCcMD6 RAn0UPLK0p3iQLEzvOMV4A8FCjgsgNqwQlX85XCyKBHZwMLO/046olTSaUPe9axX2GsJ AWmLpMdMQO/FFMAClMXyOvCa/JgjTqjNW3dnYOEocUm2P9L4V8rciUyXdK4PPc7zj78Y 11Ow== X-Gm-Message-State: AKaTC03Sv2C2GOgcc36UrlEHifckmx3CaIlJDIy3RoHxSSfDRZTEooCHQzzNjJjsRxGfvw== X-Received: by 10.84.216.17 with SMTP id m17mr58843289pli.82.1480411690043; Tue, 29 Nov 2016 01:28:10 -0800 (PST) Received: from calancha-pc (177.192.218.133.dy.bbexcite.jp. [133.218.192.177]) by smtp.gmail.com with ESMTPSA id i76sm93348657pfk.89.2016.11.29.01.28.08 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 Nov 2016 01:28:09 -0800 (PST) From: Tino Calancha Date: Tue, 29 Nov 2016 18:28:07 +0900 Message-ID: <87h96qskig.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) `ibuffer-decompose-filter-group' has unwanted side effects: it might modify `ibuffer-saved-filter-groups'. emacs -Q -eval "(dired (expand-file-name source-directory))" ;; Evaluate following form: (progn (ibuffer) (setq ibuffer-show-empty-filter-groups nil ibuffer-saved-filter-groups '(("saved-filters" ("Shell" (used-mode . shell-mode)) ("Elisp" (or (used-mode . emacs-lisp-mode) (used-mode . lisp-interaction-mode))) ("Dired" (used-mode . dired-mode)) ("Info" (or (used-mode . help-mode) (used-mode . debugger-mode) (used-mode . Custom-mode) (used-mode . completion-list-mode) (name . "\\`[*]Messages[*]\\'")))))) (ibuffer-switch-to-saved-filter-groups "saved-filters")) ;; Now we call `ibuffer-decompose-filter-group' followed by ;; `ibuffer-filter-disable' and `ibuffer-switch-to-saved-filter-groups'. ;; These commands should bring us back to the initial Ibuffer status: /D Elisp RET // /R ;; Elisp group is missing without calling `ibuffer-delete-saved-filter-groups' M-: (assoc "Elisp" (cdar ibuffer-saved-filter-groups)) RET => nil The reason seems to be that `ibuffer-saved-filter-groups' and `ibuffer-filter-groups' share elements. (eq (cdar ibuffer-saved-filter-groups) ibuffer-filter-groups) => t Then, the destructive function `ibuffer-delete-alist' applied on `ibuffer-filter-groups' will modify the other list as well. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >From 45f95151de799fc1acd19353a40b22d6783ad1a6 Mon Sep 17 00:00:00 2001 From: Tino Calancha Date: Tue, 29 Nov 2016 18:14:32 +0900 Subject: [PATCH] ibuffer-decompose-filter-group avoid unwanted side effects * lisp/ibuf-ext.el (ibuffer-delete-alist): Remove it. (ibuffer-remove-alist): New defun; it supersedes 'ibuffer-delete-alist'. All callers changed (Bug#25058). * test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058): Add test. --- lisp/ibuf-ext.el | 23 +++++++++++------------ test/lisp/ibuffer-tests.el | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index 5ef0746..7f35ce6 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -38,12 +38,11 @@ (require 'cl-lib)) ;;; Utility functions -(defun ibuffer-delete-alist (key alist) - "Delete all entries in ALIST that have a key equal to KEY." - (let (entry) - (while (setq entry (assoc key alist)) - (setq alist (delete entry alist))) - alist)) +(defun ibuffer-remove-alist (key alist) + "Remove all entries in ALIST that have a key equal to KEY." + (while (ibuffer-awhen (assoc key alist) + (setq alist (remove it alist)) it)) + alist) ;; borrowed from Gnus (defun ibuffer-remove-duplicates (list) @@ -281,7 +280,7 @@ ibuffer-interactive-filter-by-mode (let ((buf (ibuffer-current-buffer))) (if (assq 'mode ibuffer-filtering-qualifiers) (setq ibuffer-filtering-qualifiers - (ibuffer-delete-alist 'mode ibuffer-filtering-qualifiers)) + (ibuffer-remove-alist 'mode ibuffer-filtering-qualifiers)) (ibuffer-push-filter (cons 'mode (buffer-local-value 'major-mode buf))))) (ibuffer-update nil t)) @@ -556,7 +555,7 @@ ibuffer-generate-filter-groups (append ibuffer-filter-groups (list (cons "Default" nil)))))) ;; (dolist (hidden ibuffer-hidden-filter-groups) - ;; (setq filter-group-alist (ibuffer-delete-alist + ;; (setq filter-group-alist (ibuffer-remove-alist ;; hidden filter-group-alist))) (let ((vec (make-vector (length filter-group-alist) nil)) (i 0)) @@ -640,7 +639,7 @@ ibuffer-decompose-filter-group (interactive (list (ibuffer-read-filter-group-name "Decompose filter group: " t))) (let ((data (cdr (assoc group ibuffer-filter-groups)))) - (setq ibuffer-filter-groups (ibuffer-delete-alist + (setq ibuffer-filter-groups (ibuffer-remove-alist group ibuffer-filter-groups) ibuffer-filtering-qualifiers data)) (ibuffer-update nil t)) @@ -688,7 +687,7 @@ ibuffer-kill-filter-group (ibuffer-aif (assoc name ibuffer-filter-groups) (progn (push (copy-tree it) ibuffer-filter-group-kill-ring) - (setq ibuffer-filter-groups (ibuffer-delete-alist + (setq ibuffer-filter-groups (ibuffer-remove-alist name ibuffer-filter-groups)) (setq ibuffer-hidden-filter-groups (delete name ibuffer-hidden-filter-groups))) @@ -778,7 +777,7 @@ ibuffer-delete-saved-filter-groups (completing-read "Delete saved filter group: " ibuffer-saved-filter-groups nil t)))) (setq ibuffer-saved-filter-groups - (ibuffer-delete-alist name ibuffer-saved-filter-groups)) + (ibuffer-remove-alist name ibuffer-saved-filter-groups)) (ibuffer-maybe-save-stuff) (ibuffer-update nil t)) @@ -949,7 +948,7 @@ ibuffer-delete-saved-filters (completing-read "Delete saved filters: " ibuffer-saved-filters nil t)))) (setq ibuffer-saved-filters - (ibuffer-delete-alist name ibuffer-saved-filters)) + (ibuffer-remove-alist name ibuffer-saved-filters)) (ibuffer-maybe-save-stuff) (ibuffer-update nil t)) diff --git a/test/lisp/ibuffer-tests.el b/test/lisp/ibuffer-tests.el index 3a4def3..260469e 100644 --- a/test/lisp/ibuffer-tests.el +++ b/test/lisp/ibuffer-tests.el @@ -66,5 +66,38 @@ (mapc (lambda (buf) (when (buffer-live-p buf) (kill-buffer buf))) (list buf1 buf2))))) +(ert-deftest ibuffer-test-Bug25058 () + "Test for http://debbugs.gnu.org/25058 ." + (ibuffer) + (let ((orig-filters ibuffer-saved-filter-groups) + (tmp-filters '(("saved-filters" + ("Shell" + (used-mode . shell-mode)) + ("Elisp" + (or + (used-mode . emacs-lisp-mode) + (used-mode . lisp-interaction-mode))) + ("Dired" + (used-mode . dired-mode)) + ("Info" + (or + (used-mode . help-mode) + (used-mode . debugger-mode) + (used-mode . Custom-mode) + (used-mode . completion-list-mode) + (name . "\\`[*]Messages[*]\\'"))))))) + (unwind-protect + (progn + (setq ibuffer-saved-filter-groups tmp-filters) + (ibuffer-switch-to-saved-filter-groups "saved-filters") + (ibuffer-decompose-filter-group "Elisp") + (ibuffer-filter-disable) + (ibuffer-switch-to-saved-filter-groups "saved-filters") + (should (assoc "Elisp" (cdar ibuffer-saved-filter-groups)))) + (setq ibuffer-saved-filter-groups orig-filters) + (ibuffer-awhen (get-buffer "*Ibuffer*") + (and (buffer-live-p it) (kill-buffer it)))))) + + (provide 'ibuffer-tests) ;; ibuffer-tests.el ends here -- 2.10.2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; In GNU Emacs 26.0.50.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.4) of 2016-11-28 Repository revision: 2c8a7e50d24daf19ea7d86f1cfeaa98a41c56085 From unknown Sun Aug 17 22:09:48 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Tino Calancha Subject: bug#25058: closed (Re: bug#25058: 26.0.50; ibuffer-decompose-filter-group: unwanted side effects) Message-ID: References: <878trr99w5.fsf@gmail.com> <87h96qskig.fsf@gmail.com> X-Gnu-PR-Message: they-closed 25058 X-Gnu-PR-Package: emacs X-Gnu-PR-Keywords: patch Reply-To: 25058@debbugs.gnu.org Date: Wed, 07 Dec 2016 12:56:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1481115362-17906-1" This is a multi-part message in MIME format... ------------=_1481115362-17906-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #25058: 26.0.50; ibuffer-decompose-filter-group: unwanted side effects which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 25058@debbugs.gnu.org. --=20 25058: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D25058 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1481115362-17906-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 25058-done) by debbugs.gnu.org; 7 Dec 2016 12:55:18 +0000 Received: from localhost ([127.0.0.1]:58943 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cEbkk-0004dq-0H for submit@debbugs.gnu.org; Wed, 07 Dec 2016 07:55:18 -0500 Received: from mail-pg0-f48.google.com ([74.125.83.48]:34650) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cEbkj-0004de-71 for 25058-done@debbugs.gnu.org; Wed, 07 Dec 2016 07:55:17 -0500 Received: by mail-pg0-f48.google.com with SMTP id x23so161919175pgx.1 for <25058-done@debbugs.gnu.org>; Wed, 07 Dec 2016 04:55:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:references:date:in-reply-to:message-id:user-agent :mime-version; bh=CDFW1EFyth8p9T6/DagoLmfsf17jjkw7eGdsIWqm4qY=; b=dhqYtrTZz2lZ0Y4T23vh3Z5ehMCGW4nrASFae7ZGqFI3ibYmdgTSyQ2pg0k7KY2YSP F2Pca4+iXO9sDzeAGFgZm8mhGKwH/SBvMZ73eN9xKvEccIxycuGOjmxvQ8HtuUCfmqeB YfhXojoTifTMOeafhokVXkE1b7mYgkrEkXIuTve+gZDuCVxFZjBOfKW4vT/M3NwU2Gub xWBp8+ysrClx8riRTGsFay2BmWtmL1LUSdfYES1FGgco/Fqoi2qqWK242dhS8w2MdOe1 gPmvmrncmYuQQpSeipH8YtqIQ7qz1m/avfFpIyPGVgHn8WGQ3UM4JqGLZlcL2lsM4LAc 8ajw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=CDFW1EFyth8p9T6/DagoLmfsf17jjkw7eGdsIWqm4qY=; b=YhP2QjrZ1JcpQ1IZzDMlzEVKVJrLBc6NjQ7/EgkXLp3eTH27cQ0j9xABeJVPwz5xMn ruBCjZ6Tv/Z+Ye7ee3x1tuKnZkPizOBMNcS2EZJEBCriG3eyCJ8dIsh1Q9Ym9HwtQT/Q BegzFZHjMk2Tp1lT/Ro0AEde2qpSE8zOwtC0knECIePqlZo6XdxQ3f+p5yMBW9470G5Z cpm4knREkFRryf2UPuawbvaqMUx2FdtIbnnzRl516pe82W/KKv+osLdw36gQJ24MAtLu ynscoHxnKcgx9Ken8vRKX1Bi9oObXJZdC0G4foZ/dhkQrA3DW4sCBw2fUbbYMK3cIvB0 l3zg== X-Gm-Message-State: AKaTC00DPtS9iR1kvqUjKhniBjmIx9eEyqDZDFC1xk8fhfdqMg6aI/15K3x2vQlaikWLQg== X-Received: by 10.99.171.10 with SMTP id p10mr121087714pgf.36.1481115310322; Wed, 07 Dec 2016 04:55:10 -0800 (PST) Received: from calancha-pc (pl676.nas813.p-iwate.nttpc.ne.jp. [124.154.237.164]) by smtp.gmail.com with ESMTPSA id g22sm42790560pgn.20.2016.12.07.04.55.09 for <25058-done@debbugs.gnu.org> (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 07 Dec 2016 04:55:09 -0800 (PST) From: Tino Calancha To: 25058-done@debbugs.gnu.org Subject: Re: bug#25058: 26.0.50; ibuffer-decompose-filter-group: unwanted side effects References: <87h96qskig.fsf@gmail.com> Date: Wed, 07 Dec 2016 21:55:06 +0900 In-Reply-To: <87h96qskig.fsf@gmail.com> (Tino Calancha's message of "Tue, 29 Nov 2016 18:28:07 +0900") Message-ID: <878trr99w5.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 25058-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) Tino Calancha writes: > `ibuffer-decompose-filter-group' has unwanted side effects: it might > modify `ibuffer-saved-filter-groups'. Pushed fix to master branch as commit 53fefb5. ------------=_1481115362-17906-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 29 Nov 2016 09:28:29 +0000 Received: from localhost ([127.0.0.1]:45610 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cBeiC-0000yx-MC for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:29 -0500 Received: from eggs.gnu.org ([208.118.235.92]:52409) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cBeiB-0000yg-9L for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cBei1-0002Ba-85 for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:22 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:35762) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cBei1-0002BW-2b for submit@debbugs.gnu.org; Tue, 29 Nov 2016 04:28:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43360) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cBehz-00022D-Bq for bug-gnu-emacs@gnu.org; Tue, 29 Nov 2016 04:28:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cBehw-00029x-M2 for bug-gnu-emacs@gnu.org; Tue, 29 Nov 2016 04:28:15 -0500 Received: from mail-pg0-x22d.google.com ([2607:f8b0:400e:c05::22d]:36125) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cBehw-00029h-74 for bug-gnu-emacs@gnu.org; Tue, 29 Nov 2016 04:28:12 -0500 Received: by mail-pg0-x22d.google.com with SMTP id f188so67456536pgc.3 for ; Tue, 29 Nov 2016 01:28:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:mime-version; bh=C70zSIM7kmMwOKT/8OJQT5oVHmQtgMfAH6eZIc0Ar4I=; b=lmLO9iyRKE0pjrcLZUHsf/mFvBLFKLHkd4Ieuxq1sa8HegwyULttjgoGGTyzoLnNcK XHkxjmS0WNGa1KEvdtb0FmcrKvfP5Fs6gH8R2OMjlw54ituXwsKC25fX4/G9VAGCI4e7 y1xSODBfE6c84kYVLzhEuLzypnRz78FFypwNY9VIg+N25yaAxvuuwIPgmComNGqnhZCx WiwX/XeS5iekqRu4XuezNofERrRWG8gAkwZlH8TP2ShPzMbPZFYb91DhNrO9KOAUpwd9 wHuo6YuxJUb8Fz+mnggPE40trhCgGoJJAdTLvvkMz4DS/Ond5Rz7OmzeREjBaYRHUZcG SUow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:mime-version; bh=C70zSIM7kmMwOKT/8OJQT5oVHmQtgMfAH6eZIc0Ar4I=; b=Cycz5wYIPybrXV3ovV30jMjcgYZupcoGCQ4Qzknz84Lv3KmeZLW6O/6RSRV9qbCCe2 ReRJ0HL5gB302aecqpLLMr/tUdaxulNjrt6yndXhaqdYd9FUNPxPr5bIJjKq55PArJI7 vXR0Nq+2EGEX/1K6r5TvAT0jpVwI3LVSD+dgmbcP9l5KMxSPO4CWMHtg1DP1EtGCcMD6 RAn0UPLK0p3iQLEzvOMV4A8FCjgsgNqwQlX85XCyKBHZwMLO/046olTSaUPe9axX2GsJ AWmLpMdMQO/FFMAClMXyOvCa/JgjTqjNW3dnYOEocUm2P9L4V8rciUyXdK4PPc7zj78Y 11Ow== X-Gm-Message-State: AKaTC03Sv2C2GOgcc36UrlEHifckmx3CaIlJDIy3RoHxSSfDRZTEooCHQzzNjJjsRxGfvw== X-Received: by 10.84.216.17 with SMTP id m17mr58843289pli.82.1480411690043; Tue, 29 Nov 2016 01:28:10 -0800 (PST) Received: from calancha-pc (177.192.218.133.dy.bbexcite.jp. [133.218.192.177]) by smtp.gmail.com with ESMTPSA id i76sm93348657pfk.89.2016.11.29.01.28.08 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 Nov 2016 01:28:09 -0800 (PST) From: Tino Calancha To: bug-gnu-emacs@gnu.org Subject: 26.0.50; ibuffer-decompose-filter-group: unwanted side effects Date: Tue, 29 Nov 2016 18:28:07 +0900 Message-ID: <87h96qskig.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) `ibuffer-decompose-filter-group' has unwanted side effects: it might modify `ibuffer-saved-filter-groups'. emacs -Q -eval "(dired (expand-file-name source-directory))" ;; Evaluate following form: (progn (ibuffer) (setq ibuffer-show-empty-filter-groups nil ibuffer-saved-filter-groups '(("saved-filters" ("Shell" (used-mode . shell-mode)) ("Elisp" (or (used-mode . emacs-lisp-mode) (used-mode . lisp-interaction-mode))) ("Dired" (used-mode . dired-mode)) ("Info" (or (used-mode . help-mode) (used-mode . debugger-mode) (used-mode . Custom-mode) (used-mode . completion-list-mode) (name . "\\`[*]Messages[*]\\'")))))) (ibuffer-switch-to-saved-filter-groups "saved-filters")) ;; Now we call `ibuffer-decompose-filter-group' followed by ;; `ibuffer-filter-disable' and `ibuffer-switch-to-saved-filter-groups'. ;; These commands should bring us back to the initial Ibuffer status: /D Elisp RET // /R ;; Elisp group is missing without calling `ibuffer-delete-saved-filter-groups' M-: (assoc "Elisp" (cdar ibuffer-saved-filter-groups)) RET => nil The reason seems to be that `ibuffer-saved-filter-groups' and `ibuffer-filter-groups' share elements. (eq (cdar ibuffer-saved-filter-groups) ibuffer-filter-groups) => t Then, the destructive function `ibuffer-delete-alist' applied on `ibuffer-filter-groups' will modify the other list as well. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >From 45f95151de799fc1acd19353a40b22d6783ad1a6 Mon Sep 17 00:00:00 2001 From: Tino Calancha Date: Tue, 29 Nov 2016 18:14:32 +0900 Subject: [PATCH] ibuffer-decompose-filter-group avoid unwanted side effects * lisp/ibuf-ext.el (ibuffer-delete-alist): Remove it. (ibuffer-remove-alist): New defun; it supersedes 'ibuffer-delete-alist'. All callers changed (Bug#25058). * test/lisp/ibuffer-tests.el (ibuffer-test-Bug25058): Add test. --- lisp/ibuf-ext.el | 23 +++++++++++------------ test/lisp/ibuffer-tests.el | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el index 5ef0746..7f35ce6 100644 --- a/lisp/ibuf-ext.el +++ b/lisp/ibuf-ext.el @@ -38,12 +38,11 @@ (require 'cl-lib)) ;;; Utility functions -(defun ibuffer-delete-alist (key alist) - "Delete all entries in ALIST that have a key equal to KEY." - (let (entry) - (while (setq entry (assoc key alist)) - (setq alist (delete entry alist))) - alist)) +(defun ibuffer-remove-alist (key alist) + "Remove all entries in ALIST that have a key equal to KEY." + (while (ibuffer-awhen (assoc key alist) + (setq alist (remove it alist)) it)) + alist) ;; borrowed from Gnus (defun ibuffer-remove-duplicates (list) @@ -281,7 +280,7 @@ ibuffer-interactive-filter-by-mode (let ((buf (ibuffer-current-buffer))) (if (assq 'mode ibuffer-filtering-qualifiers) (setq ibuffer-filtering-qualifiers - (ibuffer-delete-alist 'mode ibuffer-filtering-qualifiers)) + (ibuffer-remove-alist 'mode ibuffer-filtering-qualifiers)) (ibuffer-push-filter (cons 'mode (buffer-local-value 'major-mode buf))))) (ibuffer-update nil t)) @@ -556,7 +555,7 @@ ibuffer-generate-filter-groups (append ibuffer-filter-groups (list (cons "Default" nil)))))) ;; (dolist (hidden ibuffer-hidden-filter-groups) - ;; (setq filter-group-alist (ibuffer-delete-alist + ;; (setq filter-group-alist (ibuffer-remove-alist ;; hidden filter-group-alist))) (let ((vec (make-vector (length filter-group-alist) nil)) (i 0)) @@ -640,7 +639,7 @@ ibuffer-decompose-filter-group (interactive (list (ibuffer-read-filter-group-name "Decompose filter group: " t))) (let ((data (cdr (assoc group ibuffer-filter-groups)))) - (setq ibuffer-filter-groups (ibuffer-delete-alist + (setq ibuffer-filter-groups (ibuffer-remove-alist group ibuffer-filter-groups) ibuffer-filtering-qualifiers data)) (ibuffer-update nil t)) @@ -688,7 +687,7 @@ ibuffer-kill-filter-group (ibuffer-aif (assoc name ibuffer-filter-groups) (progn (push (copy-tree it) ibuffer-filter-group-kill-ring) - (setq ibuffer-filter-groups (ibuffer-delete-alist + (setq ibuffer-filter-groups (ibuffer-remove-alist name ibuffer-filter-groups)) (setq ibuffer-hidden-filter-groups (delete name ibuffer-hidden-filter-groups))) @@ -778,7 +777,7 @@ ibuffer-delete-saved-filter-groups (completing-read "Delete saved filter group: " ibuffer-saved-filter-groups nil t)))) (setq ibuffer-saved-filter-groups - (ibuffer-delete-alist name ibuffer-saved-filter-groups)) + (ibuffer-remove-alist name ibuffer-saved-filter-groups)) (ibuffer-maybe-save-stuff) (ibuffer-update nil t)) @@ -949,7 +948,7 @@ ibuffer-delete-saved-filters (completing-read "Delete saved filters: " ibuffer-saved-filters nil t)))) (setq ibuffer-saved-filters - (ibuffer-delete-alist name ibuffer-saved-filters)) + (ibuffer-remove-alist name ibuffer-saved-filters)) (ibuffer-maybe-save-stuff) (ibuffer-update nil t)) diff --git a/test/lisp/ibuffer-tests.el b/test/lisp/ibuffer-tests.el index 3a4def3..260469e 100644 --- a/test/lisp/ibuffer-tests.el +++ b/test/lisp/ibuffer-tests.el @@ -66,5 +66,38 @@ (mapc (lambda (buf) (when (buffer-live-p buf) (kill-buffer buf))) (list buf1 buf2))))) +(ert-deftest ibuffer-test-Bug25058 () + "Test for http://debbugs.gnu.org/25058 ." + (ibuffer) + (let ((orig-filters ibuffer-saved-filter-groups) + (tmp-filters '(("saved-filters" + ("Shell" + (used-mode . shell-mode)) + ("Elisp" + (or + (used-mode . emacs-lisp-mode) + (used-mode . lisp-interaction-mode))) + ("Dired" + (used-mode . dired-mode)) + ("Info" + (or + (used-mode . help-mode) + (used-mode . debugger-mode) + (used-mode . Custom-mode) + (used-mode . completion-list-mode) + (name . "\\`[*]Messages[*]\\'"))))))) + (unwind-protect + (progn + (setq ibuffer-saved-filter-groups tmp-filters) + (ibuffer-switch-to-saved-filter-groups "saved-filters") + (ibuffer-decompose-filter-group "Elisp") + (ibuffer-filter-disable) + (ibuffer-switch-to-saved-filter-groups "saved-filters") + (should (assoc "Elisp" (cdar ibuffer-saved-filter-groups)))) + (setq ibuffer-saved-filter-groups orig-filters) + (ibuffer-awhen (get-buffer "*Ibuffer*") + (and (buffer-live-p it) (kill-buffer it)))))) + + (provide 'ibuffer-tests) ;; ibuffer-tests.el ends here -- 2.10.2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; In GNU Emacs 26.0.50.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.4) of 2016-11-28 Repository revision: 2c8a7e50d24daf19ea7d86f1cfeaa98a41c56085 ------------=_1481115362-17906-1--