2 ===========================
4 trk is a simple time tracker with support for sub-tasks/activities.
5 It is implemented using perl, and should work with no additional
6 modules using perl >= 5.8 on a Unix/Linux based system.
8 trk was inspired by several similar simple console based trackers, like:
9 * ti (http://ti.sharats.me/)
10 * timed (http://adeel.github.io/timed/),
11 * timetrap (https://github.com/samg/timetrap)
12 * wtime (http://wtime.sourceforge.net/)
15 ===========================
17 # Start tracking time usage:
18 trk start Big coding-project
20 # Track a sub-task, e.g. separate tracking for fixes:
21 trk task Bugfix BUG#3247
23 # Return from sub-task, keep tracking the main project/activity:
26 # Check what is currently going on
32 # Get a tracking report
36 ===========================
38 With default execution of trk, data will be stored in, and read from
39 the directory $HOME/.trk This path may be overridden by setting the
40 environment variable TRK_DIR, e.g. "env TRK_DIR=/foo/bar trk ..."
42 trk start <project> (if tracking project: stop-and-start, aka switch)
43 trk start at <YYYY-MM-DD hh:mm> <project>
44 trk on <project> (alias for start)
46 Starts tracking of a project. If 'at' is given, start-time
47 is overridden to the given time.
49 If a project was already tracking, that project will be stopped
50 at the startingpoint of the new tracking, i.e. implicitly switching.
53 trk stop at <YYYY-MM-DD hh:mm>
54 trk off (alias for stop)
56 Stops tracking of project, with implicit stopping of any
60 trk projects [verbose]
62 Lists all known project names. If a project/track is currently
63 active, thata project will be indicated with a chevron (>).
64 Adding verbose to the command will display ID hashes along
65 with the project/track names.
68 trk task at <YYYY-MM-DD hh:mm> <task>
70 trk activity at <YYYY-MM-DD hh:mm> <task>
72 Starts tracking of an activity within the project; think task
73 or sub-projects. Activities will be tallied within the project
74 like the "main project", while time counts to both activity
77 Only one activity can be ongoing at the same time,
78 so starting a new activity while one is ongoing stops the current
79 and starts the new one.
82 trk main at <YYYY-MM-DD hh:mm>
84 Stops tracking ongoing activity, and keeps tracking project.
88 Displays current project, charged customer (if any),
89 start time for this session, time spent on this session,
90 time spent on project total,
91 current activity with start time and time spent this session.
94 trk report terse <project>
95 trk report standard <project>
96 trk report verbose <project>
97 tkr report details <project>
99 Gives a tracking report for the given project.
100 Using "report" with no options provide a standard report for
101 the last (or current) project tracked as a shortcut.
102 Note: reports include currently active session. There is currently
103 no plan to add complexity by adding an option to filter that out..
105 Terse reports include:
107 * charged customer (not implemented)
108 * total time accumulated
110 Standard reports include:
112 * charged customer (not implemented)
113 * session start and end datetimes and time elapsed on session
114 * total time accumulated
116 Verbose reports include:
119 * session start and end datetimes and time elapsed on session
120 * activity start and end datetimes and time elapesd on activity
121 * time accumulated per named task
122 * note texts w/datetime (not implemented)
123 * total time accumulated
126 Detailed reports include:
128 * charged customer (not implemented)
129 * session start and end datetimes and time elapsed on session
130 * activity start and end datetimes and time elapesd on activity
131 * pauses with start, end, comment and elapsed time (not implemented)
132 * note texts w/datetime (not implemented)
133 * time accumulated per named task
134 * total time accumulated
136 The following are not implemented, but planned (ordered by priority:
141 Lists all known task/activity names for currently active project/track
143 trk note Comment will be timestamped
145 Adds a comment/note to the tracking. The note will not
146 affect tracked time, but will be included in detailed reports.
148 trk charge <customer>
150 Will set a customer name as meta-information. Setting the
151 charged customer will replace any previously set value.
153 trk pause <optional description>
156 Adds an activity to the project that is not counted on
157 the project. Pauses will be listed on detailed reports,
158 but not on terse, standard and verbose reports.
161 ===========================
163 The directory used for storing tracking data will be $HOME/.trk unless
164 overridden with the environment variable TRK_DIR. In this description,
165 $TRK_DIR will represent the active tracking directory.
167 Inside $TRK_DIR each track/project will be stored in separate
168 sub-directories, with a random generated ID as directory name.
169 The ID of the currently active project/track is stored (single-line)
170 in the file $TRK_DIR/current, and the last activated track (current,
171 if one is tracking) is stored in $TRK_DIR/last.
173 Meta-information, e.g. Title of the current track is stored in the
174 file $TRK_DIR/<id-hash>/info as a colon-separated key-value list
175 (currently only title is used).
177 Time-tracking data is stored as $TRK_DIR/<id-hash>/tracking, as a
178 very simple format, with start-and-stop times line-by-line:
180 [YYYY-MM-DD hh:mm] to [YYYY-MM-DD hh:mm]
182 If a task is currently tracking, the line will be non-ended (i.e. no newline)
183 with only the start-time in brackets.
185 Sub-tasks are stored using the same princible as above, with the only
186 difference that they are contained within the given track's directory.
187 So, the ID of the last and current tasks will be stored in
188 $TRK_DIR/<id-hash>/current and $TRK_DIR/<id-hash>/last, the activity
189 it self in $TRK_DIR/<id-hash>/<id-hash>, with meta-info and tracking in
190 $TRK_DIR/<id-hash>/<id-hash>/info and $TRK_DIR/<id-hash>/<id-hash>/tracking.
192 An example of the structure:
219 ===========================
221 Copyright Jon Langseth
223 Permission is hereby granted, free of charge, to any person obtaining a copy of
224 this software and associated documentation files (the "Software"), to deal in
225 the Software without restriction, including without limitation the rights to
226 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
227 of the Software, and to permit persons to whom the Software is furnished to do
228 so, subject to the following conditions:
230 The above copyright notice and this permission notice shall be included in all
231 copies or substantial portions of the Software.
233 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
234 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
235 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
236 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
237 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
238 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE