Add org-ql-plain-string-predicate and use it
This commit is contained in:
parent
b9dfd7d93b
commit
09020341eb
2 changed files with 14 additions and 5 deletions
|
|
@ -74,6 +74,8 @@ These commands and functions are included:
|
||||||
- ~org-ql-select~ (function)
|
- ~org-ql-select~ (function)
|
||||||
- ~org-ql-query~ (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.
|
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.
|
# 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
|
** 0.4-pre
|
||||||
|
|
||||||
*Added*
|
*Added*
|
||||||
|
+ *Variable*
|
||||||
|
- ~org-ql-plain-string-predicate~, which will be used when user search bare string.
|
||||||
+ *Commands*
|
+ *Commands*
|
||||||
- ~helm-org-ql-views~, which shows one of ~org-ql-views~ selected with Helm.
|
- ~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.
|
- ~org-ql-search~ can search files in ~org-directory~; customization options are available in the ~org-ql-search~ group.
|
||||||
|
|
|
||||||
15
org-ql.el
15
org-ql.el
|
|
@ -109,6 +109,9 @@ the value returned by it at that node.")
|
||||||
"Plist of predicates, their corresponding functions, and their docstrings.
|
"Plist of predicates, their corresponding functions, and their docstrings.
|
||||||
This list should not contain any duplicates.")
|
This list should not contain any duplicates.")
|
||||||
|
|
||||||
|
(defvar org-ql-plain-string-predicate 'regexp
|
||||||
|
"Plain strings in queries are matched with this predicate.")
|
||||||
|
|
||||||
;;;; Customization
|
;;;; Customization
|
||||||
|
|
||||||
(defgroup org-ql nil
|
(defgroup org-ql nil
|
||||||
|
|
@ -521,8 +524,9 @@ Or, when possible, fix the problem."
|
||||||
|
|
||||||
(defun org-ql--pre-process-query (query)
|
(defun org-ql--pre-process-query (query)
|
||||||
"Return QUERY having been pre-processed.
|
"Return QUERY having been pre-processed.
|
||||||
Replaces bare strings with (regexp) selectors, and appropriate
|
Replaces bare strings with predicate set by
|
||||||
`ts'-related selectors."
|
`org-ql-plain-string-predicate' , and appropriate `ts'-related
|
||||||
|
selectors."
|
||||||
;; This is unsophisticated, but it works.
|
;; This is unsophisticated, but it works.
|
||||||
;; TODO: Maybe query pre-processing should be done in one place,
|
;; TODO: Maybe query pre-processing should be done in one place,
|
||||||
;; rather than here and in --query-predicate.
|
;; 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)
|
(`(unless ,condition . ,clauses) `(unless ,(rec condition)
|
||||||
,@(mapcar #'rec clauses)))
|
,@(mapcar #'rec clauses)))
|
||||||
;; TODO: Combine (regexp) when appropriate (i.e. inside an OR, not an AND).
|
;; 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.
|
;; Quote children queries so the user doesn't have to.
|
||||||
(`(children ,query) `(children ',query))
|
(`(children ,query) `(children ',query))
|
||||||
(`(children) '(children (lambda () t)))
|
(`(children) '(children (lambda () t)))
|
||||||
|
|
@ -1495,7 +1499,8 @@ Builds the PEG expression using predicates defined in
|
||||||
(-sort (-on #'> #'length)))))
|
(-sort (-on #'> #'length)))))
|
||||||
`(cl-defun org-ql--plain-query (input &optional (boolean 'and))
|
`(cl-defun org-ql--plain-query (input &optional (boolean 'and))
|
||||||
"Return query parsed from plain query string INPUT.
|
"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)
|
(unless (s-blank-str? input)
|
||||||
(let* ((query (peg-parse-string
|
(let* ((query (peg-parse-string
|
||||||
((query (+ term
|
((query (+ term
|
||||||
|
|
@ -1506,7 +1511,7 @@ Multiple predicates are combined with BOOLEAN."
|
||||||
positive-term))
|
positive-term))
|
||||||
(positive-term (or (and predicate-with-args `(pred args -- (cons (intern pred) args)))
|
(positive-term (or (and predicate-with-args `(pred args -- (cons (intern pred) args)))
|
||||||
(and predicate-without-args `(pred -- (list (intern pred))))
|
(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))
|
(plain-string (or quoted-arg unquoted-arg))
|
||||||
(predicate-with-args (substring predicate) ":" args)
|
(predicate-with-args (substring predicate) ":" args)
|
||||||
(predicate-without-args (substring predicate) ":")
|
(predicate-without-args (substring predicate) ":")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue