diff --git a/README.org b/README.org index 0235712..e5c0bf2 100644 --- a/README.org +++ b/README.org @@ -74,6 +74,8 @@ These commands and functions are included: - ~org-ql-select~ (function) - ~org-ql-query~ (function) +If user search bare string, the predicate ~org-ql-plain-string-predicate~ will be used by default. + Feedback on these APIs is welcome. Eventually, after being tested and polished, they will be considered stable. # TODO: Find a way to get these examples included in the info manual. @@ -378,6 +380,8 @@ Expands into a call to ~org-ql-select~ with the same arguments. For convenience ** 0.4-pre *Added* ++ *Variable* + - ~org-ql-plain-string-predicate~, which will be used when user search bare string. + *Commands* - ~helm-org-ql-views~, which shows one of ~org-ql-views~ selected with Helm. - ~org-ql-search~ can search files in ~org-directory~; customization options are available in the ~org-ql-search~ group. diff --git a/org-ql.el b/org-ql.el index 1f39d3f..515e032 100644 --- a/org-ql.el +++ b/org-ql.el @@ -109,6 +109,9 @@ the value returned by it at that node.") "Plist of predicates, their corresponding functions, and their docstrings. This list should not contain any duplicates.") +(defvar org-ql-plain-string-predicate 'regexp + "Plain strings in queries are matched with this predicate.") + ;;;; Customization (defgroup org-ql nil @@ -521,8 +524,9 @@ Or, when possible, fix the problem." (defun org-ql--pre-process-query (query) "Return QUERY having been pre-processed. -Replaces bare strings with (regexp) selectors, and appropriate -`ts'-related selectors." +Replaces bare strings with predicate set by +`org-ql-plain-string-predicate' , and appropriate `ts'-related +selectors." ;; This is unsophisticated, but it works. ;; TODO: Maybe query pre-processing should be done in one place, ;; rather than here and in --query-predicate. @@ -538,7 +542,7 @@ Replaces bare strings with (regexp) selectors, and appropriate (`(unless ,condition . ,clauses) `(unless ,(rec condition) ,@(mapcar #'rec clauses))) ;; TODO: Combine (regexp) when appropriate (i.e. inside an OR, not an AND). - ((pred stringp) `(regexp ,element)) + ((pred stringp) `(,org-ql-plain-string-predicate ,element)) ;; Quote children queries so the user doesn't have to. (`(children ,query) `(children ',query)) (`(children) '(children (lambda () t))) @@ -1495,7 +1499,8 @@ Builds the PEG expression using predicates defined in (-sort (-on #'> #'length))))) `(cl-defun org-ql--plain-query (input &optional (boolean 'and)) "Return query parsed from plain query string INPUT. -Multiple predicates are combined with BOOLEAN." +Multiple predicates are combined with BOOLEAN. +If no predicates are found, `org-ql-plain-string-predicate' will be used." (unless (s-blank-str? input) (let* ((query (peg-parse-string ((query (+ term @@ -1506,7 +1511,7 @@ Multiple predicates are combined with BOOLEAN." positive-term)) (positive-term (or (and predicate-with-args `(pred args -- (cons (intern pred) args))) (and predicate-without-args `(pred -- (list (intern pred)))) - (and plain-string `(s -- (list 'regexp s))))) + (and plain-string `(s -- (list org-ql-plain-string-predicate s))))) (plain-string (or quoted-arg unquoted-arg)) (predicate-with-args (substring predicate) ":" args) (predicate-without-args (substring predicate) ":")