My own time tracker.
The core idea is that we simply track a list of events stating that from a moment onward, some task is currently active.
I want it to be available in many platforms, but so far there is only an Emacs version.
Tracking file
The core tracking file looks like this:
2019-01-15T22:40:18+0900 Entertainment:Gaming:osu!
2019-01-15T23:04:56+0900 Development:Canrylog:Emacs
2019-01-15T23:13:41+0800 Notes:Scheduling
2019-01-15T23:28:19+0800 SocialMedia:Youtube
2019-01-16T00:24:53+0800 Sleep
Each line represents a “task switching event”. Each line starts with a timestamp, a separator (two spaces), and a task name.
The task name can be broken down into a hierarchy, using a colon (:
) to separate paths.
This tells us that the currently active task is Sleep
, while SocialMedia:Youtube
was active between 2019-01-15T23:28:19+0800 and 2019-01-16T00:24:53+0800. All timestamps are in ISO 8601, sorted chronologically (taking the UTC offset into account).
Emacs version
My usual workflow is:
- Use
canrylog-switch-task
to switch to something I’m doing or working on - Switch to the task “Downtime” to signify that I’ve clocked out
- Use
canrylog-describe-task
to see a summary on a task - Use
canrylog-view-main
(aliased tocanrylog
) to see my current task and how much time it’s been active for.
I’ve also built a task list view, although that’s something that isn’t really fleshed out just yet.
Command line version
https://gitlab.com/canrylog/canrylog-cli
I revamped the whole thing again on 2024-03-25. Current features:
canrylog switch
pops up a list of tasks to select, then switches to itcanrylog config
to configure time tracking repocanrylog task duration
to check the duration of a task