You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
1.9 KiB

# tacc.el
## A pomidoro timer for emacs
tacc implements a slightly modified pomidoro timer with a focus on customizability. Sometimes all you need is a timer to make the pomidoro method work. By default this is just that, a 30 minute timer with a 5 minute break and the option to tag you work session. It can also be easily modified to add or subtract time from each successive work and break cycle and with slightly more effort can be made to process and record your timer stats.
## Customization
In `M-x customize` both the timer's appearence and behavior can be customized in `Applications` under the group `Tacc`. These can also all be set in your `init.el`, just be aware that `customize` renders a lisp symbol name like `tacc-work-seconds` as "Tacc Work Seconds"
The root customization dictates the timer length and can be used to set the increment in seconds. As a small bonus to readability, if you set these values in your `init.el` a function `(m:s 1 30)` can for example be used instead of `90`.
Under the `tacc-behavior` group there are a number of hook and function customizations. These are best to set in your `init.el`, since you can define your functions next to where you `(add-hook)`.
## Serialization and Record Keeping
If you want to keep a record of your work and break times you can! The catch is that you need to code it yourself.
Here's a simple example. It doesn't do much, but hopefully it's instructive.
```lisp
(tacc-register-serialization "json" json-serialize)
(add-hooks 'tacc-json-output-functions (lambda (m) (message "%s" m)))
```
The first call generates a binding for a set of output functions, in this case named `tacc-json-output-functions`. All functions in that hook will be fed the result of calling `json-serialize` on a list of time records.
Time records are laid out in an alist format as follows:
```lisp
(:ts . <unix timestamp>)
(:end . <unix timestamp>)
(:state . <'break | 'work>)
(:tag . <an assigned tag name>)
```