* *Convert* - change the currently clocked-in project to a different task. Tags and key-values may be re-queried. Clock-in hook functions will be run again with the new task as the argument.
* *Rename* a project (updating all records)
* *Delete* a project (erasing all records)
* *Hide* a project (don't show it in any Chronometrist-* buffer, effectively deleting it non-destructively)
3. Hook enhancement - can we supply the whole plist (including tags and key-values) to the task-start hooks, so users can have even smarter hook functions?
4. [ ] key-values and tags should work regardless of what hook they're called from, to give users the option to modify behaviour (does clock in start after you've finished adding details, or before?)
3. [ ] *create custom variable to allow a quick exit from key-value entry* - if the user provides blank input on the first key and there are no existing key-values, quit the prompt loop and run -kv-reject automatically.
* [ ] and if the user enters valid key-values and quits the key prompt with a blank input, auto-accept
* [ ] enh - this will allow using initial-input in value prompts
4. [ ] create text button to add key-values to last entry (whether clocked in or out)
5. [X] insert value as string if it contains spaces and isn't a list
* Sometimes you want single-word values to be converted to a string, too. Maybe check for capital letters too?
* Preserve type in history?
* Might create inconsistency in prompts? We don't want to expect Lisp knowledge from users.
* Ask user to define types for keys, and handle the syntax for them behind the scenes?
6. [ ] when reading values, add quit keybinding (consistent with output of ~chronometrist-kv-completion-quit-key~) by passing MAP to ~read-from-minibuffer~
* some way to require the user to enter a non-empty value (e.g. like the 'require-match' argument to completing-read, except read-from-minibuffer doesn't have that...)
1. don't suggest nil when asking for first project on first run
2. when starting a project with time of "-" (i.e. not worked on today until now), immediately set time to 0 instead of waiting for the first timer refresh
3. Mouse commands should work only on buttons.
4. Button actions should accept prefix arguments and behave exactly like their keyboard counterparts.
5. mouse-3 should clock-out without asking for reason.
6. Some way to ask for the reason just before starting a project. Even when clocking out, the reason is asked /before/ clocking out, which adds time to the project.
1. Support multiple files, so we read and process lesser data when one of them changes.
2. Make file writing async
3. Don't refresh from file when clocking in.
4. Only write to the file when Emacs is idle or being killed, and store data in memory (in the events hash table) in the meantime
5. What if commands both write to the file /and/ add to the hash table, so we don't have to re-read the file and re-populate the table for commands? The expensive reading+parsing could be avoided for commands, and only take place for the user changing the file.
* jonasw - store length and hash of previous file, see if the new file has the same hash until old-length bytes.
* Rather than storing and hashing the full length, we could do it until (before) the last s-expression (or last N s-expressions?). That way, we know if the last expression (or last N expressions) have changed.
* Or even the first expression of the current date. That way, we just re-read the events for today. Because chronometrist-events uses dates as keys, it's easy to work on the basis of dates.
4. See if it is possible to store buttons in a variable, so *-print-non-tabular functions can be made shorter and less imperative. (see ~make-text-button~)
5. Merge all event-querying functions so that they always operate on an entire hash table (so no 'day' variants),
- I don't know of a way to know the project being clocked into using timeclock hooks.
- With v0.2.0 Chronometrist also has a before-project-stop-functions, which runs before the project is stopped, and can control whether the project actually is stopped.