
- add `now` as example for a date - reformat: One line per sentence (more or less) - refine behaviour of command `stop` in case of active time tracking - add definition for command `annotate`
6.8 KiB
RFC: TimeWarrior command definition
TimeWarrior can be used like this:
timew [--version | --help | <command> [<args>]]
Arguments
command
is one of the commands listed below.args
is an optional list of command arguments.
Behavior
timew
prints the current time tracking status and exits.timew --version
prints version information and exits.timew --help
prints general help, references other help, and exits.timew --help
is converted internally totimew help
.timew <command> [<args>]
calls the specifiedcommand
with the given argumentsargs
.
Command line elements
A basic view on the command line:
timew <words>
Word
A word
is the basic element of the command line.
Words
are separated by whitespace (except when quoted).
Command
A command
is first element on the command line.
The CLI identifies the command, and categorizes all words.
further interpretation of those words is delegated to teh command.
The commands parse the command arguments to execute their functionality.
Subcommand
Analog to commands
, subcommands
are the first element of the command arguments.
Subcommands
are used to specify command behavior.
For example
timew tag list
timew tag remove @3 foo bar
(PB: Probably need better examples)
Date
A date
specifies a certain point in time.
Examples are
1pm
10:33
2017-04-11T17:12:23
now
...
Duration
A duration
can be specified by
one day
,two weeks
today
,yesterday
...
Range
A range
is a time interval.
It can be specified as the difference between two dates
or as a combination of a date
and a duration
. E.g.
09:45 - 11:15
two hours before 10:45
which means8:45 - 10:45
30mins until 2017-03-23T13:13
which means2017-03-23T12:43 - 2017-03-23T13:13
one hour ago
which means-1hr - now
Tag
A tag
is a lexical token that is at least one non-whitespace character, and could be a quoted phrase.
It is treated as one word.
It is used to label an interval
.
Filter
Commands can use filters
to limit the list of intervals they operate on.
Filters can be
tags
ranges
Hints
Hints are words that begin wіth the :
character, for example :quiet
.
A hint is a request that behavior be modified in a specific way.
The example of the :quiet
hint requests that no extraneous output is generated, making the command more useful for scripting.
There is a supported set of hints (timew help hints
), and commands will respond to hints that make sense in context, and ignore those that do not.
It is not an error to specify unrelated (but supported) hints. Commands may implicitly behave as though a hint were specified. For this reason hints are so named, they are not necessarily obeyed, not necessarily relevant.
Commands
Sorting the command line zoo.
Basic commands
Basic commands provide the minimal TimewWarrior functionality. All arguments are optional.
start
stop
cancel
Modifying commands
These commands modify existing intervals.
They require an id
to know on which interval(s) to operate on.
tag
delete
shorten
/lengthen
/resize
move
fill
split
join
Listing commands
Listing and reporting on the database...
export
summary
chart
(day
,week
,month
)gaps
tags
report
Shortcut commands
Shortcut commands combine functionality of basic commands.
track
(combines start & stop)continue
(combines tags & start)
Administrative commands
These are not typical user-level commands, but provide support and diagnostic features.
help
show
config
get
diagnostics
extensions
Command definitions
Command start
Synopsis
timew start [<date>] [<tags>]
Arguments
date
is an optional argument. If no date is given, the current date is used.tags
is an optional list of one or more tags.
Behavior
- If there is no active time tracking,
start
creates a new open interval at the given date and with the given tags. - In case of active time tracking,
start
closes the current open interval at the given date and creates a new open interval only if the given tag list differs from the tag list of the current open interval.
Command stop
Synopsis
timew stop [<date>] [<tags>]
Arguments
date
is an optional argument. If no date is given, the current date is used.tags
is an optional list of one or more tags.
Behavior
- If there is no active time tracking
stop
has no effect. - In case of active time tracking,
stop
closes the current open interval at the specifieddate
. - If a tag list is given, a new open interval is created with all tags which are part of the current interval's tag list but not part of the given tag list. Tags which are part of the given tag list but not part of the current interval's tag list are ignored.
Synopsis
Command cancel
timew cancel
Arguments
cancel
has no arguments.
Behavior
- If there is no active time tracking
cancel
has no effect. - In case of active time tracking,
cancel
deletes the current open interval.
Command track
Synopsis
timew track <range> [<tags>]
Arguments
range
is a date range:<start-date> - <stop-date>
.tags
is an optional list of one or more tags.
Behavior
timew track <start-date> - <stop-date> <tags>
acts as a shortcut for
timew start <start-date> <tags>
timew stop <stop-date>
and thus behaves the same way.
Command continue
Synopsis
timew continue [<id>]
Arguments
id
is an optional argument. If no id is given,@1
is used.
Behavior
timew continue <id>
acts as a shortcut for
timew start <tag-list-of-interval-with-given-id>
and thus behaves the same way.
Command tag
Synopsis
timew tag [remove] [<id>] <tags>
timew tag list [<ids>]
Arguments
remove
is an optional subcommand. If given, the specified tags are removed and not added.id
is an optional argument. If no id is given,@1
is used.tags
is a list of one or more tags.list
is an optional subcommand.ids
is an optional list of one or more ids.
Behavior
- Tags which are not in the tag list of the specified interval are ignored.
- If no id is given,
tag list
lists all available tags.
Command annotate
Synopsis
timew annotate [<id>] [:append] <annotation>
Arguments
id
is an optional argument. If no id is given,@1
is used.annotation
is everything after theid
.
Behavior
This command can be used to add additional information to intervals.
- There can be only one or no annotation for an interval.
- A new annotation overwrites an existing one unless the
:append
hint was given. - To delete an annotation overwrite it with an empty string.
- Annotations can be displayed using the
summary
command.