diff --git a/org-ql.el b/org-ql.el index b472039..671c211 100644 --- a/org-ql.el +++ b/org-ql.el @@ -1481,6 +1481,7 @@ any link is found." (match-string org-ql-link-description-group))))))))) ;; MAYBE: Preambles for outline-path predicates. Not sure if possible without complicated logic. +;; FIXME: These preds say they accept regexps but the strings get regexp-quoted. They should probably just take strings. (org-ql-defpred (outline-path olp) (&rest regexps) "Return non-nil if current node's outline path matches all of REGEXPS. @@ -1496,7 +1497,7 @@ the following queries: (olp \"Food\" \"Grapes\")" :normalizers ((`(,predicate-names . ,strings) ;; Regexp quote headings. - `(outline-path ,@(mapcar #'regexp-quote strings)))) + `(org-ql--predicate-outline-path ,@(mapcar #'regexp-quote strings)))) :body (let ((entry-olp (org-ql--value-at (point) #'org-ql--outline-path))) (cl-loop for h in regexps always (cl-member h entry-olp :test #'string-match)))) diff --git a/tests/test-org-ql.el b/tests/test-org-ql.el index 4cbf3b2..dcc6611 100644 --- a/tests/test-org-ql.el +++ b/tests/test-org-ql.el @@ -251,6 +251,12 @@ with keyword arg NOW in PLIST." :to-equal '(link :description "DESCRIPTION" :target "TARGET" :regexp-p t)))) + (describe "(outline-path)" + (it "with a regexp metacharacter" + ;; Ensures that normalizer doesn't infinitely loop. + (expect (org-ql--normalize-query '(olp "a." "b")) + :to-equal '(org-ql--predicate-outline-path "a\\." "b")))) + (describe "timestamp predicates" ;; NOTE: (clocked) and (closed) don't accept :with-time arguments. (describe "(clocked)"