This repository has been archived on 2022-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
chronometrist/TODO.org

65 lines
5.4 KiB
Org Mode
Raw Normal View History

2019-08-09 02:05:47 +00:00
1. [-] Move time operations into a chronometrist-time file
2. -report - highlight the current day
2019-08-04 19:20:13 +00:00
2019-08-09 18:06:48 +00:00
* Chronometrist
** Bugs
1. Clocking-in/out doesn't result in updated display, sometimes (2019-09-12)
** Features
1. Create chronometrist-unused-projects-list + chronometrist-projects-list.
2. New commands
* *Kill/discard* (bind to 'k') - which will delete the interval currently being recorded.
- Most conservative option - it will only operate on the project at point, and will only kill for a clocked-in project.
- Somewhat less conservative option - it will operate on the currently clocked-in project, no matter where point is.
- It _should_ ask for confirmation.
- Alternatively, or as a complement - an *undo command*, which will undo your last action (clock in or clock out).
* *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?
* That would mean ensuring that -kv-read runs before other hooks.
* Actually, it should be trivial to access the last expression in the file, so maybe this is unnecessary.
2019-09-12 20:57:38 +00:00
4. Key-values
2019-09-14 19:49:39 +00:00
* [X] generate history hash table from chronometrist-file.
* [X] generate value history hash table from chronometrist-file
* [X] change "press X to quit" in prompt to suggest keys for ido, helm, and ivy
2019-09-14 19:49:39 +00:00
* [ ] create variable to allow quick quitting (i.e. reject) from key-value entry, if the user has provided blank input on the first key and there are no existing key-values.
* [ ] create text button to add key-values to last entry (whether clocked in or out)
* [ ] insert value as string if it contains spaces and isn't a list
* [ ] when reading values, add quit keybinding (consistent with output of ~chronometrist-kv-completion-quit-key~) by passing MAP to ~read-from-minibuffer~
2019-09-14 19:49:39 +00:00
* [ ] fix value history problem in prompt ("user-error: Beginning of history; no preceding item"/"user-error: End of history; no default available")
2019-09-12 20:57:38 +00:00
5. Tags
2019-09-14 19:49:39 +00:00
* [ ] generate history from chronometrist-file
2019-09-13 19:35:54 +00:00
* [ ] narrow it down to the :name
* [ ] write tags to last expression
2019-08-13 10:00:23 +00:00
** UX
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.
2019-09-08 17:24:13 +00:00
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.
2019-09-09 20:37:28 +00:00
7. Allow calling chronometrist-in/out from anywhere-within-Emacs (a la timeclock) as well as from the chronometrist buffer.
2019-09-08 17:24:13 +00:00
*** Optimization
2019-09-14 19:50:02 +00:00
* ~chronometrist~ takes close to a second to start (as of 2019-09-14; chronometrist.exp is 11,329 lines with 2318 expressions). Can we speed that up?
2019-08-09 18:06:48 +00:00
2019-09-14 19:50:02 +00:00
**** Ideas to make -refresh-file faster
2019-09-08 17:24:13 +00:00
* Support multiple files, so we read and process lesser data when one of them changes.
* Make file writing async
* Don't refresh from file when clocking in.
* 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
* 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.
2019-09-14 19:50:02 +00:00
* 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.
2019-08-30 17:09:30 +00:00
** Code
1. use variables instead of hardcoded numbers to determine spacing
2. refactor repetitive calls to (format "%04d-%02d-%02d" (elt seq a) (elt seq b) (elt seq c))
3. Use buttercup instead of ert
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),
6. [ ] Use ~substitute-command-keys~ instead of ~chronometrist-format-keybinds~
7. [ ] See if using iteration constructs (especially ~loop~) can lead to nicer code than nested maps
+6. Timeclock already _has_ hooks! :| Why do we re-implement them?+
2019-08-30 17:09:30 +00:00
- 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.