summaryrefslogtreecommitdiff
path: root/lisp/ibuf-ext.el
diff options
context:
space:
mode:
authorTino Calancha <tino.calancha@gmail.com>2016-12-07 20:47:34 +0900
committerTino Calancha <tino.calancha@gmail.com>2016-12-07 20:47:34 +0900
commit7b1e97f0e62e0be5c89708c4aef38c0d462d2291 (patch)
tree46954907fa3e4842a46a9f173edfeba107e06288 /lisp/ibuf-ext.el
parent586867e6815d6e43bfaa4191bc62de60c00fbce3 (diff)
downloademacs-7b1e97f0e62e0be5c89708c4aef38c0d462d2291.tar.gz
ibuffer-decompose-filter: Avoid side effects on error
* lisp/ibuf-ext.el (ibuffer-decompose-filter): Update 'ibuffer-filtering-qualifiers' only if there is no error (Bug#24997). * test/lisp/ibuffer-tests.el (ibuffer-test-Bug24997): Update test result as pass.
Diffstat (limited to 'lisp/ibuf-ext.el')
-rw-r--r--lisp/ibuf-ext.el36
1 files changed, 17 insertions, 19 deletions
diff --git a/lisp/ibuf-ext.el b/lisp/ibuf-ext.el
index d1bf5769d8c..cc2942c9119 100644
--- a/lisp/ibuf-ext.el
+++ b/lisp/ibuf-ext.el
@@ -929,26 +929,24 @@ This means that the topmost filter on the filtering stack, which must
be a complex filter like (OR [name: foo] [mode: bar-mode]), will be
turned into two separate filters [name: foo] and [mode: bar-mode]."
(interactive)
- (when (null ibuffer-filtering-qualifiers)
+ (unless ibuffer-filtering-qualifiers
(error "No filters in effect"))
- (let ((lim (pop ibuffer-filtering-qualifiers)))
- (pcase (car lim)
- (`or
- (setq ibuffer-filtering-qualifiers (append
- (cdr lim)
- ibuffer-filtering-qualifiers)))
- (`saved
- (let ((data (assoc (cdr lim) ibuffer-saved-filters)))
- (unless data
- (ibuffer-filter-disable)
- (error "Unknown saved filter %s" (cdr lim)))
- (setq ibuffer-filtering-qualifiers
- (append (cdr data) ibuffer-filtering-qualifiers))))
- (`not
- (push (cdr lim)
- ibuffer-filtering-qualifiers))
- (_
- (error "Filter type %s is not compound" (car lim)))))
+ (let* ((filters ibuffer-filtering-qualifiers)
+ (head (cdar filters))
+ (tail (cdr filters))
+ (value
+ (pcase (caar filters)
+ (`or (nconc head tail))
+ (`saved
+ (let ((data (assoc head ibuffer-saved-filters)))
+ (unless data
+ (ibuffer-filter-disable)
+ (error "Unknown saved filter %s" head))
+ (append (cadr data) tail)))
+ (`not (cons head tail))
+ (_
+ (error "Filter type %s is not compound" (caar filters))))))
+ (setq ibuffer-filtering-qualifiers value))
(ibuffer-update nil t))
;;;###autoload