aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTino Calancha2016-12-07 21:49:50 +0900
committerTino Calancha2016-12-07 21:49:50 +0900
commit53fefb55c5cd8a56f3273daaba21b1aa03de557a (patch)
treec3d84df7c22fea051268526632e96236ac9cae6d
parent0fa281fe2f3f104ec954dde096fd085eba42021f (diff)
downloademacs-53fefb55c5cd8a56f3273daaba21b1aa03de557a.tar.gz
emacs-53fefb55c5cd8a56f3273daaba21b1aa03de557a.zip
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.
-rw-r--r--lisp/ibuf-ext.el23
-rw-r--r--test/lisp/ibuffer-tests.el33
2 files changed, 44 insertions, 12 deletions
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index cc2942c9119..e64be437adc 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -39,12 +39,11 @@
39 (require 'subr-x)) 39 (require 'subr-x))
40 40
41;;; Utility functions 41;;; Utility functions
42(defun ibuffer-delete-alist (key alist) 42(defun ibuffer-remove-alist (key alist)
43 "Delete all entries in ALIST that have a key equal to KEY." 43 "Remove all entries in ALIST that have a key equal to KEY."
44 (let (entry) 44 (while (ibuffer-awhen (assoc key alist)
45 (while (setq entry (assoc key alist)) 45 (setq alist (remove it alist)) it))
46 (setq alist (delete entry alist))) 46 alist)
47 alist))
48 47
49;; borrowed from Gnus 48;; borrowed from Gnus
50(defun ibuffer-remove-duplicates (list) 49(defun ibuffer-remove-duplicates (list)
@@ -372,7 +371,7 @@ the mode if ARG is omitted or nil."
372 (let ((buf (ibuffer-current-buffer))) 371 (let ((buf (ibuffer-current-buffer)))
373 (if (assq 'mode ibuffer-filtering-qualifiers) 372 (if (assq 'mode ibuffer-filtering-qualifiers)
374 (setq ibuffer-filtering-qualifiers 373 (setq ibuffer-filtering-qualifiers
375 (ibuffer-delete-alist 'mode ibuffer-filtering-qualifiers)) 374 (ibuffer-remove-alist 'mode ibuffer-filtering-qualifiers))
376 (ibuffer-push-filter (cons 'mode (buffer-local-value 'major-mode buf))))) 375 (ibuffer-push-filter (cons 'mode (buffer-local-value 'major-mode buf)))))
377 (ibuffer-update nil t)) 376 (ibuffer-update nil t))
378 377
@@ -645,7 +644,7 @@ To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
645 (append ibuffer-filter-groups 644 (append ibuffer-filter-groups
646 (list (cons "Default" nil)))))) 645 (list (cons "Default" nil))))))
647 ;; (dolist (hidden ibuffer-hidden-filter-groups) 646 ;; (dolist (hidden ibuffer-hidden-filter-groups)
648 ;; (setq filter-group-alist (ibuffer-delete-alist 647 ;; (setq filter-group-alist (ibuffer-remove-alist
649 ;; hidden filter-group-alist))) 648 ;; hidden filter-group-alist)))
650 (let ((vec (make-vector (length filter-group-alist) nil)) 649 (let ((vec (make-vector (length filter-group-alist) nil))
651 (i 0)) 650 (i 0))
@@ -729,7 +728,7 @@ To evaluate a form without viewing the buffer, see `ibuffer-do-eval'."
729 (interactive 728 (interactive
730 (list (ibuffer-read-filter-group-name "Decompose filter group: " t))) 729 (list (ibuffer-read-filter-group-name "Decompose filter group: " t)))
731 (let ((data (cdr (assoc group ibuffer-filter-groups)))) 730 (let ((data (cdr (assoc group ibuffer-filter-groups))))
732 (setq ibuffer-filter-groups (ibuffer-delete-alist 731 (setq ibuffer-filter-groups (ibuffer-remove-alist
733 group ibuffer-filter-groups) 732 group ibuffer-filter-groups)
734 ibuffer-filtering-qualifiers data)) 733 ibuffer-filtering-qualifiers data))
735 (ibuffer-update nil t)) 734 (ibuffer-update nil t))
@@ -777,7 +776,7 @@ The group will be added to `ibuffer-filter-group-kill-ring'."
777 (ibuffer-aif (assoc name ibuffer-filter-groups) 776 (ibuffer-aif (assoc name ibuffer-filter-groups)
778 (progn 777 (progn
779 (push (copy-tree it) ibuffer-filter-group-kill-ring) 778 (push (copy-tree it) ibuffer-filter-group-kill-ring)
780 (setq ibuffer-filter-groups (ibuffer-delete-alist 779 (setq ibuffer-filter-groups (ibuffer-remove-alist
781 name ibuffer-filter-groups)) 780 name ibuffer-filter-groups))
782 (setq ibuffer-hidden-filter-groups 781 (setq ibuffer-hidden-filter-groups
783 (delete name ibuffer-hidden-filter-groups))) 782 (delete name ibuffer-hidden-filter-groups)))
@@ -867,7 +866,7 @@ They are removed from `ibuffer-saved-filter-groups'."
867 (completing-read "Delete saved filter group: " 866 (completing-read "Delete saved filter group: "
868 ibuffer-saved-filter-groups nil t)))) 867 ibuffer-saved-filter-groups nil t))))
869 (setq ibuffer-saved-filter-groups 868 (setq ibuffer-saved-filter-groups
870 (ibuffer-delete-alist name ibuffer-saved-filter-groups)) 869 (ibuffer-remove-alist name ibuffer-saved-filter-groups))
871 (ibuffer-maybe-save-stuff) 870 (ibuffer-maybe-save-stuff)
872 (ibuffer-update nil t)) 871 (ibuffer-update nil t))
873 872
@@ -1033,7 +1032,7 @@ Interactively, prompt for NAME, and use the current filters."
1033 (completing-read "Delete saved filters: " 1032 (completing-read "Delete saved filters: "
1034 ibuffer-saved-filters nil t)))) 1033 ibuffer-saved-filters nil t))))
1035 (setq ibuffer-saved-filters 1034 (setq ibuffer-saved-filters
1036 (ibuffer-delete-alist name ibuffer-saved-filters)) 1035 (ibuffer-remove-alist name ibuffer-saved-filters))
1037 (ibuffer-maybe-save-stuff) 1036 (ibuffer-maybe-save-stuff)
1038 (ibuffer-update nil t)) 1037 (ibuffer-update nil t))
1039 1038
diff --git a/test/lisp/ibuffer-tests.el b/test/lisp/ibuffer-tests.el
index 799f3fbbdc7..9fdaaf0e097 100644
--- a/test/lisp/ibuffer-tests.el
+++ b/test/lisp/ibuffer-tests.el
@@ -93,5 +93,38 @@
93 (should (equal (cdr (assoc "test2" ibuffer-saved-filters)) test2)) 93 (should (equal (cdr (assoc "test2" ibuffer-saved-filters)) test2))
94 (should (equal (cdr (assoc "test3" ibuffer-saved-filters)) test3)))) 94 (should (equal (cdr (assoc "test3" ibuffer-saved-filters)) test3))))
95 95
96(ert-deftest ibuffer-test-Bug25058 ()
97 "Test for http://debbugs.gnu.org/25058 ."
98 (ibuffer)
99 (let ((orig-filters ibuffer-saved-filter-groups)
100 (tmp-filters '(("saved-filters"
101 ("Shell"
102 (used-mode . shell-mode))
103 ("Elisp"
104 (or
105 (used-mode . emacs-lisp-mode)
106 (used-mode . lisp-interaction-mode)))
107 ("Dired"
108 (used-mode . dired-mode))
109 ("Info"
110 (or
111 (used-mode . help-mode)
112 (used-mode . debugger-mode)
113 (used-mode . Custom-mode)
114 (used-mode . completion-list-mode)
115 (name . "\\`[*]Messages[*]\\'")))))))
116 (unwind-protect
117 (progn
118 (setq ibuffer-saved-filter-groups tmp-filters)
119 (ibuffer-switch-to-saved-filter-groups "saved-filters")
120 (ibuffer-decompose-filter-group "Elisp")
121 (ibuffer-filter-disable)
122 (ibuffer-switch-to-saved-filter-groups "saved-filters")
123 (should (assoc "Elisp" (cdar ibuffer-saved-filter-groups))))
124 (setq ibuffer-saved-filter-groups orig-filters)
125 (ibuffer-awhen (get-buffer "*Ibuffer*")
126 (and (buffer-live-p it) (kill-buffer it))))))
127
128
96(provide 'ibuffer-tests) 129(provide 'ibuffer-tests)
97;; ibuffer-tests.el ends here 130;; ibuffer-tests.el ends here