#+TITLE: org-ql examples * Contents :PROPERTIES: :TOC: this :END: - [[#show-entries-with-recent-timestamps][Show entries with recent timestamps]] - [[#stuck-projects-block-agenda][Stuck projects block agenda]] - [[#listing-bills-coming-due][Listing bills coming due]] * Show entries with recent timestamps #+BEGIN_SRC elisp (cl-defun org-ql-view-recent-items (days &optional (type 'ts)) "Show items from previous DAYS days with timestamps of TYPE. TYPE may be `ts', `ts-active', `ts-inactive', `clocked', `closed', `deadline', `planning', or `scheduled'." (interactive (list (read-number "Days: ") (->> '(ts ts-active ts-inactive clocked closed deadline planning scheduled) (completing-read "Timestamp type: ") intern))) (org-ql-search (org-agenda-files) `(,type ,days) :title "Recent items" :sort '(date priority todo) :groups '((:todo "DONE") (:name "Log" :category "log" :tag "log") (:auto-parent t) (:auto-todo t)))) ;; Show entries with any timestamp from last 7 days: (org-ql-view-recent-items 7) ;; Show entries clocked in last 30 days: (org-ql-view-recent-items 30 'clocked) ;; Show entries closed in last 30 days: (org-ql-view-recent-items 30 'closed) #+END_SRC * Stuck projects block agenda Reddit user =emptymatrix= [[https://www.reddit.com/r/emacs/comments/cnrt2d/orgqlblock_integrates_orgql_into_org_agenda/ewtqez8/][shared]] this example of replacing a traditional =org-stuck-projects= view like: #+BEGIN_SRC elisp (setq org-stuck-projects '("+@project/-DONE" ("NEXT") nil "SCHEDULED:")) #+END_SRC With this =org-ql-block= agenda view, like: #+BEGIN_SRC elisp (setq org-agenda-custom-commands '(("s" "Stuck Projects" ((org-ql-block '(and (tags "@project") (not (done)) (not (descendants (todo "NEXT"))) (not (descendants (scheduled))))))))) #+END_SRC * Listing bills coming due This uses the example in the readme file, but maps across the elements returned by ~org-ql~ to present a simple list of titles and deadlines. #+BEGIN_SRC elisp (--map (list (org-element-property :raw-value it) (org-timestamp-format (org-element-property :deadline it) "%c")) (org-ql (org-agenda-files) (and (not (done)) (tags "bills") (deadline <=)) :sort deadline)) ;;=> (("Electric bill" "Thu 23 Aug 2018 12:00:00 AM CDT") ;; ("Rent" "Sat 01 Sep 2018 08:00:00 PM CDT")) #+END_SRC This could also be put in a script, which could use desktop notifications to remind of bills coming due: [[examples/org-bills-due.el][org-bills-due.el]]. * COMMENT Code :noexport: :PROPERTIES: :TOC: ignore :END: ** File-local variables # Local Variables: # eval: (require 'org-make-toc) # before-save-hook: org-make-toc # End: