diff options
author | Tino Calancha <tino.calancha@gmail.com> | 2016-12-07 20:47:34 +0900 |
---|---|---|
committer | Tino Calancha <tino.calancha@gmail.com> | 2016-12-07 20:47:34 +0900 |
commit | 7b1e97f0e62e0be5c89708c4aef38c0d462d2291 (patch) | |
tree | 46954907fa3e4842a46a9f173edfeba107e06288 /lisp/ibuf-ext.el | |
parent | 586867e6815d6e43bfaa4191bc62de60c00fbce3 (diff) | |
download | emacs-7b1e97f0e62e0be5c89708c4aef38c0d462d2291.tar.gz emacs-7b1e97f0e62e0be5c89708c4aef38c0d462d2291.tar.bz2 emacs-7b1e97f0e62e0be5c89708c4aef38c0d462d2291.zip |
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.el | 36 |
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 |