== doing - A CLI for a What Was I Doing system
Doing uses a TaskPaper-like formatting to keep a plain text
record of what you've been doing, complete with tag-based time tracking. The
command line tool allows you to add entries, annotate with tags and notes, and
view your entries with myriad options, with a focus on a "natural" language syntax.
v2.0.23
=== Global Options
=== --config_file arg
Use a specific configuration file. Deprecated, set $DOING_CONFIG instead.
[Default Value] /Users/ttscoff/.doingrc
=== -f|--doing_file arg
Specify a different doing_file
[Default Value] None
=== --[no-]color
Colored output
=== --debug
Verbose output
=== --[no-]default
Answer yes/no menus with default option
=== --help
Show this message
=== --[no-]notes
Output notes if included in the template
=== -p|--[no-]pager
Use a pager when output is longer than screen
=== -q|--quiet
Silence info messages
=== --stdout
Send results report to STDOUT instead of STDERR
=== --version
Display the program version
=== -x|--noauto
Exclude auto tags and default tags
=== Commands
==== Command: add_section SECTION_NAME
Add a new section to the "doing" file
==== Command: again|resume
Repeat last entry as new entry
===== Options
===== --bool BOOLEAN
Boolean used to combine multiple tags
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== --in SECTION_NAME
Add new entry to section (default: same section as repeated entry)
[Default Value] None
===== -n|--note TEXT
Note
[Default Value] None
===== -s|--section NAME
Get last entry from a specific section
[Default Value] All
===== --search QUERY
Repeat last entry matching search. Surround with
slashes for regex (e.g. "/query/"), start with a single quote for exact match ("'query").
[Default Value] None
===== --tag TAG
Repeat last entry matching tags. Combine multiple tags with a comma.
[Default Value] None
===== -e|--editor
Edit duplicated entry with vim before adding
===== -i|--interactive
Select item to resume from a menu of matching entries
===== --not
Resume items that *don't* match search/tag filters
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: archive|move SECTION_OR_TAG
Move entries between sections
Argument can be a section name to move all entries from a section,
or start with an "@" to move entries matching a tag.
Default with no argument moves items from the "Currently" section to Archive.
===== Options
===== --before DATE_STRING
Archive entries older than date
(Flexible date format, e.g. 1/27/2021, 2020-07-19, or Monday 3pm)
[Default Value] None
===== --bool BOOLEAN
Tag boolean (AND|OR|NOT)
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -k|--keep X
How many items to keep (ignored if archiving by tag or search)
[Default Value] None
[Must Match] (?-mix:^\d+$)
===== --search QUERY
Search filter
[Default Value] None
===== -t|--to SECTION_NAME
Move entries to
[Default Value] Archive
===== --tag TAG
Tag filter, combine multiple tags with a comma. Added for compatibility with other commands.
[Default Value] None
===== --[no-]label
Label moved items with @from(SECTION_NAME)
===== --not
Show items that *don't* match search string
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: autotag
Autotag last entry or filtered entries
===== Options
===== --bool BOOLEAN
Boolean (AND|OR|NOT) with which to combine multiple tag filters
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== -c|--count COUNT
How many recent entries to autotag (0 for all)
[Default Value] 1
[Must Match] (?-mix:^\d+$)
===== -s|--section SECTION_NAME
Section
[Default Value] All
===== --search QUERY
Autotag entries matching search filter,
surround with slashes for regex (e.g. "/query.*/"),
start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Autotag the last X entries containing TAG.
Separate multiple tags with comma (--tag=tag1,tag2), combine with --bool
[Default Value] None
===== --force
Don't ask permission to autotag all entries when count is 0
===== -i|--interactive
Select item(s) to tag from a menu of matching entries
===== -u|--unfinished
Autotag last entry (or entries) not marked @done
==== Command: cancel COUNT
End last X entries with no time tracked
Adds @done tag without datestamp so no elapsed time is recorded. Alias for `doing finish --no-date`.
===== Options
===== --bool BOOLEAN
Boolean (AND|OR|NOT) with which to combine multiple tag filters
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -s|--section NAME
Section
[Default Value] None
===== --search QUERY
Cancel the last X entries matching search filter, surround with slashes for regex (e.g. "/query.*/"), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Cancel the last X entries containing TAG. Separate multiple tags with comma (--tag=tag1,tag2)
[Default Value] None
===== -a|--archive
Archive entries
===== -i|--interactive
Select item(s) to cancel from a menu of matching entries
===== --not
Finish items that *don't* match search/tag filters
===== -u|--unfinished
Cancel last entry (or entries) not already marked @done
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: choose
Select a section to display from a menu
==== Command: colors
List available color variables for configuration templates and views
==== Command: completion
Generate shell completion scripts
===== Options
===== -f|--file PATH
File to write output to
[Default Value] STDOUT
===== -t|--type SHELL
Shell to generate for (bash, zsh, fish)
[Default Value] zsh
[Must Match] (?i-mx:^[bzf](?:[ai]?sh)?$)
==== Command: config KEY_PATH
Edit the configuration file or output a value from it
Run without arguments, `doing config` opens your `.doingrc` in an editor.
If local configurations are found in the path between the current directory
and `~/.doingrc`, a menu will allow you to select which to open in the editor.
It will use the editor defined in `config_editor_app`, or one specified with `--editor`.
Use `doing config -d` to output the configuration to the terminal, and
provide a dot-separated key path to get a specific value. Shows the current value
including keys/overrides set by local configs.
===== Options
===== -a APP_NAME
Application to use
[Default Value] None
===== -b BUNDLE_ID
Application bundle id to use
[Default Value] None
===== -e|--editor EDITOR
Editor to use
[Default Value] None
===== -o|--output FORMAT
Format for --dump (json|yaml|raw)
[Default Value] yaml
[Must Match] (?-mix:^(?:y(?:aml)?|j(?:son)?|r(?:aw)?)$)
===== -d|--dump
Show a config key value based on arguments. Separate key paths with colons or dots, e.g. "export_templates.html". Empty arguments outputs the entire config.
===== -u|--update
Update config file with missing configuration options
===== -x
Use the config_editor_app defined in ~/.doingrc (config_editor_app not set)
==== Command: done|did ENTRY
Add a completed item with @done(date). No argument finishes last entry.
===== Options
===== --at DATE_STRING
Set finish date to specific date/time (natural langauge parsed, e.g. --at=1:30pm).
If used, ignores --back. Used with --took, backdates start date
[Default Value] None
===== -b|--back DATE_STRING
Backdate start date by interval [4pm|20m|2h|yesterday noon]
[Default Value] None
===== -n|--note TEXT
Include a note
[Default Value] None
===== -s|--section NAME
Section
[Default Value] None
===== -t|--took INTERVAL
Set completion date to start date plus interval (XX[mhd] or HH:MM).
If used without the --back option, the start date will be moved back to allow
the completion date to be the current time.
[Default Value] None
===== -a|--archive
Immediately archive the entry
===== --[no-]date
Include date
===== -e|--editor
Edit entry with vim (with no arguments, edits the last entry)
===== -r|--remove
Remove @done tag
===== -u|--unfinished
Finish last entry not already marked @done
==== Command: finish COUNT
Mark last X entries as @done
Marks the last X entries with a @done tag and current date. Does not alter already completed entries.
===== Options
===== --at DATE_STRING
Set finish date to specific date/time (natural langauge parsed, e.g. --at=1:30pm). If used, ignores --back.
[Default Value] None
===== -b|--back DATE_STRING
Backdate completed date to date string [4pm|20m|2h|yesterday noon]
[Default Value] None
===== --bool BOOLEAN
Boolean (AND|OR|NOT) with which to combine multiple tag filters
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -s|--section NAME
Section
[Default Value] None
===== --search QUERY
Finish the last X entries matching search filter, surround with slashes for regex (e.g. "/query.*/"), start with single quote for exact match ("'query")
[Default Value] None
===== -t|--took INTERVAL
Set the completed date to the start date plus XX[hmd]
[Default Value] None
===== --tag TAG
Finish the last X entries containing TAG.
Separate multiple tags with comma (--tag=tag1,tag2), combine with --bool
[Default Value] None
===== -a|--archive
Archive entries
===== --auto
Auto-generate finish dates from next entry's start time.
Automatically generate completion dates 1 minute before next item (in any section) began.
--auto overrides the --date and --back parameters.
===== --[no-]date
Include date
===== -i|--interactive
Select item(s) to finish from a menu of matching entries
===== --not
Finish items that *don't* match search/tag filters
===== -r|--remove
Remove done tag
===== -u|--unfinished
Finish last entry (or entries) not already marked @done
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: grep|search SEARCH_PATTERN
Search for entries
Search all sections (or limit to a single section) for entries matching text or regular expression. Normal strings are fuzzy matched.
To search with regular expressions, single quote the string and surround with slashes: `doing search '/\bm.*?x\b/'`
===== Options
===== --after DATE_STRING
Constrain search to entries newer than date
[Default Value] None
===== --before DATE_STRING
Constrain search to entries older than date
[Default Value] None
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -o|--output FORMAT
Output to export format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -s|--section NAME
Section
[Default Value] All
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] name
[Must Match] (?i-mx:^(?:name|time)$)
===== -i|--interactive
Display an interactive menu of results to perform further operations
===== --not
Show items that *don't* match search string
===== --only_timed
Only show items with recorded time intervals
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show intervals with totals at the end of output
===== -x|--exact
Force exact string matching (case sensitive)
==== Command: help command
Shows a list of commands or help for one command
Gets help for the application or its commands. Can also list the commands in a way helpful to creating a bash-style completion function
===== Options
===== -c
List commands one per line, to assist with shell completion
==== Command: import PATH
Import entries from an external source
Imports entries from other sources. Available plugins: calendar, doing, timing
===== Options
===== --after DATE_STRING
Import entries newer than date
[Default Value] None
===== --before DATE_STRING
Import entries older than date
[Default Value] None
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -f|--from DATE_OR_RANGE
Date range to import. Date range argument should be quoted. Date specifications can be natural language.
To specify a range, use "to" or "through": `--from "monday to friday"` or `--from 10/1 to 10/31`.
Has no effect unless the import plugin has implemented date range filtering.
[Default Value] None
===== --prefix PREFIX
Prefix entries with
[Default Value] None
===== -s|--section NAME
Target section
[Default Value] None
===== --search QUERY
Only import items matching search. Surround with slashes for regex (/query/), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAGS
Tag all imported entries
[Default Value] None
===== --type TYPE
Import type (calendar|doing|timing)
[Default Value] doing
===== --[no-]autotag
Autotag entries
===== --not
Import items that *don't* match search/tag/date filters
===== --only_timed
Only import items with recorded time intervals
===== --[no-]overlap
Allow entries that overlap existing times
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: last
Show the last entry, optionally edit
===== Options
===== --bool BOOLEAN
Tag boolean
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -s|--section NAME
Specify a section
[Default Value] All
===== --search QUERY
Search filter, surround with slashes for regex (/query/), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Tag filter, combine multiple tags with a comma.
[Default Value] None
===== -e|--editor
Edit entry with vim
===== --not
Show items that *don't* match search string or tag filter
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: later ENTRY
Add an item to the Later section
===== Options
===== -b|--back DATE_STRING
Backdate start time to date string [4pm|20m|2h|yesterday noon]
[Default Value] None
===== -n|--note TEXT
Note
[Default Value] None
===== -e|--editor
Edit entry with vim
==== Command: mark|flag
Mark last entry as flagged
===== Options
===== --bool BOOLEAN
Boolean (AND|OR|NOT) with which to combine multiple tag filters
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== -c|--count COUNT
How many recent entries to tag (0 for all)
[Default Value] 1
[Must Match] (?-mix:^\d+$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -s|--section SECTION_NAME
Section
[Default Value] All
===== --search QUERY
Flag the last entry matching search filter, surround with slashes for regex (e.g. "/query.*/"), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Flag the last entry containing TAG.
Separate multiple tags with comma (--tag=tag1,tag2), combine with --bool
[Default Value] None
===== -d|--date
Include current date/time with tag
===== --force
Don't ask permission to flag all entries when count is 0
===== -i|--interactive
Select item(s) to flag from a menu of matching entries
===== --not
Flag items that *don't* match search/tag/date filters
===== -r|--remove
Remove flag
===== -u|--unfinished
Flag last entry (or entries) not marked @done
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: meanwhile ENTRY
Finish any running @meanwhile tasks and optionally create a new one
===== Options
===== -b|--back DATE_STRING
Backdate start date for new entry to date string [4pm|20m|2h|yesterday noon]
[Default Value] None
===== -n|--note TEXT
Note
[Default Value] None
===== -s|--section NAME
Section
[Default Value] None
===== -a|--archive
Archive previous @meanwhile entry
===== -e|--editor
Edit entry with vim
==== Command: note NOTE_TEXT
Add a note to the last entry
If -r is provided with no other arguments, the last note is removed.
If new content is specified through arguments or STDIN, any previous
note will be replaced with the new one.
Use -e to load the last entry in a text editor where you can append a note.
===== Options
===== --bool BOOLEAN
Boolean (AND|OR|NOT) with which to combine multiple tag filters
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -s|--section NAME
Section
[Default Value] All
===== --search QUERY
Add/remove note from last entry matching search filter, surround with slashes for regex (e.g. "/query.*/"), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Add/remove note from last entry matching tag
[Default Value] None
===== -e|--editor
Edit entry with vim
===== -i|--interactive
Select item for new note from a menu of matching entries
===== --not
Add note to item that *doesn't* match search/tag filters
===== -r|--remove
Replace/Remove last entry's note (default append)
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: now|next ENTRY
Add an entry
Record what you're starting now, or backdate the start time using natural language.
A parenthetical at the end of the entry will be converted to a note.
Run with no argument to create a new entry using vim.
===== Options
===== -b|--back DATE_STRING
Backdate start time [4pm|20m|2h|yesterday noon]
[Default Value] None
===== -n|--note TEXT
Include a note
[Default Value] None
===== -s|--section NAME
Section
[Default Value] None
===== -e|--editor
Edit entry with vim
===== -f|--finish_last
Timed entry, marks last entry in section as @done
==== Command: on DATE_STRING
List entries for a date
Date argument can be natural language. "thursday" would be interpreted as "last thursday,"
and "2d" would be interpreted as "two days ago." If you use "to" or "through" between two dates,
it will create a range.
===== Options
===== -o|--output FORMAT
Output to export format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -s|--section NAME
Section
[Default Value] All
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] name
[Must Match] (?i-mx:^(?:name|time)$)
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show time totals at the end of output
==== Command: open
Open the "doing" file in an editor
`doing open` defaults to using the editor_app setting in /Users/ttscoff/.doingrc (not set).
===== Options
===== -a|--app APP_NAME
Open with app name
[Default Value] None
===== -b|--bundle_id BUNDLE_ID
Open with app bundle id
[Default Value] None
==== Command: plugins
List installed plugins
Lists available plugins, including user-installed plugins.
Export plugins are available with the `--output` flag on commands that support it.
Import plugins are available using `doing import --type PLUGIN`.
===== Options
===== -t|--type TYPE
List plugins of type (import, export)
[Default Value] all
[Must Match] (?i-mx:^(?:[iea].*)$)
===== -c|--column
List in single column for completion
==== Command: recent COUNT
List recent entries
===== Options
===== -s|--section NAME
Section
[Default Value] All
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] name
[Must Match] (?i-mx:^(?:name|time)$)
===== -i|--interactive
Select from a menu of matching entries to perform additional operations
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show intervals with totals at the end of output
==== Command: reset|begin
Reset the start time of an entry
===== Options
===== --bool BOOLEAN
Boolean (AND|OR|NOT) with which to combine multiple tag filters
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -s|--section NAME
Limit search to section
[Default Value] All
===== --search QUERY
Reset last entry matching search filter, surround with slashes for regex (e.g. "/query.*/"), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Reset last entry matching tag
[Default Value] None
===== -i|--interactive
Select from a menu of matching entries
===== --not
Reset items that *don't* match search/tag filters
===== -r|--[no-]resume
Resume entry (remove @done)
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: rotate
Move entries to archive file
===== Options
===== --before DATE_STRING
Rotate entries older than date
(Flexible date format, e.g. 1/27/2021, 2020-07-19, or Monday 3pm)
[Default Value] None
===== --bool BOOLEAN
Tag boolean (AND|OR|NOT)
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -k|--keep X
How many items to keep in each section (most recent)
[Default Value] None
[Must Match] (?-mix:^\d+$)
===== -s|--section SECTION_NAME
Section to rotate
[Default Value] All
===== --search QUERY
Search filter
[Default Value] None
===== --tag TAG
Tag filter, combine multiple tags with a comma. Added for compatibility with other commands.
[Default Value] None
===== --not
Rotate items that *don't* match search string or tag filter
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: sections
List sections
===== Options
===== -c|--column
List in single column
==== Command: select
Display an interactive menu to perform operations
List all entries and select with typeahead fuzzy matching.
Multiple selections are allowed, hit tab to add the highlighted entry to the
selection, and use ctrl-a to select all visible items. Return processes the
selected entries.
===== Options
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -m|--move SECTION
Move selected items to section
[Default Value] None
===== -o|--output FORMAT
Output entries to format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -q|--query|--search QUERY
Initial search query for filtering. Matching is fuzzy. For exact matching, start query with a single quote, e.g. `--query "'search"
[Default Value] None
===== -s|--section SECTION
Select from a specific section
[Default Value] None
===== --save_to FILE
Save selected entries to file using --output format
[Default Value] None
===== -t|--tag TAG
Tag selected entries
[Default Value] None
===== -a|--archive
Archive selected items
===== --again|--resume
Copy selection as a new entry with current time and no @done tag. Only works with single selections. Can be combined with --editor.
===== -c|--cancel
Cancel selected items (add @done without timestamp)
===== -d|--delete
Delete selected items
===== -e|--editor
Edit selected item(s)
===== -f|--finish
Add @done with current time to selected item(s)
===== --flag
Add flag to selected item(s)
===== --force
Perform action without confirmation.
===== --[no-]menu
Use --no-menu to skip the interactive menu. Use with --query to filter items and act on results automatically. Test with `--output doing` to preview matches.
===== --not
Select items that *don't* match search/tag filters
===== -r|--remove
Reverse -c, -f, --flag, and -t (remove instead of adding)
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: show [SECTION|@TAGS]
List all entries
The argument can be a section name, @tag(s) or both.
"pick" or "choose" as an argument will offer a section menu.
===== Options
===== -a|--age AGE
Age (oldest|newest)
[Default Value] newest
===== --after DATE_STRING
View entries newer than date
[Default Value] None
===== -b|--bool BOOLEAN
Tag boolean (AND,OR,NOT)
[Default Value] OR
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --before DATE_STRING
View entries older than date
[Default Value] None
===== -c|--count MAX
Max count to show
[Default Value] 0
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -f|--from DATE_OR_RANGE
Date range to show, or a single day to filter date on.
Date range argument should be quoted. Date specifications can be natural language.
To specify a range, use "to" or "through": `doing show --from "monday to friday"`
[Default Value] None
===== -o|--output FORMAT
Output to export format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -s|--sort ORDER
Sort order (asc/desc)
[Default Value] asc
[Must Match] (?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)
===== --search QUERY
Search filter, surround with slashes for regex (/query/), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Tag filter, combine multiple tags with a comma. Added for compatibility with other commands.
[Default Value] None
===== --tag_order DIRECTION
Tag sort direction (asc|desc)
[Default Value] asc
[Must Match] (?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] name
[Must Match] (?i-mx:^(?:name|time))
===== -i|--interactive
Select from a menu of matching entries to perform additional operations
===== --not
Show items that *don't* match search/tag/date filters
===== --only_timed
Only show items with recorded time intervals
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show intervals with totals at the end of output
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: since DATE_STRING
List entries since a date
Date argument can be natural language and are always interpreted as being in the past. "thursday" would be interpreted as "last thursday,"
and "2d" would be interpreted as "two days ago."
===== Options
===== -o|--output FORMAT
Output to export format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -s|--section NAME
Section
[Default Value] All
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] name
[Must Match] (?i-mx:^(?:name|time)$)
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show time totals at the end of output
==== Command: tag TAG...
Add tag(s) to last entry
Add (or remove) tags from the last entry, or from multiple entries
(with `--count`), entries matching a search (with `--search`), or entries
containing another tag (with `--tag`).
When removing tags with `-r`, wildcards are allowed (`*` to match
multiple characters, `?` to match a single character). With `--regex`,
regular expressions will be interpreted instead of wildcards.
For all tag removals the match is case insensitive by default, but if
the tag search string contains any uppercase letters, the match will
become case sensitive automatically.
Tag name arguments do not need to be prefixed with @.
===== Options
===== --bool BOOLEAN
Boolean (AND|OR|NOT) with which to combine multiple tag filters
[Default Value] AND
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== -c|--count COUNT
How many recent entries to tag (0 for all)
[Default Value] 1
[Must Match] (?-mix:^\d+$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== --rename ORIG_TAG
Replace existing tag with tag argument, wildcards (*,?) allowed, or use with --regex
[Default Value] None
===== -s|--section SECTION_NAME
Section
[Default Value] All
===== --search QUERY
Tag entries matching search filter, surround with slashes for regex (e.g. "/query.*/"), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Tag the last X entries containing TAG.
Separate multiple tags with comma (--tag=tag1,tag2), combine with --bool
[Default Value] None
===== -a|--autotag
Autotag entries based on autotag configuration in ~/.doingrc
===== -d|--date
Include current date/time with tag
===== --force
Don't ask permission to tag all entries when count is 0
===== -i|--interactive
Select item(s) to tag from a menu of matching entries
===== --not
Tag items that *don't* match search/tag filters
===== -r|--remove
Remove given tag(s)
===== --regex
Interpret tag string as regular expression (with --remove)
===== -u|--unfinished
Tag last entry (or entries) not marked @done
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: template TYPE
Output HTML, CSS, and Markdown (ERB) templates for customization
Templates are printed to STDOUT for piping to a file.
Save them and use them in the configuration file under export_templates.
===== Options
===== -c
List in single column for completion
===== -l|--list
List all available templates
==== Command: test
Test Stuff
This command is coming from /Users/ttscoff/.config/doing/commands/test.rb
==== Command: today
List entries from today
===== Options
===== --after TIME_STRING
View entries after specified time (e.g. 8am, 12:30pm, 15:00)
[Default Value] None
===== --before TIME_STRING
View entries before specified time (e.g. 8am, 12:30pm, 15:00)
[Default Value] None
===== -o|--output FORMAT
Output to export format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -s|--section NAME
Specify a section
[Default Value] All
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] name
[Must Match] (?i-mx:^(?:name|time)$)
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show time totals at the end of output
==== Command: undo
Undo the last change to the doing_file
===== Options
===== -f|--file PATH
Specify alternate doing file
[Default Value] None
==== Command: view VIEW_NAME
Display a user-created view
Command line options override view configuration
===== Options
===== --after DATE_STRING
View entries newer than date
[Default Value] None
===== -b|--bool BOOLEAN
Tag boolean (AND,OR,NOT)
[Default Value] OR
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --before DATE_STRING
View entries older than date
[Default Value] None
===== -c|--count COUNT
Count to display
[Default Value] None
[Must Match] (?-mix:^\d+$)
===== --case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
[Default Value] smart
[Must Match] (?-mix:^[csi])
===== -o|--output FORMAT
Output to export format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -s|--section NAME
Section
[Default Value] None
===== --search QUERY
Search filter, surround with slashes for regex (/query/), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Tag filter, combine multiple tags with a comma.
[Default Value] None
===== --tag_order DIRECTION
Tag sort direction (asc|desc)
[Default Value] None
[Must Match] (?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] None
[Must Match] (?i-mx:^(?:name|time)$)
===== --[no-]color
Include colors in output
===== -i|--interactive
Select from a menu of matching entries to perform additional operations
===== --not
Show items that *don't* match search string
===== --only_timed
Only show items with recorded time intervals (override view settings)
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show intervals with totals at the end of output
===== -x|--exact
Force exact search string matching (case sensitive)
==== Command: views
List available custom views
===== Options
===== -c|--[no-]column
List in single column
==== Command: wiki
Output a tag wiki
===== Options
===== --after DATE_STRING
Include entries newer than date
[Default Value] None
===== -b|--bool BOOLEAN
Tag boolean (AND,OR,NOT)
[Default Value] OR
[Must Match] (?i-mx:^(?:and|all|any|or|not|none)$)
===== --before DATE_STRING
Include entries older than date
[Default Value] None
===== -f|--from DATE_OR_RANGE
Date range to include, or a single day to filter date on.
Date range argument should be quoted. Date specifications can be natural language.
To specify a range, use "to" or "through": `doing show --from "monday to friday"`
[Default Value] None
===== -s|--section SECTION_NAME
Section to rotate
[Default Value] All
===== --search QUERY
Search filter, surround with slashes for regex (/query/), start with single quote for exact match ("'query")
[Default Value] None
===== --tag TAG
Tag filter, combine multiple tags with a comma, use with --bool
[Default Value] None
===== --only_timed
Only show items with recorded time intervals
==== Command: yesterday
List entries from yesterday
===== Options
===== --after TIME_STRING
View entries after specified time (e.g. 8am, 12:30pm, 15:00)
[Default Value] None
===== --before TIME_STRING
View entries before specified time (e.g. 8am, 12:30pm, 15:00)
[Default Value] None
===== -o|--output FORMAT
Output to export format (csv|doing|html|markdown|say|taskpaper|template|timeline|wiki)
[Default Value] None
===== -s|--section NAME
Specify a section
[Default Value] All
===== --tag_order DIRECTION
Tag sort direction (asc|desc)
[Default Value] asc
[Must Match] (?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)
===== --tag_sort KEY
Sort tags by (name|time)
[Default Value] name
[Must Match] (?i-mx:^(?:name|time)$)
===== -t|--[no-]times
Show time intervals on @done tasks
===== --totals
Show time totals at the end of output
[Default Command] recent