timew(1)

NAME
timew - A command line time tracker.

SYNOPSIS
timew <command> [<arg> ...]

DESCRIPTION
Timewarrior is a command line time tracker. It allows you to easily track your time and generate summary reports. This is a reference, not a tutorial. If you are looking for a tutorial, check the online documentation here:
  https://taskwarrior.org/docs/timewarrior

SUBCOMMANDS
Timewarrior supports many commands. Alphabetically:

timew
    When run without arguments, the default command is run, which indicates whether there is any active tracking, and if so, shows a summary, then exits with a code 0. If there is no active time tracking, exit code is 1. See also 'get'.

timew cancel
    If there is an open interval, it is abandoned. See also 'stop'.

timew config [<name> [<value> | '']]
    Allows setting and removing configuration values, as an alternative to directly editing your ~/.timewarrior/timewarrior.cfg file. For example:
      $ timew config verbose yes
      $ timew config verbose ''
      $ timew config verbose The first command sets 'verbose' to 'yes'. The second sets it to a blank value which overrides the default value. The third example deletes the 'verbose' setting. When modifying configuration in this way, interactive confirmation will be sought. To override this confirmation, use the ':yes' hint, which means you intend to answer 'yes' to the confirmation questions:
      $ timew config verbose '' :yes If no arguments are provided, all configuration settings are shown:
      $ timew config
      verbose = yes
      ... See also 'hints', 'show'.

timew continue
    Resumes tracking the most recently closed interval. For example:
      $ timew track 9am - 10am tag1 tag2
      $ timew continue The 'continue' command creates a new interval, starting now, and using the tags 'tag1' and 'tag2'. This command is a convenient way to resume work without re-entering the tags. See also 'start', 'stop'.

timew day [<interval>] [<tag> ...]
    The day command shows a chart depicting a single day (today by default), with colored blocks drawn on a timeline. The chart summarizes the tracked and untracked time. Charts accept date ranges and tags for filtering, or shortcut hints:
      $ timew day monday - today
      $ timew day :week
      $ timew day :month The 'reports.day.range' configuration setting overrides the default date range. The default date range shown is ':day'. The ':blank' hint causes only the excluded time to be shown, with no tracked time. This can be used to see the exclusions. For more details, and precise times, use the 'summary' report. See also 'week', 'month', 'summary'.

timew delete @<id> [@<id> ...]
    Deletes an interval. Using the 'summary' command, and specifying the ':ids' hint shows interval IDs. Using the right ID, you can identify an interval to delete. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@2' as the interval you wish to delete:
      $ timew delete @2 See also 'cancel'.

timew diagnostics
    This command shows details about your version of Timewarrior, your platform, how it was built, compiler features, configuration, file access, extensions and more. The purpose of this command is to help diagnose configuration problems and provide supplemental information when reporting a problem. See also 'extensions'.

timew export [<interval>] [<tag> ...]
    Exports all the tracked time in JSON format. Supports filtering. For example:
      $ timew export from 2016-01-01 for 3wks tag1

timew extensions
    Displays the directory containing the extension programs and a table showing each extention and its status. See also 'diagnostics'.

timew gaps [<interval>] [<tag> ...]
    Displays a summary of time that is neither tracked nor excluded from tracking. The 'reports.gaps.range' configuration setting overrides the default date range. The ':blank' hint causes only the excluded time to be shown, with no tracked time. The default date range shown is ':day'. The ':blank' hint causes only the excluded time to be shown, with no tracked time. See also 'summary'.

timew get <DOM> [<DOM> ...]
    Validates the DOM reference, then obtains the value and displays it. For example:
      $ timew get dom.active
      1 It is an error to reference an interval or tag that does not exist. See also 'DOM'.

timew help [<command> | interval | hints | date | duration]
    The help command shows detailed descriptions and examples of commands, interval syntax, supported hints, date and duration formats and DOM references. For example:
      $ timew help
      $ timew help start
      $ timew help hints
      $ timew help interval
      $ timew help date
      $ timew help duration
      $ timew help dom

timew join @<id> @<id>
    Joins two intervals, by using the earlier of the two start times, and the later of the two end times, and the combined set of tags. Using the 'summary' command, and specifying the ':ids' hint shows interval IDs. Using the correct IDs, you can identify an intervals to join. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@1' and '@2' as the intervals you wish to join:
      $ timew join @1 @2 See also 'split', 'lengthen', 'shorten'.

timew lengthen @<id> [@<id> ...] <duration>
    The 'lengthen' command is used to defer the end date of a closed interval. Using the 'summary' command, and specifying the ':ids' hint shows interval IDs. Using the right ID, you can identify an interval to lengthen. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@2' as the interval you wish to lengthen:
      $ timew lengthen @2 10mins Note that you can lengthen multiple intervals,:
      $ timew lengthen @2 @10 @23 1hour See also 'summary', 'tag', 'untag', 'shorten'.

timew month [<interval>] [<tag> ...]
    The month command shows a chart depicting a single month (current month by default), with colored blocks drawn on a timeline. The chart summarizes the tracked and untracked time. Accepts date ranges and tags for filtering, or shortcut hints:
      $ timew month 1st - today
      $ timew month :week The 'reports.month.range' configuration setting overrides the default date range. The default date range shown is ':month'. The ':blank' hint causes only the excluded time to be shown, with no tracked time. For more details, and precise times, use the 'summary' report. See also 'day', 'week', 'summary'.

timew move @<id> <date>
    The 'move' command is used to reposition an interval at a new start time. Using the 'summary' command, and specifying the ':ids' hint shows interval IDs. Using the right ID, you can identify an interval to move. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@2' as the interval you wish to move:
      $ timew move @2 9am See also 'summary', 'tag', 'untag', 'lengthen', 'shorten'.

timew [report] <report> [<interval>] [<tag> ...]
    Runs an extension report, and supports filtering data. The 'report' command itself is optional, which means that these two commands are equivalent:
      $ timew report foo :week
      $ timew foo :week This does however assume there is a 'foo' extension installed.

timew shorten @<id> [@<id> ...] <duration>
    The 'shorten' command is used to advance the end date of a closed interval. Using the 'summary' command, and specifying the ':ids' hint shows interval IDs. Using the right ID, you can identify an interval to shorten. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@2' as the interval you wish to shorten:
      $ timew shorten @2 10mins Note that you can shorten multiple intervals,:
      $ timew shorten @2 @10 @23 1hour See also 'summary', 'tag', 'untag', 'lengthen'.

timew show
    Displays the effective configuration in hierarchical form. See also 'config'.

timew split @<id> [@<id> ...]
    Ѕplits an interval into two equally sized adjacent intervals, having the same tags. Using the 'summary' command, and specifying the ':ids' hint shows interval
     IDs. Using the right ID, you can identify an interval to split. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@2' as the interval you wish to split:
      $ timew split @2 See also 'join', 'lengthen', 'shorten'.

timew start [<date>] [<tag> ...]
    Begins tracking using the current time with any specified set of tags. If a tag contains multiple words, therefore containing spaces, use quotes to surround the whole tag. For example, this command specifies two tags ('weekend' and 'Home & Garden'), the second of which requires quotes.
      $ timew start weekend 'Home & Garden' An optional date may be specified to indicate the intended start of the tracked time:
      $ timew start 8am weekend 'Home & Garden' If there is a previous open interval, it will be closed at the given start time. Quotes are harmless if used unnecessarily. See also 'continue', 'stop', 'track'.

timew stop [<tag> ...]
    Stops tracking time. If tags are specified, then they are no longer tracked. If no tags are specified, all tracking stops. For example:
      $ timew start tag1 tag2
      ...
      $ timew stop tag1 Initially time is tracked for both 'tag1' and 'tag2', then 'tag1' tracking is stopped, leaving tag2 active. To stop all tracking:
      $ timew stop See also 'cancel', 'continue', 'start', 'track'.

timew summary [<interval>] [<tag> ...]
    Displays a report summarizing tracked and untracked time for the current day by default. Accepts date ranges and tags for filtering, or shortcut hints:
      $ timew summary monday - today
      $ timew summary :week
      $ timew summary :month The ':ids' hint adds an 'ID' column to the summary report output for interval modification. See also 'day', 'week', 'month', 'shorten', 'lengthen', 'tag', 'untag'.

timew tag @<id> [@<id> ...] <tag> [<tag> ...]
    The 'tag' command is used to add a tag to an interval. Using the 'summary' command, and specifying the ':ids' hint shows interval IDs. Using the right ID, you can identify an interval to tag. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@2' as the interval you wish to tag:
      $ timew tag @2 'New Tag' Note that you can tag multiple intervals, with multiple tags:
      $ timew tag @2 @10 @23 'Tag One' tag2 tag3 See also 'summary', 'shorten', 'lengthen', 'untag'.

timew tags
    Displays all the tags that have been used.

timew track <interval> [<tag> ...]
    The track command is used to add tracked time in the past. Perhaps you forgot to record time, or are just filling in old entries. For example:
      $ timew track :yesterday 'Training Course'
      $ timew track 9am - 11am 'Staff Meeting' Note that the track command expects a closed interval (start and end time), when recording. If a closed interval is not provided, the 'track' command behaves the same as the 'start' command.

timew untag @<id> [@<id> ...] <tag> [<tag> ...]
    The 'untag' command is used to remove a tag from an interval. Using the 'summary' command, and specifying the ':ids' hint shows interval IDs. Using the right ID, you can identify an interval to untag. For example, show the IDs:
      $ timew summary :week :ids Then having selected '@2' as the interval you wish to untag:
      $ timew untag @2 'Old Tag' Note that you can untag multiple intervals, with multiple tags:
      $ timew untag @2 @10 @23 'Old Tag' tag2 tag3 See also 'summary', 'shorten', 'lengthen', 'tag'.

timew week [<interval>] [<tag> ...]
    The week command shows a chart depicting a single week (current week by default), with colored blocks drawn on a timeline. The chart summarizes the tracked and untracked time. Accepts date ranges and tags for filtering, or shortcut hints:
      $ timew week
      $ timew week monday - today The 'reports.week.range' configuration setting overrides the default date range. The default date range shown is ':week'. The ':blank' hint causes only the excluded time to be shown, with no tracked time. For more details, and precise times, use the 'summary' report. See also 'day', 'month', 'summary'.

INTERVAL
An interval defines a block of time that is tracked. The syntax for specifying an interval is flexible, and may be one of:
  [from] <date>
  [from] <date> to/- <date>
  [from] <date> for <duration>
  <duration> before/after <date>
  <duration> ago
  [for] <duration> Examples are:
  from 9:00
  from 9am - 11am
  from 9:00:00 to 11:00
  from 9:00 for 2h
  2h after 9am
  2h before 11:00
  2h ago
  for 2h An interval is said to be 'closed' if there is both a start and end, and 'open' if there is no end date.

HINTS
Timewarrior supports hints, which are single-word command line features that start with a colon like this:
  :week Hints serve several purposes. This example is a shortcut for the date range that defines the current week. Other hints, such as:
  :quiet Are ways to control the behavior of Timewarrior, in this case eliminating all forms of feedback, for purposes of automation. The supported hints are:
  :quiet Turns off all feedback. For automation
  :debug Runs in debug mode, shows many runtime details
  :yes Overrides confirmation by answering 'yes' to the questions
  :color Force color on, even if not connected to a TTY
  :nocolor Force color off, even if connected to a TTY
  :blank Leaves tracked time out of a report
  :fill Expand time to fill surrounding available gap
  :adjust Automatically correct overlaps
  :ids Displays interval ID numbers in the summary report Range hints provide convenient shortcuts to date ranges:
  :yesterday The 24 hours of the previous day
  :day The 24 hours of the current day
  :week This week
  :month This month
  :quarter This quarter
  :year This year
  :lastweek Last week
  :lastmonth Last month
  :lastquarter Last quarter
  :lastyear Last year

DATES
Timewarrior supports the following date formats based on ISO-8601:
  <extended-date> [T <extended-time>] Extended date, optional extended time
  <date> [T <time>] Date, optional time
  <extended-time> Extended time
  <time> Time
  extended-date:
    YYYY-MM-DD Year, month, day
    YYYY-MM Year, month, 1st
    YYYY-DDD Year, Julian day 001-366
    YYYY-WwwD Year, week number, day number
    YYYY-Www Year, week number, day 1
  extended-time:
    hh:mm[:ss]Z Hours, minutes, optional seconds, UTC
    hh:mm[:ss][+/-hh:mm] Hours, minutes, optional seconds, TZ
  date:
    YYYYMMDD Year, month, day
    YYYYWww Year, week number, day number
    YYYYDDD Year, Julian day 001-366
  time:
    hhmm[ss]Z Hour, minutes, optional seconds, UTC
    hhmm[ss][+/-hh[mm]] Hour, minutes, optional seconds, TZ Examples:
  2016-06-09T08:12:00Z
  2016-06T08:12:00+01:00
  2016-06T08:12Z
  2016-161
  2016-W244
  2016-W24
  20160609T081200Z
  2016W24
  8:12:00Z
  0812-0500 In addition to the standard date formats, the following are supported:
  now Current date and time
  today Current date at 0:00:00
  sod, eod Current date at 0:00:00 and 23:59:59
  yesterday Yesterday at 0:00:00
  tomorrow Tomorrow at 0:00:00 (midnight tonight)
  <day-of-week> Previous named day at 0:00:00
  <month-of-year> Previous 1st of the month at 0:00:00
  hh:mm[:ss][am|a|pm|p] Short time format
  Nst, Nnd, Nrd, Nth Previous 1st, 2nd, 3rd ...
  <epoch> POSIX time
  later 2038-01-18T0:00:00 (Y2K38)
  someday 2038-01-18T0:00:00 (Y2K38)
  soy, eoy Previous start/end of year
  socy, eocy Start/end of current year
  soq, eoq Previous start/end of quarter
  socq, eocq Start/end of current quarter
  som, eom Previous start/end of month
  socm, eocm Start/end of current month
  sow, eow Previous start/end of week
  socw, eocw Start/end of current week
  soww, eoww Start/end of current work week (mon - fri)
  easter Easter Sunday
  eastermonday Easter Monday
  ascension Ascension
  pentecost Pentecost
  goodfriday Good Friday
  midsommar midnight, 1st Saturday after 20th June
  midsommarafton midnight, 1st Friday after 19th June
  juhannus midnight, 1st Friday after 19th June Examples:
  8am
  24th
  monday
  august See also 'duration', 'hints'.

DURATIONS
Timewarrior supports the following duration formats based on ISO-8601:
  'P' [nn 'Y'] [nn 'M'] [nn 'D'] ['T' [nn 'H'] [nn 'M'] [nn 'S']]
  PnnW Examples:
  P1Y 1 year
  P1.5M 1.5 months
  PT1S 1 second
  PT4.5H 4.5 hours
  PT4H30M 4.5 hours
  P600D 600 days
  P3W 3 weeks
  P1Y1DT1H1M1S 1 year and 25 hours, 61 seconds (imprecise term)
  Note that the year and month terms are imprecise, being defined as 365d and
  30d respectively. For precision use the other terms. In addition to the standard duration formats, the following are supported:
  n[.n]<unit> Where the <unit> is one of:
  annual
  biannual
  bimonthly
  biweekly
  biyearly
  daily
  days, day, d
  fortnight
  hours, hour, hrs, hr, h
  minutes, minute, mins, min
  monthly, months, month, mnths, mths, mth, mos, mo, m
  quarterly, quarters, quarter, qrtrs, qtr, q
  semiannual
  sennight
  seconds, second, secs, sec, s
  weekdays
  weekly, weeks, week, wks, wk, w
  yearly, years, year, yrs, yr, y Examples:
  1hour 60 minutes
  1.5h 90 minutes
  3mo 3 months
  10d 10 days
  Note that the year, quarter and month terms are imprecise, being defined as
  365d, 91d and 30d respectively. For precision use the other terms.

DOM
Supported DOM references are:
  dom.tag.count Count of all tags
  dom.tag.1 Nth tag used
  dom.active '1' if there is active tracking, otherwise '0'
  dom.active.tag.count Count of active tags
  dom.active.tag.1 Active Nth tag
  dom.active.start Active start timestamp (ISO Extended local date)
  dom.active.duration Active elapsed (ISO Period)
  dom.active.json Active interval as JSON
  dom.tracked.count Count of tracked intervals
  dom.tracked.1.tag.count Count of active tags
  dom.tracked.1.tag.1 Tracked Nth, Nth tag
  dom.tracked.1.start Tracked Nth, start time
  dom.tracked.1.end Tracked Nth, end time, blank if closed
  dom.tracked.1.duration Tracked Nth, elapsed
  dom.tracked.1.json Tracked Nth, interval as JSON
  dom.rc.<name> Configuration setting

CONFIGURATION FILE AND OVERRIDE OPTIONS
Timewarrior stores its configuration in a file in the user's home directory: ~/.timewarrior/timewarrior.cfg. This file contains a mix of rules and configuration settings. The values 'true', '1', 'y', 'yes' and 'on' are all equivalent and enable a setting. Any other value means disable the setting. Default values may be overridden by timewarrior.cfg values, which may in turn be overridden on the command line using:
  rc.<name>=<value> For example, to turn off verbose mode:
  rc.verbose=0 Note that hints can also do this (:quiet).

confirmation = yes
    Determines whether harmful operations require interactive confirmation. May be overridden by the ':yes' hint. Default value is 'yes'.

debug = off
    Determines whether diagnostic debugging information is shown. Useful for troubleshooting, but not for general use. Default value is 'off'.

debug.indicator = >>
    The debug output prefix string. Default value is '>>'.

reports.<type>.cell = 15
    Determines how many minutes are represented by a single character cell, for the charts. A value of '15' means that an hour is represented by 60/15, or 4 character cells. Suitable values are the divisors of 60 (30, 20, 15, 12, ...). Default value is '15'. Type is one of 'month', 'week', 'day'.

reports.<type>.day = yes
    Determines whether the current day of the month is shown at left margin. Default value is 'yes'. Type is one of 'month', 'week', 'day'.

reports.<type>.holidays = yes
    Determines whether relevant holidays are shown beneath the report. Default value is 'yes'. Type is one of 'month', 'week', 'day', 'summary'.

reports.<type>.hours = all
    Determines how the <type> report shows all the hours in a day ('all'), or is limited to only hours where data is tracked ('auto'). Default value is 'all'. Type is one of 'month', 'week', 'day'.

reports.<type>.lines = 1
    Determines how many lines are used to render each day on the <type> report. Default value is '1'. Type is one of 'month', 'week', 'day'.

reports.<type>.month = yes
    Determines whether the current month is shown at left margin. Default value is 'yes'. Type is one of 'month', 'week', 'day'.

reports.<type>.range = <range hint>
    For reports that show a range of data, this setting will override the default value. The value should be a range hint, see 'hints' Type is one of 'gaps', 'day', 'week', 'month'.

reports.<type>.spacing = 1
    Specifies how many spaces are inserted between the hours in the <type> report exclusions. A value of '0' yields a more compact report. Default value is '1'. Type is one of 'month', 'week', 'day'.

reports.<type>.axis = internal
    The value 'internal' puts the hour markers inside the exclusion blocks. Default is <no value>.

reports.<type>.summary = on
    Determines whether the hours summary is shown. Default value is 'on'. Type is one of 'month', 'week', 'day'.

reports.<type>.totals = on
    Determines whether the time totals are shown for each day on the report. Default value is 'on'. Type is one of 'month', 'week', 'day'.

reports.<type>.week = yes
    Determines whether the current week number is shown at left margin. Default value is 'yes'. Type is one of 'month', 'week', 'day'.

reports.<type>.weekday = yes
    Determines whether the current weekday is shown at left margin. Default value is 'yes'. Type is one of 'month', 'week', 'day'.

verbose = yes
    Determines whether Timewarrior generates feedback. May be overridden by the ':quiet' hint. Default value is 'yes'.

MORE EXAMPLES
For examples please see the online documentation starting at:
    <http://taskwarrior.org/???>
Note that the online documentation can be more detailed and more current than this man page.

FILES

~/.timewarrior/timewarrior.cfg
    User configuration file.

~/.timewarrior/data/YYYY-MM.data
    Time tracking data files.

CREDITS & COPYRIGHTS
Copyright (C) 2015 - 2016 P. Beckingham, F. Hernandez. Timewarrior is distributed under the MIT license. See http://www.opensource.org/licenses/mit-license.php for more information.

SEE ALSO
For more information regarding Timewarrior, see the following:

The official site at
    <http://taskwarrior.org>

The official code repository at
    <https://git.tasktools.org/scm/tm/timew.git>

You can contact the project by emailing
    <support@taskwarrior.org>

REPORTING BUGS

Bugs in Timewarrior may be reported to the issue-tracker at
    <https://bug.tasktools.org/>