tiempo-rs/README.md

202 lines
5.7 KiB
Markdown
Raw Normal View History

2021-06-27 23:20:37 -05:00
# Tiempo
2021-06-27 23:22:50 -05:00
A [timetrap](https://github.com/samg/timetrap/) compatible command line time
tracking application.
2021-06-27 23:20:37 -05:00
2021-07-03 16:44:31 -05:00
## Tutorial
2021-07-03 17:05:53 -05:00
First of all, you can abbreviate all commands to their first letter, so `t in`
and `t i` are equivalent.
2021-07-03 16:44:31 -05:00
### Managing entries
Register the start of an activity in the default timesheet with:
t in 'Doing some coding'
which sets the activity's start time to the current time. Later when you're done
use
t out
2021-07-03 17:05:53 -05:00
to mark it as finished. If you forgot to start the activity before you can do so
with:
2021-07-03 16:44:31 -05:00
t i --at '20 min ago'
the same applies for `t out`.
Edit an entry with
t edit [options]
where the options are
-i, --id <id:i> Alter entry with id <id> instead of the running entry
-s, --start <time:qs> Change the start time to <time>
-e, --end <time:qs> Change the end time to <time>
-a, --append Append to the current note instead of replacing it
the delimiter between appended notes is
configurable (see configure)
-m, --move <sheet> Move to another sheet
2021-07-03 17:02:34 -05:00
You can remove an entry with
t kill --id 123
or an entire timesheet with
t kill somesheet
check bellow to see how to get the ids.
2021-07-03 16:44:31 -05:00
### Displaying entries
2021-07-03 17:02:34 -05:00
At any point in time you can check your time spent in the current or other
timesheet with:
2021-07-03 16:44:31 -05:00
t display [options] [SHEET | all | full]
the available options are
-v, --ids Print database ids (for use with edit)
-s, --start <date:qs> Include entries that start on this date or later
-e, --end <date:qs> Include entries that start on this date or earlier
-f, --format <format> The output format. Valid built-in formats are
ical, csv, json, ids, factor, and text (default).
2021-07-03 17:04:19 -05:00
Check the docs on defining custom formats bellow.
2021-07-03 16:44:31 -05:00
-g, --grep <regexp> Include entries where the note matches this regexp
Some shortcuts available are:
2021-07-06 22:51:36 -05:00
`today` - Display entries that started today
2021-07-03 16:44:31 -05:00
t today [--ids] [--format FMT] [SHEET | all]
2021-07-06 22:51:36 -05:00
`yesterday` - Display entries that started yesterday
2021-07-03 16:44:31 -05:00
t yesterday [--ids] [--format FMT] [SHEET | all]
2021-07-03 16:48:51 -05:00
`week` - Entries of this week so far. The default start of the week is Monday
2021-07-03 16:44:31 -05:00
(configurable).
t week [--ids] [--end DATE] [--format FMT] [SHEET | all]
2021-07-06 22:51:36 -05:00
`month` - Entries of this month or a specified one.
2021-07-03 16:44:31 -05:00
t month [--ids] [--start MONTH] [--format FMT] [SHEET | all]
### Using different timesheets
You can organize your activities in different timesheets by first switching to
an existing one, then starting an activity:
t sheet somename
t in 'some activity'
which will also create the timesheet if it doesn't exist.
2021-07-03 17:02:34 -05:00
List all existing timesheets using
t list [all]
(defaults to not showing archive timesheets with names preceded by an
underscore)
2021-07-03 16:44:31 -05:00
### Advanced management
2021-07-03 17:02:34 -05:00
You can archive entries from a timesheet using:
t archive [--start DATE] [--end DATE] [SHEET]
which defaults to archiving all entries in the current sheet, or you can be more
specific using these options:
-s, --start <date:qs> Include entries that start on this date or later
-e, --end <date:qs> Include entries that start on this date or earlier
-g, --grep <regexp> Include entries where the note matches this regexp.
This subcommand will move the selected entries to a hidden timesheet named
`_[SHEET]` (the name of the timesheet preceded by an underscore).
2021-07-03 16:44:31 -05:00
2021-07-03 17:02:34 -05:00
It is possible to access directly the sqlite database using
2021-07-03 16:44:31 -05:00
2021-07-03 17:02:34 -05:00
t backend
2021-07-03 16:44:31 -05:00
## Specifying times
Some arguments accept a time as value, like `t in`'s `--at` or `t d --start`.
These are the accepted formats:
2021-07-03 16:44:31 -05:00
**Something similar to ISO format** will be parsed as a time in the computer's
timezone.
* `2021-01-13` a date
* `2019-05-03 11:13` a date with portions of a time
**ISO format with offset or UTC** will be parsed as a time in the specified
timezone. Use `Z` for `UTC` and an offset for everything else
* `2021-01-13Z`
* `2005-10-14 19:20:35+05:00`
**something that looks like an hour** will be parsed as a time in the current
day in the computer's timezone. Add `Z` or an offset to specify the timezone.
* `11:30`
* `23:50:45` (with seconds)
**some human times**, for now restricted to time ago:
* `an hour ago`
* `a minute ago`
* `50 min ago`
* `1h30m ago`
* `two hours thirty minutes ago`
## Why did you write this instead of improving timetrap?
* timetrap is hard to install, hard to keep updated (because of ruby). Once this
tools is finished you can get (or build) a binary, put it somewhere, and it
will just work forever in that machine.
* timetrap is slow (no way around it, because of ruby), some commands take up to
a second. Tiempo always feels snappy.
* needed major refactor to fix the timezone problem (in a language I'm not
proficient with). I was aware of this problem and designed tiempo to store
timestamps in UTC while at the same time being able to work with a database
made by timetrap without messing up.
### Other advantages
* Columns are always aligned
* Fixed some input inconsistencies
* cli interface is much better (ask -h for any command)
* man page (to do)
2021-07-20 22:08:52 -05:00
* end times are printed with +1d to indicate that the activity ended the next
day
2021-07-03 16:44:31 -05:00
## How to build
2021-06-27 23:20:37 -05:00
You need [rust](https://rustup.rs), then clone the repo and simply run
cargo test
to check that everything is working, and then
cargo build --release
2021-07-03 16:44:31 -05:00
to have a binary at `target/release/t` that you can then move to a
directory in your `PATH` or use it by its absoulte or relative paths.
2021-06-27 23:20:37 -05:00
Run
2021-07-03 16:44:31 -05:00
t --help
2021-06-27 23:20:37 -05:00
to see the options.
2021-07-21 19:07:05 -05:00
## Special Thanks
To [timetrap](https://github.com/samg/timetrap) for existing. It is the tool I
was looking for and whose design I took as reference, keeping compatibility when
possible.