org-ql
org-ql copied to clipboard
Add a order-by function for org-clock (my solution in here)
OS/platform
Ubuntu
Emacs version and provenance
28.1
Org version and provenance
9.6.17
org-ql package version and provenance
20240113.647 melpa
Description
Hello, thanks again for the package!
I just wanted to query headings by the most recent I worked on. I automatically start org-clock when I navigate to a heading, so I wanted to use that as recency sorting. Since your package is so configurable, I made my own comparing function to do the job:
(defun my/org-ql-compare-org-clocks (a b)
"Compare Org heading A with B using their last clock out time."
(flet ((get-clockout-time (h)
(with-current-buffer (marker-buffer (org-element-property :org-marker h))
(save-excursion
(goto-char (marker-position (org-element-property :org-marker h)))
(org-clock-get-last-clock-out-time)))) )
(ignore-errors (time-less-p (get-clockout-time b)
(get-clockout-time a)))))
I thought that maybe other users of org-clock would find it useful, so I wanted to share it here. Feel free to add it to the package, if you think is general enough.
Etc.
No response
Hi,
Thanks for sharing that. A couple of thoughts:
- You could use
org-with-point-atto save a few lines of code. - When
org-qlgains support for matching timestamp ranges, this would likely become unnecessary (i.e. sorting by the latest timestamp in an entry would probably be sufficient, even if not identical in all cases). - It might be more performant to bind the results of
get-clockout-timeand check(and time-a time-b (time-less-p time-b time-a))than to useignore-errorsaround it, but I haven't tested it.