diff options
| author | Tino Calancha | 2016-12-07 21:49:50 +0900 |
|---|---|---|
| committer | Tino Calancha | 2016-12-07 21:49:50 +0900 |
| commit | 53fefb55c5cd8a56f3273daaba21b1aa03de557a (patch) | |
| tree | c3d84df7c22fea051268526632e96236ac9cae6d | |
| parent | 0fa281fe2f3f104ec954dde096fd085eba42021f (diff) | |
| download | emacs-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.el | 23 | ||||
| -rw-r--r-- | 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 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 |