diff --git a/org-ql.el b/org-ql.el index f99e260..dbe689f 100644 --- a/org-ql.el +++ b/org-ql.el @@ -1229,7 +1229,7 @@ result form." ((eq query t) (setq query `(regexp ,regexp))) ((not query) (setq query `(regexp ,regexp))) (t nil)) - (setq query clause)) + (unless query (setq query clause))) (push query queries) ;; Take the longest regexp. It should be hardest to match. (when (length> regexp (length regexp-max)) @@ -1256,9 +1256,8 @@ result form." (if regexp (cond ((eq query t) (setq query `(regexp ,regexp))) - ((not query) (setq query `(regexp ,regexp))) - (t nil)) - (setq query clause)) + ((not query) (setq query `(regexp ,regexp)))) + (unless query (setq query clause))) (push query queries) ;; Collect regexps for combining. (if regexp (push regexp regexps) @@ -1268,9 +1267,7 @@ result form." (and regexps (rx-to-string `(or ,@(mapcar (lambda (re) `(regex ,re)) regexps))))) :case-fold t - :query (if regexp-null-p - `(save-excursion (or ,@clauses)) - `(save-excursion (or ,@queries)))))))) + :query `(or ,@(mapcar (lambda (clause) `(save-excursion ,clause)) queries))))))) (org-ql-defpred org-ql--when (condition &rest clauses) "Return values of CLAUSES when CONDITION is non-nil." @@ -1283,7 +1280,7 @@ result form." (-let* (((&plist :regexp :case-fold :query) (rec `(and ,condition ,(last clauses))))) (list :regexp regexp :case-fold case-fold - :query `(when ,condition ,@clauses)))))) + :query `(when ,condition ,@(mapcar (lambda (clause) `(save-excursion ,clause)) (butlast clauses)) ,(last clauses))))))) (org-ql-defpred org-ql--unless (condition &rest clauses) "Return values of CLAUSES unless CONDITION is non-nil." @@ -1296,7 +1293,7 @@ result form." (-let* (((&plist :regexp :case-fold :query) (rec ,(last clauses)))) (list :regexp regexp :case-fold case-fold - :query `(unless ,condition ,@clauses)))))) + :query `(unless (save-excursion ,condition) ,@(mapcar (lambda (clause) `(save-excursion ,clause)) (butlast clauses)) ,(last clauses))))))) (org-ql-defpred org-ql--not (clauses) "Match when CLAUSES don't match."