Compare commits
1 commit
master
...
wip/dynami
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5c42b40f0 |
1 changed files with 36 additions and 13 deletions
|
|
@ -302,40 +302,56 @@ this (must be a single line in the Org buffer):
|
||||||
#+BEGIN: org-ql :query (todo \"UNDERWAY\")
|
#+BEGIN: org-ql :query (todo \"UNDERWAY\")
|
||||||
:columns (priority todo heading) :sort (priority date)
|
:columns (priority todo heading) :sort (priority date)
|
||||||
:ts-format \"%Y-%m-%d %H:%M\""
|
:ts-format \"%Y-%m-%d %H:%M\""
|
||||||
(-let* (((&plist :query :columns :sort :ts-format :take) params)
|
(-let* (((&plist :query :columns :sort :ts-format :take :from) params)
|
||||||
|
(from (pcase-exhaustive from
|
||||||
|
(`nil (current-buffer))
|
||||||
|
((pred listp) from)
|
||||||
|
((pred stringp) from)
|
||||||
|
('org-directory (org-ql-search-directories-files))))
|
||||||
(query (cl-etypecase query
|
(query (cl-etypecase query
|
||||||
(string (org-ql--query-string-to-sexp 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.
|
(list ;; SAFETY: Query is in sexp form: ask for confirmation, because it could contain arbitrary code.
|
||||||
(org-ql--ask-unsafe-query query)
|
(org-ql--ask-unsafe-query query)
|
||||||
query)))
|
query)))
|
||||||
(columns (or columns '(heading todo (priority "P"))))
|
(columns (or columns '(heading todo (priority "P") planning)))
|
||||||
;; MAYBE: Custom column functions.
|
;; MAYBE: Custom column functions.
|
||||||
(format-fns
|
(format-fns
|
||||||
;; NOTE: Backquoting this alist prevents the lambdas from seeing
|
;; NOTE: Backquoting this alist prevents the lambdas from seeing
|
||||||
;; the variable `ts-format', so we use `list' and `cons'.
|
;; the variable `ts-format', so we use `list' and `cons'.
|
||||||
(list (cons 'todo (lambda (element)
|
(list (cons 'todo (lambda (element)
|
||||||
(org-element-property :todo-keyword element)))
|
(org-element-property :todo-keyword element)))
|
||||||
(cons 'heading (lambda (element)
|
(cons 'heading (cl-function
|
||||||
(let ((normalized-heading
|
(lambda (element &key (width 100))
|
||||||
(org-ql-search--link-heading-search-string (org-element-property :raw-value element))))
|
(let ((normalized-heading
|
||||||
(org-ql-search--org-make-link-string normalized-heading (org-link-display-format normalized-heading)))))
|
(org-ql-search--link-heading-search-string (org-element-property :raw-value element))))
|
||||||
|
(org-ql-search--org-make-link-string normalized-heading (s-truncate width (org-link-display-format normalized-heading)))))))
|
||||||
(cons 'priority (lambda (element)
|
(cons 'priority (lambda (element)
|
||||||
(--when-let (org-element-property :priority element)
|
(--when-let (org-element-property :priority element)
|
||||||
(char-to-string it))))
|
(char-to-string it))))
|
||||||
(cons 'deadline (lambda (element)
|
(cons 'deadline (lambda (element)
|
||||||
(--when-let (org-element-property :deadline element)
|
(--when-let (org-element-property :deadline element)
|
||||||
(ts-format ts-format (ts-parse-org-element it)))))
|
(org-ql-view--format-relative-date (floor (/ (ts-difference (ts-now) (ts-parse-org-element it)) 86400)))
|
||||||
|
;; (ts-format ts-format (ts-parse-org-element it))
|
||||||
|
)))
|
||||||
(cons 'scheduled (lambda (element)
|
(cons 'scheduled (lambda (element)
|
||||||
(--when-let (org-element-property :scheduled element)
|
(--when-let (org-element-property :scheduled element)
|
||||||
(ts-format ts-format (ts-parse-org-element it)))))
|
(org-ql-view--format-relative-date (floor (/ (ts-difference (ts-now) (ts-parse-org-element it)) 86400)))
|
||||||
|
;; (ts-format ts-format (ts-parse-org-element it))
|
||||||
|
)))
|
||||||
|
(cons 'planning (lambda (element)
|
||||||
|
(--when-let (or (org-element-property :deadline element)
|
||||||
|
(org-element-property :scheduled element))
|
||||||
|
(org-ql-view--format-relative-date (floor (/ (ts-difference (ts-now) (ts-parse-org-element it)) 86400)))
|
||||||
|
;; (ts-format ts-format (ts-parse-org-element it))
|
||||||
|
)))
|
||||||
(cons 'closed (lambda (element)
|
(cons 'closed (lambda (element)
|
||||||
(--when-let (org-element-property :closed element)
|
(--when-let (org-element-property :closed element)
|
||||||
(ts-format ts-format (ts-parse-org-element it)))))
|
(ts-format ts-format (ts-parse-org-element it)))))
|
||||||
(cons 'property (lambda (element property)
|
(cons 'property (lambda (element property)
|
||||||
(org-element-property (intern (concat ":" (upcase property))) element)))))
|
(org-element-property (intern (concat ":" (upcase property))) element)))))
|
||||||
(elements (org-ql-query :from (current-buffer)
|
(elements (org-ql-query :select 'element-with-markers
|
||||||
|
:from from
|
||||||
:where query
|
:where query
|
||||||
:select '(org-element-headline-parser (line-end-position))
|
|
||||||
:order-by sort)))
|
:order-by sort)))
|
||||||
(when take
|
(when take
|
||||||
(setf elements (cl-etypecase take
|
(setf elements (cl-etypecase take
|
||||||
|
|
@ -348,6 +364,8 @@ this (must be a single line in the Org buffer):
|
||||||
(funcall (alist-get column format-fns) element))
|
(funcall (alist-get column format-fns) element))
|
||||||
(`((,column . ,args) ,_header)
|
(`((,column . ,args) ,_header)
|
||||||
(apply (alist-get column format-fns) element args))
|
(apply (alist-get column format-fns) element args))
|
||||||
|
(`(,column . ,(and args (guard (keywordp (car args)))))
|
||||||
|
(apply (alist-get column format-fns) element args))
|
||||||
(`(,column ,_header)
|
(`(,column ,_header)
|
||||||
(funcall (alist-get column format-fns) element)))
|
(funcall (alist-get column format-fns) element)))
|
||||||
""))
|
""))
|
||||||
|
|
@ -355,13 +373,18 @@ this (must be a single line in the Org buffer):
|
||||||
;; Table header
|
;; Table header
|
||||||
(insert "| " (string-join (--map (pcase it
|
(insert "| " (string-join (--map (pcase it
|
||||||
((pred symbolp) (capitalize (symbol-name it)))
|
((pred symbolp) (capitalize (symbol-name it)))
|
||||||
(`(,_ ,name) name))
|
(`(,_ ,name) name)
|
||||||
|
(`(,name . ,_) (capitalize (symbol-name name))))
|
||||||
columns)
|
columns)
|
||||||
" | ")
|
" | ")
|
||||||
" |" "\n")
|
" |" "\n")
|
||||||
(insert "|- \n") ; Separator hline
|
(insert "|- \n") ; Separator hline
|
||||||
(dolist (element elements)
|
(let ((org-id-link-to-org-use-id 'use-existing))
|
||||||
(insert "| " (format-element element) " |" "\n"))
|
(dolist (element elements)
|
||||||
|
(let ((link (org-with-point-at (or (org-element-property :org-hd-marker element)
|
||||||
|
(org-element-property :org-marker element))
|
||||||
|
(org-store-link t))))
|
||||||
|
(insert "| " (format-element element) " |" "\n"))))
|
||||||
(delete-char -1)
|
(delete-char -1)
|
||||||
(org-table-align))))
|
(org-table-align))))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue