summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorTino Calancha <tino.calancha@gmail.com>2017-10-20 22:11:39 +0900
committerTino Calancha <tino.calancha@gmail.com>2017-10-20 22:11:39 +0900
commitee6fe8378a28444cb4913abca4af742f736e9b45 (patch)
tree35beb1736dbf4c4791d5795a09f7c71d8be084b1 /lisp
parent658853aebb0ae2ee243276e04a7672fa7525ec5c (diff)
downloademacs-ee6fe8378a28444cb4913abca4af742f736e9b45.tar.gz
emacs-ee6fe8378a28444cb4913abca4af742f736e9b45.tar.bz2
emacs-ee6fe8378a28444cb4913abca4af742f736e9b45.zip
Make ibuffer filters idempotent
* lisp/ibuf-ext.el (ibuffer-push-filter): Check if the filter is already in effect (Bug#28826). * lisp/ibuf-macs.el (define-ibuffer-filter): Report to user if the filter was already enabled.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ibuf-ext.el7
-rw-r--r--lisp/ibuf-macs.el16
2 files changed, 15 insertions, 8 deletions
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index 686bc392b60..2c841fa7e0a 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -1033,8 +1033,11 @@ group definitions by setting `ibuffer-filter-groups' to nil."
(ibuffer-jump-to-buffer (buffer-name buf)))))
(defun ibuffer-push-filter (filter-specification)
- "Add FILTER-SPECIFICATION to `ibuffer-filtering-qualifiers'."
- (push filter-specification ibuffer-filtering-qualifiers))
+ "Add FILTER-SPECIFICATION to `ibuffer-filtering-qualifiers'.
+If FILTER-SPECIFICATION is already in the list then return nil. Otherwise,
+return the updated list."
+ (unless (member filter-specification ibuffer-filtering-qualifiers)
+ (push filter-specification ibuffer-filtering-qualifiers)))
;;;###autoload
(defun ibuffer-decompose-filter ()
diff --git a/lisp/ibuf-macs.el b/lisp/ibuf-macs.el
index e0c91e20edd..c30067f2f58 100644
--- a/lisp/ibuf-macs.el
+++ b/lisp/ibuf-macs.el
@@ -301,12 +301,16 @@ bound to the current value of the filter.
(defun ,fn-name (qualifier)
,(or documentation "This filter is not documented.")
(interactive (list ,reader))
- (ibuffer-push-filter (cons ',name qualifier))
- (message "%s"
- (format ,(concat (format "Filter by %s added: " description)
- " %s")
- qualifier))
- (ibuffer-update nil t))
+ (if (null (ibuffer-push-filter (cons ',name qualifier)))
+ (message "%s"
+ (format ,(concat (format "Filter by %s already applied: " description)
+ " %s")
+ qualifier))
+ (message "%s"
+ (format ,(concat (format "Filter by %s added: " description)
+ " %s")
+ qualifier))
+ (ibuffer-update nil t)))
(push (list ',name ,description
(lambda (buf qualifier)
(condition-case nil