avatar Kisaragi Hiu


apps emacs

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 to canrylog) 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.

Task view
Main view

Command line version


Currently the tracking file location is hard coded, as I’ve only been working on the current version for less than 3 hours.

Commands implemented:

  • canrylog switch-to <task>
  • canrylog current