Doing - All Commands

doing: A CLI for a What Was I Doing system

Doing uses a TaskPaper-like formatting to keep a plain text

Table of Contents

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.1.86

Global Options

--config_file arg
Use a specific configuration file. Deprecated, set $DOING_CONFIG instead
Default Value: ~/.config/doing/config.yml
-f|--doing_file arg
Specify a different doing_file
Default Value: None
--[no-]color
Colored output
--debug
Verbose output
--default
Answer yes/no menus with default option
--help
Show this message
--no
Answer all yes/no menus with no
--[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
--yes
Answer all yes/no menus with yes

Commands

again (or resume)

Repeat last entry as new entry

This command is designed to allow multiple time intervals to be created

for an entry by duplicating it with a new start (and end, eventually) time
Options
-b|--back|--started|--since DATE_STRING
Backdate start date for new entry to date string [4pm|20m|2h|yesterday noon]
Default Value: None
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--in SECTION_NAME
Add new entry to section (default: same section as repeated entry)
Default Value: None
-n|--note TEXT
Include a note
Default Value: None
-s|--section NAME
Get last entry from a specific section
Default Value: All
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-X|--noauto
Exclude auto tags and default tags
--ask
Prompt for note via multi-line input
-e|--editor
Edit entry with vim
-i|--interactive
Select item to resume from a menu of matching entries
--not
Repeat items that don’t match search/tag filters
-x|--exact
Force exact search string matching (case sensitive)

archive (or 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
--after DATE_STRING
Archive entries newer than date (natural language).
Default Value: None
--before DATE_STRING
Archive entries older than date (natural language).
Default Value: None
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--from DATE_OR_RANGE
Date range (natural language) to archive: doing archive --from "1/1/21 to 12/31/21".
Default Value: None
-k|--keep X
How many items to keep (ignored if archiving by tag or search)
Default Value: None
Must Match: (?-mix:^\d+$)
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

-t|--to SECTION_NAME
Move entries to
Default Value: Archive
--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
--[no-]label
Label moved items with @from(SECTION_NAME)
--not
Archive items that don’t match search/tag filters
-x|--exact
Force exact search string matching (case sensitive)

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|p(?:at(?:tern)?)?)$)
-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

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 used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
-s|--section NAME
Section
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-a|--archive
Archive entries
-i|--interactive
Select item(s) to cancel from a menu of matching entries
--not
Cancel 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)

changes (or changelog)

List recent changes in Doing

Display a formatted list of changes in recent versions.

Without flags, displays only the most recent version.

Use --lookup or --all for history.
Options
-l|--lookup VERSION
Look up a specific version. Specify versions as “MAJ.MIN.PATCH”, MIN and PATCH are optional. Use > or < to see all changes since or prior
to a version. Wildcards (*?) accepted unless using < or >.

Default Value: None

Must Match: (?-mix:^(?:(?:(?:[<>=]+|p(?:rior)|b(?:efore)|o(?:lder)|s(?:ince)|a(?:fter)|n(?:ewer))? *[0-9.*?]{1,10} *)+|(?:[\d.]+ *(?:-|to)+ *[0-9.]{1,10}))$)
--only TYPES
Only show changes of type(s), comma-separated
Default Value: changed,new,improved,fixed
-s|--search arg
Show changelogs matching search terms (uses pattern-based searching). Add slashes to search with regular expressions, e.g. --search "/output.*flag/"

Default Value: None

--sort ORDER
Sort order (asc/desc)
Default Value: desc
Must Match: (?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)
-C|--changes
Only output changes, no version numbers, headers, or dates
-a|--all
Display all versions
-i|--interactive
Open changelog in interactive viewer
-m|--md|--markdown
Output raw Markdown
-p|--[no-]prefix
Include (CHANGE|NEW|IMPROVED|FIXED) prefix on each line
--render
Force rendered output

colors

List available color variables for configuration templates and views

commands

Enable and disable Doing commands

Commands

add (or enable) [COMMAND [COMMAND…]]

Enable Doing commands

Run without arguments to select commands from a list.

ls (or list) [QUERY]…

List enabled commands

Options
-s|--style QUERY
List style (column, tab, comma, *space)
Default Value: None
Must Match: (?-mix:^[cts].*)
-d|--[no-]disabled
List disabled commands

remove (or disable) [COMMAND [COMMAND…]]

Disable Doing commands

Default Command: add

completion

Generate shell completion scripts for doing

Generates the necessary scripts to add command line completion to various shells,

so typing ‘doing’ and hitting tab will offer completions of subcommands and their options.

Options
-t|--type arg
Deprecated, specify shell as argument to subcommand
Default Value: None
Must Match: (?i-mx:^(?:[bzf](?:[ai]?sh)?|fig|all)$)

Commands

generate [zsh|bash|fish|all]

Generate completion scripts, including custom plugins and command options

Argument specifies which shell to generate for: zsh, bash, fish, all

Options
-f|--file PATH
Alternative file to write output to
Default Value: None Argument specifies which shell to generate for: zsh, bash, fish, all
--stdout
Output result to STDOUT only

install [zsh|bash|fish]

Install default completion scripts

Argument specifies which shell to install for: zsh, bash, fish, or all

Default Command: generate

config

Edit the configuration file or output a value from it

Run without arguments, doing config opens your config.yml in an editor.

If local configurations are found in the path between the current directory

and the root (/), 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 get 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
-d|--[no-]dump
DEPRECATED
-u|--[no-]update
DEPRECATED

Commands

edit (or open)

Open config file in editor

Options
-a|--app APP_NAME
Application to use
Default Value: None
-b|--bundle_id BUNDLE_ID
Application bundle id to use
Default Value: None
-e|--editor EDITOR
Editor to use
Default Value: None
-x|--default
Use the config editor defined in ~/.config/doing/config.yml (Sublime Text)

get (or dump)

Output a key’s value

Options
-o|--output FORMAT
Format for output (json|yaml|raw)
Default Value: yaml
Must Match: (?-mix:^(?:y(?:aml)?|j(?:son)?|r(?:aw)?)$)

list

List configuration paths, including .doingrc files in the current and parent directories

Config files are listed in order of precedence (if there are multiple configs detected). Values defined in the top item in the list will override values in configutations below it.

set

Set a key’s value in the config file

Options
--local
Force update to .doingrc in the current directory
-r|--remove
Delete specified key

undo

Undo the last change to a config file

update (or refresh)

Update default config file, adding any missing keys

Default Command: edit

done (or did) [ENTRY]

Add a completed item with @done(date). No argument finishes last entry

Use this command to add an entry after you’ve already finished it. It will be immediately marked as @done.

You can modify the start and end times of the entry using the –back, –took, and –at flags, making it an easy

way to add entries in post and maintain accurate (albeit manual) time tracking.

Options
--at|--finished DATE_STRING
Set finish date to specific date/time (natural langauge parsed, e.g. –at=1:30pm). Used with –took, backdates start date

Default Value: None

-b|--back|--started|--since DATE_STRING
Backdate start date for new entry to date string [4pm|20m|2h|yesterday noon]
Default Value: None
--from TIME_RANGE
Start and end times as a date/time range doing done --from "1am to 8am". Overrides other date flags.

Default Value: None

Must Match: (?i-mx:^\S+.*? +(?:to|through|thru|(?:un)?til|-+) +\S+.*?$)
-n|--note TEXT
Include a note
Default Value: None
-s|--section NAME
Section
Default Value: None
-t|--took|--for 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

-X|--noauto
Exclude auto tags and default tags
-a|--archive
Immediately archive the entry
--ask
Prompt for note via multi-line input
--[no-]date
Include date
-e|--editor
Edit entry with vim
-r|--remove
Remove @done tag
-u|--unfinished
Finish last entry not already marked @done

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|--finished DATE_STRING
Set finish date to specific date/time (natural langauge parsed, e.g. –at=1:30pm). Used with –took, backdates start date

Default Value: None

-b|--back|--started DATE_STRING
Backdate completed date to date string [4pm|20m|2h|yesterday noon]
Default Value: None
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--from TIME_RANGE
Start and end times as a date/time range doing done --from "1am to 8am". Overrides other date flags.

Default Value: None

Must Match: (?i-mx:^\S+.*? +(?:to|through|thru|(?:un)?til|-+) +\S+.*?$)
-s|--section NAME
Section
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

-t|--took|--for 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

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-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
--update
Overwrite existing @done tag with new date
-x|--exact
Force exact search string matching (case sensitive)

grep (or search) SEARCH_PATTERN

Search for entries

Search all sections (or limit to a specific sections) 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 '/m.*?x/'

Options
--after DATE_STRING
Search entries newer than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--before DATE_STRING
Search entries older than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: default
--from DATE_OR_RANGE
Date range (natural language) to search, or a single day to filter on. To specify a range, use “to”: doing grep --from "monday 8am to friday 5pm".
If values are only time(s) (6am to noon) all dates will be included, but entries will be filtered

by time of day.

Default Value: None

-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Section
Default Value: All
--save VIEW_NAME
Save all current command line options as a new view
Default Value: None
--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-d|--delete
Delete matching entries
--[no-]duration
Show elapsed time on entries without @done tag
-e|--editor
Edit matching entries with vim
-h|--[no-]hilite
Highlight search matches in output. Only affects command line output
-i|--interactive
Display an interactive menu of results to perform further operations
--not
Search items that don’t match search/tag filters
--only_timed
Only show items with recorded time intervals
-t|--[no-]times
Show time intervals on @done tasks
--totals
Show time totals at the end of output
-x|--exact
Force exact string matching (case sensitive)

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

import PATH

Import entries from an external source

Imports entries from other sources. Available plugins: calendar, doing, json, timing

Options
--after DATE_STRING
Import entries newer than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--before DATE_STRING
Import entries older than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--from DATE_OR_RANGE
Date range (natural language) to import, or a single day to filter on. To specify a range, use “to”: doing import --from "monday 8am to friday 5pm".
If values are only time(s) (6am to noon) all dates will be included, but entries will be filtered

by time of day.

Default Value: None

--prefix PREFIX
Prefix entries with
Default Value: None
-s|--section NAME
Target section
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

-t|--tag TAGS
Tag all imported entries
Default Value: None
--type TYPE
Import type (calendar|doing|json|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)

last

Show the last entry, optionally edit

Shows the last entry. Using –search and –tag filters, you can view/edit the last entry matching a filter,

allowing doing last to target historical entries.

Options
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: last
-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Specify a section
Default Value: All
--save VIEW_NAME
Save all current command line options as a new view
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-d|--delete
Delete the last entry
--[no-]duration
Show elapsed time if entry is not tagged @done
-e|--editor
Edit entry with vim
-h|--[no-]hilite
Highlight search matches in output. Only affects command line output
--not
Show items that don’t match search/tag filters
-x|--exact
Force exact search string matching (case sensitive)

later ENTRY

Add an item to the Later section

Options
-b|--back|--started DATE_STRING
Backdate start time to date string [4pm|20m|2h|yesterday noon]
Default Value: None
-n|--note TEXT
Note
Default Value: None
--ask
Prompt for note via multi-line input
-e|--editor
Edit entry with vim

mark (or flag)

Mark last entry as flagged

Options
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
-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: (?i-mx:^[cis].*?$)
-s|--section SECTION_NAME
Section
Default Value: All
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-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 filters
-r|--remove
Remove flag
-u|--unfinished
Flag last entry (or entries) not marked @done
-x|--exact
Force exact search string matching (case sensitive)

meanwhile [ENTRY]

Finish any running @meanwhile tasks and optionally create a new one

The @meanwhile tag allows you to have long-running entries that encompass smaller entries.

This command makes it easy to start and stop these overarching entries. Just run `doing meanwhile Starting work on this

big project to start a @meanwhile entry, add other entries as you work on the project, then use doing meanwhile` by

itself to mark the entry as @done.

Options
-b|--back|--started|--since DATE_STRING
Backdate start date for new entry to date string [4pm|20m|2h|yesterday noon]
Default Value: None
-n|--note TEXT
Include a note
Default Value: None
-s|--section NAME
Section
Default Value: None
-X|--noauto
Exclude auto tags and default tags
-a|--archive
Archive previous @meanwhile entry
--ask
Prompt for note via multi-line input
-e|--editor
Edit entry with vim

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 used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
-s|--section NAME
Section
Default Value: All
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
--ask
Prompt for note via multi-line input
-e|--editor
Edit entry with vim
-i|--interactive
Select item for new note from a menu of matching entries
--not
Note items that don’t match search/tag filters
-r|--remove
Replace/Remove last entry’s note (default append)
-x|--exact
Force exact search string matching (case sensitive)

now (or 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 without arguments to create a new entry interactively.

Run with –editor to create a new entry using vim.

Options
-b|--back|--started|--since DATE_STRING
Backdate start date for new entry to date string [4pm|20m|2h|yesterday noon]
Default Value: None
--from TIME_RANGE
Set a start and optionally end time as a date range (“from 1pm to 2:30pm”). If an end time is provided, a dated @done tag will be added

Default Value: None

-n|--note TEXT
Include a note
Default Value: None
-s|--section NAME
Section
Default Value: None
-X|--noauto
Exclude auto tags and default tags
--ask
Prompt for note via multi-line input
-e|--editor
Edit entry with vim
-f|--finish_last
Timed entry, marks last entry in section as @done

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
--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
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: default
--from TIME_RANGE
Time range to show doing on --from "12pm to 4pm"
Default Value: None
Must Match: (?i-mx:^(?:\d{1,2}+(?::\d{1,2}+)?(?: *(?:am|pm))?|midnight|noon)(?: +(?:to|through|thru|(?:un)?til|-+) +(?:\d{1,2}+(?::\d{1,2}+)?(?: *(?:am|pm))?|midnight|noon))?$)
-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Section
Default Value: All
--save VIEW_NAME
Save all current command line options as a new view
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
--[no-]duration
Show elapsed time on entries without @done tag
--not
Show items that don’t match search/tag filters
--only_timed
Only show items with recorded time intervals
-t|--[no-]times
Show time intervals on @done tasks
--totals
Show time totals at the end of output
-x|--exact
Force exact search string matching (case sensitive)

open

Open the “doing” file in an editor

doing open defaults to using the editors.doing_file setting in ~/.config/doing/config.yml (TaskPaper).

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
-e|--editor COMMAND
Open with editor command (e.g. vim, mate)
Default Value: None

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

recent COUNT

List recent entries

Options
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: recent
-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Section
Default Value: All
--save VIEW_NAME
Save all current command line options as a new view
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--[no-]duration
Show elapsed time on entries without @done tag
-i|--interactive
Select from a menu of matching entries to perform additional operations
--only_timed
Only show items with recorded time intervals
-t|--[no-]times
Show time intervals on @done tasks
--totals
Show time totals at the end of output

redo COUNT

Redo an undo command

Shortcut for doing undo -r, reverses the last undo command. Specify a count to redo multiple undos

Options
-f|--file PATH
Specify alternate doing file
Default Value: None
-i|--[no-]interactive
Select from an interactive menu

reset (or begin) [DATE_STRING]

Reset the start time of an entry

Update the start time of the last entry or the last entry matching a tag/search filter.

If no argument is provided, the start time will be reset to the current time.

If a date string is provided as an argument, the start time will be set to the parsed result.

Options
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--from TIME_RANGE
Start and end times as a date/time range doing done --from "1am to 8am". Overrides any date argument and disables –resume.

Default Value: None

Must Match: (?i-mx:^\S+.*? +(?:to|through|thru|(?:un)?til|-+) +\S+.*?$)
-s|--section NAME
Limit search to section
Default Value: All
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

-t|--took|--for INTERVAL
Set completion date to start date plus interval (XX[mhd] or HH:MM). Disables –resume
Default Value: None
--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-i|--interactive
Select from a menu of matching entries
-n
Change start date but do not remove @done (shortcut for –no-resume)
--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)

rotate

Move entries to archive file

As your doing file grows, commands can get slow. Given that your historical data (and your archive section)

probably aren’t providing any useful insights a year later, use this command to “rotate” old entries out to an archive

file. You’ll still have access to all historical data, but it won’t be slowing down daily operation.

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
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
-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
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
--not
Rotate items that don’t match search/tag filters
-x|--exact
Force exact search string matching (case sensitive)

sections

List, add, or remove sections in the Doing file

Commands

add SECTION_NAME

Add a section

list

List sections

Options
-c|--column
List in single column

remove SECTION_NAME

Remove a section

Options
-a|--[no-]archive
Archive entries in section before deleting. –no-archive permanently deletes section contents

Default Command: list

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.

Search in the menu by typing:

sbtrkt fuzzy-match Items that match sbtrk*t

‘wild exact-match (quoted) Items that include wild

!fire inverse-exact-match Items that do not include fire

Options
--after DATE_STRING
Select entries newer than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--before DATE_STRING
Select entries older than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--from DATE_OR_RANGE
Date range (natural language) to select, or a single day to filter on. To specify a range, use “to”: doing select --from "monday 8am to friday 5pm".
If values are only time(s) (6am to noon) all dates will be included, but entries will be filtered

by time of day.

Default Value: None

-m|--move SECTION
Move selected items to section
Default Value: None
-o|--output FORMAT
Output entries to format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-q|--query 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
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

-t|--tag TAG
Tag selected entries
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-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)

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. Run with --menu to get a menu of available tags.

Show tags by passing @tagname arguments. Multiple tags can be combined, and you can specify the boolean used to combine them with --bool (AND|OR|NOT). You can also use @+tagname to require a tag to match, or @-tagname to ignore entries containing tagname. +/- operators require --bool PATTERN (which is the default).

Options
-a|--age AGE
Age (oldest|newest)
Default Value: newest
--after DATE_STRING
Show entries newer than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--before DATE_STRING
Show entries older than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
-c|--count MAX
Max count to show
Default Value: 0
Must Match: (?-mix:^\d+$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: default
--from DATE_OR_RANGE
Date range (natural language) to show, or a single day to filter on. To specify a range, use “to”: doing show --from "monday 8am to friday 5pm".
If values are only time(s) (6am to noon) all dates will be included, but entries will be filtered

by time of day.

Default Value: None

-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Only show entries within section
Default Value: None
--save VIEW_NAME
Save all current command line options as a new view
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--sort ORDER
Sort order (asc/desc)
Default Value: asc
Must Match: (?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)
--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
--[no-]duration
Show elapsed time on entries without @done tag
-e|--editor
Edit matching entries with vim
-h|--[no-]hilite
Highlight search matches in output. Only affects command line output
-i|--interactive
Select from a menu of matching entries to perform additional operations
-m|--menu
Select section or tag to display from a menu
--not
Show items that don’t match search/tag filters
--only_timed
Only show items with recorded time intervals
-t|--[no-]times
Show time intervals on @done tasks
--totals
Show time totals at the end of output
-x|--exact
Force exact search string matching (case sensitive)

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
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: default
-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Section
Default Value: All
--save VIEW_NAME
Save all current command line options as a new view
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
--[no-]duration
Show elapsed time on entries without @done tag
--not
Since items that don’t match search/tag filters
--only_timed
Only show items with recorded time intervals
-t|--[no-]times
Show time intervals on @done tasks
--totals
Show time totals at the end of output
-x|--exact
Force exact search string matching (case sensitive)

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 used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
-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: (?i-mx:^[cis].*?$)
--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
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
-v|--value VALUE
Include a value, e.g. @tag(value)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-a|--autotag
Autotag entries based on autotag configuration in ~/.config/doing/config.yml
-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)

tag_dir TAG [TAG..]

Set the default tags for the current directory

Adds default_tags to a .doingrc file in the current directory. Any entry created in this directory or its

subdirectories will be tagged with the default tags. You can modify these any time using the config set command or

manually editing the .doingrc file.

Options
--clear
Remove all default_tags from the local .doingrc
-e|--editor
Use default editor to edit tag list
-r|--remove
Delete tag(s) from the current list

tags [MAX_COUNT]

List all tags in the current Doing file

Options
--bool BOOLEAN
Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and - as booleans
Default Value: pattern
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
--case TYPE
Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
Default Value: smart
Must Match: (?i-mx:^[cis].*?$)
-o|--order ORDER
Sort order (asc/desc)
Default Value: asc
Must Match: (?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)
-s|--section SECTION_NAME
Section
Default Value: All
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--sort SORT_ORDER
Sort by name or count
Default Value: name
Must Match: (?-mix:^(?:n(?:ame)?|c(?:ount)?)$)
--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
-c|--[no-]counts
Show count of occurrences
-i|--interactive
Select items to scan from a menu of matching entries
-l|--[no-]line
Output in a single line with @ symbols. Ignored if –counts is specified.
--not
Show items that don’t match search/tag filters
-x|--exact
Force exact search string matching (case sensitive)

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
-p|--path DIRECTORY
Save template to alternate location
Default Value: ~/.config/doing/templates
-c|--[no-]column
List in single column for completion
-l|--list
List all available templates
-s|--save
Save template to file instead of STDOUT

test

Test Stuff

This command is coming from ~/.config/doing/commands/test.rb

today

List entries from today

List entries from the current day. Use –before, –after, and

–from to specify time ranges.

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
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: today
--from TIME_RANGE
Time range to show doing today --from "12pm to 4pm"
Default Value: None
Must Match: (?i-mx:^(?:\d{1,2}+(?::\d{1,2}+)?(?: *(?:am|pm))?|midnight|noon)(?: +(?:to|through|thru|(?:un)?til|-+) +(?:\d{1,2}+(?::\d{1,2}+)?(?: *(?:am|pm))?|midnight|noon))?$)
-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Specify a section
Default Value: All
--save VIEW_NAME
Save all current command line options as a new view
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--[no-]duration
Show elapsed time on entries without @done tag
--only_timed
Only show items with recorded time intervals
-t|--[no-]times
Show time intervals on @done tasks
--totals
Show time totals at the end of output

todo ENTRY

Add an item as a Todo

Adds an item to a Todo section, and tags it with @todo

Options
-n|--note TEXT
Note
Default Value: None
--ask
Prompt for note via multi-line input
-e|--editor
Edit entry with vim

undo COUNT

Undo the last X changes to the Doing file

Reverts the last X commands that altered the doing file.

All changes performed by a single command are undone at once.

Specify a number to jump back multiple revisions, or use –select for an interactive menu.

Options
-f|--file PATH
Specify alternate doing file
Default Value: None
-p|--prune COUNT
Remove old backups, retaining X files
Default Value: None
-i|--interactive
Select from recent backups
-r|--[no-]redo
Redo last undo. Note: you cannot undo a redo

update

Update doing to the latest version

Checks for the latest available version of doing and updates your local install if needed.

Options
-p|--pre|--beta
Check for pre-release version

view VIEW_NAME

Display a user-created view

Views are defined in your configuration (use doing config to edit).

Command line options override view configuration.

Options
--after DATE_STRING
Show entries newer than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--age AGE
Age (oldest|newest)
Default Value: None
--before DATE_STRING
Show entries older than date (natural language). If this is only a time (8am, 1:30pm, 15:00), all dates will be included, but entries will be filtered by time of day

Default Value: None

--bool BOOLEAN
Boolean used to combine multiple tags. Use PATTERN to parse + and - as booleans
Default Value: None
Must Match: (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
-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: (?i-mx:^[cis].*?$)
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: None
--from DATE_OR_RANGE
Date range (natural language) to show, or a single day to filter on. To specify a range, use “to”: doing view --from "monday 8am to friday 5pm".
If values are only time(s) (6am to noon) all dates will be included, but entries will be filtered

by time of day.

Default Value: None

-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Section
Default Value: None
--search QUERY
Filter entries using a search query, surround with slashes for regex (e.g. “/query.*/”), start with single quote for exact match (“‘query”)

Default Value: None

--tag TAG
Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--val QUERY
Perform a tag value query (“@done > two hours ago” or “@progress < 50”). May be used multiple times, combined with –bool

Default Value: None

Must Match: (?-mix:^(?:!)?@?(?:\S+) +(?:!?[<>=][=*]?|[$*^]=) +(?:.*?)$)
--[no-]color
Include colors in output
--duration
Show elapsed time on entries without @done tag
-h|--[no-]hilite
Highlight search matches in output. Only affects command line output
-i|--interactive
Select from a menu of matching entries to perform additional operations
--not
Show items that don’t match search/tag filters
--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)

views [NAME(S)]

List available custom views. Specify view names to see YAML configurations.

Options
-o|--output FORMAT
Output/edit view in alternative format (json, yaml)
Default Value: yaml
Must Match: (?i-mx:^[jy])
-c|--column
List in single column
-e|--editor
Open YAML for view in editor (requires argument)
-r|--remove
Delete view config

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|p(?:at(?:tern)?)?)$)
--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

yesterday

List entries from yesterday

Show only entries with start times within the previous 24 hour period. Use –before, –after, and –from to limit to

time spans within the day.

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
--config_template TEMPLATE_KEY
Output using a template from configuration
Default Value: today
--from TIME_RANGE
Time range to show doing yesterday --from "12pm to 4pm"
Default Value: None
Must Match: (?i-mx:^(?:\d{1,2}+(?::\d{1,2}+)?(?: *(?:am|pm))?|midnight|noon)(?: +(?:to|through|thru|(?:un)?til|-+) +(?:\d{1,2}+(?::\d{1,2}+)?(?: *(?:am|pm))?|midnight|noon))?$)
-o|--output FORMAT
Output to export format (byday|csv|dayone|dayone-days|dayone-entries|doing|html|json|markdown|say|taskpaper|template|timeline|wiki)
Default Value: None
-s|--section NAME
Specify a section
Default Value: All
--save VIEW_NAME
Save all current command line options as a new view
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:^(?:n(?:ame)?|t(?:ime)?)$)
--template TEMPLATE_STRING
Override output format with a template string containing %placeholders
Default Value: None
--title TITLE
Title string to be used for output formats that require it
Default Value: None
--[no-]duration
Show elapsed time on entries without @done tag
--only_timed
Only show items with recorded time intervals
-t|--[no-]times
Show time intervals on @done tasks
--totals
Show time totals at the end of output

Default Command: recent