Add/remove hooks automatically

Not sure if this will work - if it does, it's less configuration for
the user.
This commit is contained in:
contrapunctus 2020-09-07 16:14:37 +05:30
parent 8a46e220b2
commit df295591bf
2 changed files with 17 additions and 13 deletions

View File

@ -27,11 +27,6 @@ In the above example, we aim to spend 60 minutes on Programming, 30 minutes on e
Note - this variable may be subsumed into `chronometrist`, at an undefinite point in the future.
### Set up hooks
```elisp
(add-to-list 'chronometrist-after-in-functions 'chronometrist-goal-run-alert-timers)
(add-to-list 'chronometrist-after-out-functions 'chronometrist-goal-stop-alert-timers)
```
And you're all set! Run `chronometrist` again and marvel at your goal times displayed in the buffer.
With the default configuration, when you start tracking time, you will be notified when you

View File

@ -223,6 +223,22 @@ ENTRY must be a valid element in the list specified by
FORMAT should be a vector (see `tabulated-list-format')."
(vconcat format `[("Target" 3 t)]))
(defun chronometrist-goal-setup ()
"Add `chronometrist-goal' functions to `chronometrist' hooks."
(add-to-list 'chronometrist-entry-transformers #'chronometrist-goal-entry-transformer)
(add-to-list 'chronometrist-list-format-transformers #'chronometrist-goal-list-format-transformer)
(add-hook 'chronometrist-after-in-functions #'chronometrist-goal-run-alert-timers)
(add-hook 'chronometrist-after-out-functions #'chronometrist-goal-stop-alert-timers))
(defun chronometrist-goal-teardown ()
"Remove `chronometrist-goal' functions from `chronometrist' hooks."
(setq chronometrist-entry-transformers
(remove #'chronometrist-goal-entry-transformer chronometrist-entry-transformers)
chronometrist-list-format-transformers
(remove #'chronometrist-goal-list-format-transformer chronometrist-list-format-transformers))
(remove-hook 'chronometrist-after-in-functions #'chronometrist-goal-run-alert-timers)
(remove-hook 'chronometrist-after-out-functions #'chronometrist-goal-stop-alert-timers))
(define-minor-mode chronometrist-goal-minor-mode
"Toggle `chronometrist-goal-minor-mode'.
With a prefix argument ARG, enable
@ -231,14 +247,7 @@ it otherwise. If called from Lisp, enable the mode if ARG is
omitted or nil."
nil nil nil
;; when being enabled/disabled, `chronometrist-goal-minor-mode' will already be t/nil here
(if chronometrist-goal-minor-mode
(progn
(add-to-list 'chronometrist-entry-transformers #'chronometrist-goal-entry-transformer)
(add-to-list 'chronometrist-list-format-transformers #'chronometrist-goal-list-format-transformer))
(setq chronometrist-entry-transformers
(remove #'chronometrist-goal-entry-transformer chronometrist-entry-transformers)
chronometrist-list-format-transformers
(remove #'chronometrist-goal-list-format-transformer chronometrist-list-format-transformers))))
(if chronometrist-goal-minor-mode (chronometrist-goal-setup) (chronometrist-goal-teardown)))
(provide 'chronometrist-goal)