emacs: org-clock recent

This commit is contained in:
Pavel Korytov 2024-02-03 14:18:20 +03:00
parent 0e05ab65a4
commit 4549a1c804
2 changed files with 50 additions and 0 deletions

View file

@ -3572,6 +3572,30 @@ With ARG, repeats or can move backward if negative."
(add-hook 'org-clock-out-hook #'my/org-clock-set-total-clocked)
(add-hook 'org-clock-cancel-hook #'my/org-clock-set-total-clocked)
(defun my/org-clock-recent ()
(interactive)
(let* ((entries (org-ql-query
:select #'element-with-markers
:from (org-agenda-files)
:where '(clocked :from -1)))
(entries-data (mapcar (lambda (e)
(cons (org-element-property :raw-value e) e))
entries)))
(unless entries
(user-error "No recently clocked entries!"))
entries-data
(let* ((entry (alist-get (completing-read "Entry: " entries-data)
entries-data nil nil #'equal))
(marker (org-element-property :org-marker entry)))
(pop-to-buffer-same-window (marker-buffer marker))
(goto-char marker))))
(with-eval-after-load 'org
(my-leader-def
:keymaps 'org-mode-map
:infix "SPC"
"C" #'my/org-clock-recent))
(use-package org-super-agenda
:straight t
:after (org)

View file

@ -4979,6 +4979,32 @@ And use the function to set the total clocked time.
(add-hook 'org-clock-cancel-hook #'my/org-clock-set-total-clocked)
#+end_src
***** Switch between recently clocked items
#+begin_src emacs-lisp
(defun my/org-clock-recent ()
(interactive)
(let* ((entries (org-ql-query
:select #'element-with-markers
:from (org-agenda-files)
:where '(clocked :from -1)))
(entries-data (mapcar (lambda (e)
(cons (org-element-property :raw-value e) e))
entries)))
(unless entries
(user-error "No recently clocked entries!"))
entries-data
(let* ((entry (alist-get (completing-read "Entry: " entries-data)
entries-data nil nil #'equal))
(marker (org-element-property :org-marker entry)))
(pop-to-buffer-same-window (marker-buffer marker))
(goto-char marker))))
(with-eval-after-load 'org
(my-leader-def
:keymaps 'org-mode-map
:infix "SPC"
"C" #'my/org-clock-recent))
#+end_src
**** org-super-agenda
[[https://github.com/alphapapa/org-super-agenda][org-super-agenda]] is alphapapa's extension to group items in org-agenda. I don't use it instead of the standard agenda, but =org-ql= uses it for some of its views.