Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/unhammer/org-mru-clock
⏲️ Effortlessly clock in/out of org-mode tasks, with completion and persistent history
https://github.com/unhammer/org-mru-clock
emacs helm ivy org-mode pomodoro productivity time-management
Last synced: about 2 months ago
JSON representation
⏲️ Effortlessly clock in/out of org-mode tasks, with completion and persistent history
- Host: GitHub
- URL: https://github.com/unhammer/org-mru-clock
- Owner: unhammer
- Created: 2017-03-14T20:12:34.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-05-22T08:26:33.000Z (8 months ago)
- Last Synced: 2024-11-17T04:05:44.620Z (2 months ago)
- Topics: emacs, helm, ivy, org-mode, pomodoro, productivity, time-management
- Language: Emacs Lisp
- Homepage: https://melpa.org/#/org-mru-clock
- Size: 321 KB
- Stars: 104
- Watchers: 6
- Forks: 6
- Open Issues: 6
-
Metadata Files:
- Readme: README.org
Awesome Lists containing this project
README
#+TITLE: org-mru-clock
[[https://melpa.org/#/org-mru-clock][https://melpa.org/packages/org-mru-clock-badge.svg]]
[[https://stable.melpa.org/#/org-mru-clock][https://stable.melpa.org/packages/org-mru-clock-badge.svg]]Do you often clock in to many different little tasks? Are you annoyed
that you can't just clock in to one of your most recent tasks after
restarting Emacs?#+ATTR_HTML: :alt org-mru-clock demo
[[file:org-mru-clock.gif][file:org-mru-clock.gif]]The function =org-mru-clock-in= from this package will pre-fill your
clock history with clocks from your agenda files (and other open org
files) so you can clock in to your most recent clocks regardless of
whether you just started Emacs or have had it running for
decades. Tasks are sorted by recency, and uses completing-read for
quick selection. This makes it a nice replacement for
=org-clock-in-last=.It uses =completing-read-function= (overridable with
=org-mru-clock-completing-read=) on =org-mru-clock-in= to make
clocking in faster. If you set that to =ivy-completing-read=, you can
hit =M-o g= to visit to the task heading instead of clocking in (there
are also Embark actions if you prefer that – see [[*Manual, loading on startup:][Usage]]).The list is sorted to keep the most recently clocked entry first,
although if the entry at point is an org-mode heading (in an org file
or the agenda), then that will be pushed to the top of the list (you
can turn off this behaviour by setting
=org-mru-clock-include-entry-at-point= to =nil=).You can also use =org-mru-clock-select-recent-task= as a replacement
for =org-clock-select-task=, again with pre-filled history.You may also capture new tasks on the fly if your search text didn't
match anything – try =C-h v org-mru-clock-capture-if-no-match RET=.* Installation
** MELPA
If you use [[https://melpa.org/][MELPA]], you can just do =M-x list-packages=, find
=org-mru-clock= in the list and hit =i x=.** Manual
Just put =org-mru-clock.el= somewhere in =load-path=.* Usage
** Manual, loading on startup:
To use, require and bind whatever keys you prefer to the
interactive functions:#+BEGIN_SRC emacs-lisp
(require 'org-mru-clock)
(global-set-key (kbd "C-c C-x i") #'org-mru-clock-in)
(global-set-key (kbd "C-c C-x C-j") #'org-mru-clock-select-recent-task)
#+END_SRCMaybe trade some initial slowness for more tasks cached:
#+BEGIN_SRC emacs-lisp
(setq org-mru-clock-how-many 100)
#+END_SRCBut don't set it higher than the actual number of tasks; then
it'll always try (and fail) to fill up the history cache!If you want to use ivy for =org-mru-clock-in=:
#+BEGIN_SRC emacs-lisp
(setq org-mru-clock-completing-read #'ivy-completing-read)
#+END_SRCIf you use the [[https://github.com/oantolin/embark/][embark]] package, you can add actions with:
#+BEGIN_SRC emacs-lisp
(add-hook 'minibuffer-setup-hook #'org-mru-clock-embark-minibuffer-hook)
#+END_SRC** With use-package
If you prefer =use-package=, the above settings would be:
#+BEGIN_SRC emacs-lisp
(use-package org-mru-clock
:ensure t
:bind* (("C-c C-x i" . org-mru-clock-in)
("C-c C-x C-j" . org-mru-clock-select-recent-task))
:config
(setq org-mru-clock-how-many 100
org-mru-clock-completing-read #'ivy-completing-read)
(add-hook 'minibuffer-setup-hook #'org-mru-clock-embark-minibuffer-hook))
#+END_SRC** Other org-mru-clock settings
If you do
#+BEGIN_SRC emacs-lisp
(setq org-mru-clock-keep-formatting t)
#+END_SRC
then entries will be shown in their org-mode faces, instead of
whatever face your =org-mru-clock-completing-read= function uses by
default.If you do
#+BEGIN_SRC emacs-lisp
(setq org-mru-clock-include-entry-at-point nil)
#+END_SRC
then the entry at point will /not/ be prepended to the start of the
list.By default, all open =org-mode= files are searched for recent clocks,
but you can change this to e.g. only the =org-agenda-files= with
#+BEGIN_SRC emacs-lisp
(setq org-mru-clock-files #'org-agenda-files)
#+END_SRC
or some other function of your own devising.You can also exclude clocks by setting =org-mru-clock-predicate= to
e.g. =org-entry-is-todo-p= (which will exclude DONE tasks) or
=org-mru-clock-exclude-done-and-archived= (which will also exclude
those tagged with =org-archive-tag=).** Related settings from org-clock
You may also be interested in these general org-clock settings
([[http://orgmode.org/manual/Clocking-work-time.html][documented]] in the Org-mode manual):#+BEGIN_SRC emacs-lisp
(setq org-clock-persist t)
(org-clock-persistence-insinuate)
#+END_SRC