diff --git a/manual.md b/manual.md index a70aaba..cde5473 100644 --- a/manual.md +++ b/manual.md @@ -1,8 +1,8 @@ # Table of Contents -1. [Benefits](#org83c3199) -2. [Limitations](#org265ad3f) +1. [Benefits](#org62a1b0c) +2. [Limitations](#orgb285c2a) 3. [Comparisons](#comparisons) 1. [timeclock.el](#timeclock.el) 2. [Org time tracking](#org-time-tracking) @@ -13,21 +13,22 @@ 1. [chronometrist](#chronometrist-1) 2. [chronometrist-report](#chronometrist-report) 3. [chronometrist-statistics](#chronometrist-statistics) - 4. [chronometrist-details](#org0ec335b) - 5. [common commands](#org170f814) + 4. [chronometrist-details](#org6b29da1) + 5. [common commands](#orgd5eb20a) 6. [Time goals/targets](#time-goalstargets) 6. [How-to](#customization) 1. [How to display a prompt when exiting with an active task](#prompt-when-exiting-emacs) 2. [How to load the program using literate-elisp](#how-to-literate-elisp) 3. [How to attach tags to time intervals](#how-to-tags) 4. [How to attach key-values to time intervals](#how-to-key-value-pairs) - 5. [How to skip running hooks/attaching tags and key values](#org7fd0f91) + 5. [How to skip running hooks/attaching tags and key values](#org695d442) 6. [How to open certain files when you start a task](#open-certain-files-when-you-start-a-task) 7. [How to warn yourself about uncommitted changes](#uncommitted-changes) 8. [How to display the current time interval in the activity indicator](#current-time-interval-in-activity-indicator) -7. [Explanation](#orga5e2e2e) + 9. [How to back up your Chronometrist data](#org4eb8bd6) +7. [Explanation](#orgebe297d) 1. [Literate Program](#explanation-literate-program) -8. [User's reference](#org2c64088) +8. [User's reference](#orga29a28b) 9. [Contributions and contact](#contributions-and-contact) 10. [License](#license) 11. [Thanks](#thanks) @@ -41,7 +42,7 @@ A time tracker in Emacs with a nice interface Largely modelled after the Android application, [A Time Tracker](https://github.com/netmackan/ATimeTracker) - + # Benefits @@ -53,7 +54,7 @@ Largely modelled after the Android application, [A Time Tracker](https://github. 6. Fancy graphs with chronometrist-sparkline extension - + # Limitations @@ -158,12 +159,12 @@ Run `M-x chronometrist-statistics` (or `chronometrist` with a prefix argument of Press `b` to look at past time ranges, and `f` for future ones. - + ## chronometrist-details - + ## common commands @@ -233,7 +234,7 @@ Evaluate or add to your init.el the following - To exit the prompt, press the key it indicates for quitting - you can then edit the resulting key-values by hand if required. Press `C-c C-c` to accept the key-values, or `C-c C-k` to cancel. - + ## How to skip running hooks/attaching tags and key values @@ -271,10 +272,10 @@ Another one, prompting the user if they have uncommitted changes in a git reposi Return nil (and run `magit-status') if the user answers no." (cond ((not (magit-anything-modified-p)) t) - ((yes-or-no-p - (format "You have uncommitted changes in %S. Really clock out? " - default-directory)) t) - (t (magit-status) nil))) + ((yes-or-no-p + (format "You have uncommitted changes in %S. Really clock out? " + default-directory)) t) + (t (magit-status) nil))) (add-hook 'chronometrist-before-out-functions 'my-commit-prompt) @@ -285,7 +286,7 @@ Another one, prompting the user if they have uncommitted changes in a git reposi (defun my-activity-indicator () (thread-last (plist-put (chronometrist-last) - :stop (chronometrist-format-time-iso8601)) + :stop (chronometrist-format-time-iso8601)) list chronometrist-events-to-durations (-reduce #'+) @@ -295,7 +296,31 @@ Another one, prompting the user if they have uncommitted changes in a git reposi (setq chronometrist-activity-indicator #'my-activity-indicator) - + + +## How to back up your Chronometrist data + +I suggest backing up Chronometrist data on each save. Here's how you can do that. + +1. Add the following to your init. + + (setq backup-by-copying t + kept-new-versions 10 + kept-old-versions 10 + version-control t) + + (defun my-force-backup () + (setq buffer-backed-up nil)) +2. Open your Chronometrist file and add the function to `before-save-hook`. + + M-x chronometrist-open-log + M-x add-file-local-variable-prop-line RET eval RET (add-hook 'before-save-hook #'my-force-backup nil t) RET +3. Optionally, configure `backup-directory-alist` to set a specific directory for the backups. + +Adapted from this [StackOverflow answer](https://stackoverflow.com/questions/6916529/how-can-i-make-emacs-backup-every-time-i-save). + + + # Explanation @@ -311,7 +336,7 @@ The Org file can also be loaded directly using the [literate-elisp](https://gi `chronometrist.org` is also included in MELPA installs, although not used directly by default, since doing so would interfere with automatic generation of autoloads. - + # User's reference diff --git a/manual.org b/manual.org index 85ef385..77720f0 100644 --- a/manual.org +++ b/manual.org @@ -258,6 +258,26 @@ Return nil (and run `magit-status') if the user answers no." (setq chronometrist-activity-indicator #'my-activity-indicator) #+END_SRC +** How to back up your Chronometrist data +I suggest backing up Chronometrist data on each save. Here's how you can do that. + +1. Add the following to your init. + #+BEGIN_SRC emacs-lisp +(setq backup-by-copying t + kept-new-versions 10 + kept-old-versions 10 + version-control t) + +(defun my-force-backup () + (setq buffer-backed-up nil)) + #+END_SRC +2. Open your Chronometrist file and add the function to =before-save-hook=. + : M-x chronometrist-open-log + : M-x add-file-local-variable-prop-line RET eval RET (add-hook 'before-save-hook #'my-force-backup nil t) RET +3. Optionally, configure =backup-directory-alist= to set a specific directory for the backups. + +Adapted from this [[https://stackoverflow.com/questions/6916529/how-can-i-make-emacs-backup-every-time-i-save][StackOverflow answer]]. + * Explanation ** Literate Program :PROPERTIES: