Add a order-by function for org-clock (my solution in here)
ag91 opened this issue · 1 comments
ag91 commented
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
alphapapa commented
Hi,
Thanks for sharing that. A couple of thoughts:
- You could use
org-with-point-at
to save a few lines of code. - When
org-ql
gains 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-time
and check(and time-a time-b (time-less-p time-b time-a))
than to useignore-errors
around it, but I haven't tested it.