This commit is contained in:
yantar92 2021-10-04 07:19:11 +00:00 committed by GitHub
commit 159dcfa485
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -242,6 +242,15 @@ automatically from the query."
"Insert content for org-ql dynamic block at point according to PARAMS.
Valid parameters include:
:scope The scope to consider for the Org QL query. This can
be one of the following:
`buffer' the current buffer
`org-agenda-files' all agenda files
`org-directory' all org files
`(\"path\" ...)' list of buffer names or file paths
`all' all agenda files, and org-mode buffers
:query An Org QL query expression in either sexp or string
form.
@ -271,13 +280,18 @@ Valid parameters include:
For example, an org-ql dynamic block header could look like:
#+BEGIN: org-ql :query (todo \"UNDERWAY\") :columns (priority todo heading) :sort (priority date) :ts-format \"%Y-%m-%d %H:%M\""
(-let* (((&plist :query :columns :sort :ts-format :take) params)
(-let* (((&plist :scope :query :columns :sort :ts-format :take) params)
(query (cl-etypecase query
(string (org-ql--query-string-to-sexp query))
(list ;; SAFETY: Query is in sexp form: ask for confirmation, because it could contain arbitrary code.
(org-ql--ask-unsafe-query query)
query)))
(columns (or columns '(heading todo (priority "P"))))
(scope (cond ((and (listp scope) (seq-every-p #'stringp scope)) scope)
((string-equal scope "org-agenda-files") (org-agenda-files))
((or (not scope) (string-equal scope "buffer")) (current-buffer))
((string-equal scope "org-directory") (org-ql-search-directories-files))
(t (user-error "Unknown scope '%s'" scope))))
;; MAYBE: Custom column functions.
(format-fns
;; NOTE: Backquoting this alist prevents the lambdas from seeing
@ -285,9 +299,19 @@ For example, an org-ql dynamic block header could look like:
(list (cons 'todo (lambda (element)
(org-element-property :todo-keyword element)))
(cons 'heading (lambda (element)
(org-make-link-string (org-element-property :raw-value element)
(cond
((and org-id-link-to-org-use-id
(org-element-property :ID element))
(org-make-link-string (format "id:%s" (org-element-property :ID element))
(org-element-property :raw-value element)))
((org-element-property :file element)
(org-make-link-string (format "file:%s::*%s"
(org-element-property :file element)
(org-element-property :raw-value element))
(org-element-property :raw-value element)))
(t (org-make-link-string (org-element-property :raw-value element)
(org-link-display-format
(org-element-property :raw-value element)))))
(org-element-property :raw-value element)))))))
(cons 'priority (lambda (element)
(--when-let (org-element-property :priority element)
(char-to-string it))))
@ -302,9 +326,9 @@ For example, an org-ql dynamic block header could look like:
(ts-format ts-format (ts-parse-org-element it)))))
(cons 'property (lambda (element property)
(org-element-property (intern (concat ":" (upcase property))) element)))))
(elements (org-ql-query :from (current-buffer)
(elements (org-ql-query :from scope
:where query
:select '(org-element-headline-parser (line-end-position))
:select '(org-element-put-property (org-element-headline-parser (line-end-position)) :file (buffer-file-name))
:order-by sort)))
(when take
(setf elements (cl-etypecase take