This package provides functions to define time budgets per week and display clocked time in a fancy table.
(setq org-time-budgets '((:title "Business" :match "+business" :budget "30:00" :blocks (workday week))
(:title "Sideprojects" :match "+personal+project" :budget "14:00" :blocks (day week))
(:title "Practice Music" :match "+music+practice" :budget "2:55" :blocks (nil week))
(:title "Exercise" :match "+exercise" :budget "5:15" :blocks (day))
(:title "Language" :match "+lang" :budget "5:15" :blocks (day week))))
Running the function org-time-budgets-table
will return something like:
Business [|||||.........] 02:47 / 06:00 [||............] 05:46 / 30:00
Sideprojects [||||..........] 00:36 / 02:00 [|.............] 01:10 / 14:00
Practice Music [|||||.........] 01:04 / 02:55
Exercise [..............] 00:00 / 00:45
Language [|||||||||||...] 00:36 / 00:45 [|||...........] 01:10 / 05:15
With the :blocks
parameter you can define the time blocks to show in
the agenda. It takes a list with any number of entries. Valid entries
are:
week
to show the total clocked time this week.day
to show todays budget based on a 7 day week.workday
to show todays budget based on a 5 day week.nil
to display nothing for this block in the budgets table. Use this to align your different budgets.
The default value is (day week)
.
You can add your org-time-budgets
to the top of your org-agenda
by
doing something like:
(setq org-agenda-custom-commands
'(("a" "Agenda"
((agenda "" ((org-agenda-sorting-strategy '(habit-down time-up priority-down category-keep user-defined-up))))
(org-time-budgets-in-agenda-maybe)))))
The budgets table can be toggled using V in the agenda.
With the variable org-time-budgets-hide-on-weekend
you can control
whether or not workday
blocks are also displayed on weekends.
If you set the budget to zero only the clocked time is shown in the budgets table. You can use this as a simplified clock table. For example to track time spent on distractions.
I don't want this thing to die. And I would like to learn cool stuff! :-)
- Improve performance I would love to learn how to make this package faster! Currently I am using default org-mode functions for gathering clocked times. Maybe there is a better and more performant way.
- Add block types
Currently time budgets can be per
'day
,'workday
and'week
, maybe something else is cool too.
GNUv3!