doing 2.1.99 → 2.1.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +8 -2
  5. data/bin/commands/view.rb +5 -0
  6. data/bin/doing +92 -2
  7. data/docs/doc/Array.html +3 -3
  8. data/docs/doc/BooleanTermParser/Clause.html +3 -3
  9. data/docs/doc/BooleanTermParser/Operator.html +3 -3
  10. data/docs/doc/BooleanTermParser/Query.html +3 -3
  11. data/docs/doc/BooleanTermParser/QueryParser.html +3 -3
  12. data/docs/doc/BooleanTermParser/QueryTransformer.html +3 -3
  13. data/docs/doc/BooleanTermParser.html +3 -3
  14. data/docs/doc/Doing/ArrayCleanup.html +3 -3
  15. data/docs/doc/Doing/ArrayNestedHash.html +3 -3
  16. data/docs/doc/Doing/ArrayTags.html +9 -9
  17. data/docs/doc/Doing/ByDayExport.html +3 -3
  18. data/docs/doc/Doing/CSVExport.html +3 -3
  19. data/docs/doc/Doing/CalendarImport.html +3 -3
  20. data/docs/doc/Doing/Change.html +3 -3
  21. data/docs/doc/Doing/Changes.html +3 -3
  22. data/docs/doc/Doing/ChronifyArray.html +3 -3
  23. data/docs/doc/Doing/ChronifyNumeric.html +3 -3
  24. data/docs/doc/Doing/ChronifyString.html +6 -6
  25. data/docs/doc/Doing/Color.html +16 -16
  26. data/docs/doc/Doing/Completion/BashCompletions.html +3 -3
  27. data/docs/doc/Doing/Completion/FigCompletions.html +3 -3
  28. data/docs/doc/Doing/Completion/FishCompletions.html +3 -3
  29. data/docs/doc/Doing/Completion/StringUtils.html +3 -3
  30. data/docs/doc/Doing/Completion/ZshCompletions.html +3 -3
  31. data/docs/doc/Doing/Completion.html +3 -3
  32. data/docs/doc/Doing/Configuration.html +3 -3
  33. data/docs/doc/Doing/DayOneRenderer.html +3 -3
  34. data/docs/doc/Doing/DayoneExport.html +3 -3
  35. data/docs/doc/Doing/DoingExport.html +3 -3
  36. data/docs/doc/Doing/DoingImport.html +3 -3
  37. data/docs/doc/Doing/Entry.html +3 -3
  38. data/docs/doc/Doing/Errors/DoingNoTraceError.html +3 -3
  39. data/docs/doc/Doing/Errors/DoingRuntimeError.html +3 -3
  40. data/docs/doc/Doing/Errors/DoingStandardError.html +3 -3
  41. data/docs/doc/Doing/Errors/EmptyInput.html +3 -3
  42. data/docs/doc/Doing/Errors/HistoryLimitError.html +3 -3
  43. data/docs/doc/Doing/Errors/InvalidPlugin.html +3 -3
  44. data/docs/doc/Doing/Errors/MissingBackupFile.html +3 -3
  45. data/docs/doc/Doing/Errors/NoResults.html +3 -3
  46. data/docs/doc/Doing/Errors/PluginException.html +3 -3
  47. data/docs/doc/Doing/Errors/UserCancelled.html +3 -3
  48. data/docs/doc/Doing/Errors/WrongCommand.html +3 -3
  49. data/docs/doc/Doing/Errors.html +3 -3
  50. data/docs/doc/Doing/HTMLExport.html +3 -3
  51. data/docs/doc/Doing/Hooks.html +3 -3
  52. data/docs/doc/Doing/Item.html +3 -3
  53. data/docs/doc/Doing/ItemDates.html +3 -3
  54. data/docs/doc/Doing/ItemQuery.html +3 -3
  55. data/docs/doc/Doing/ItemState.html +3 -3
  56. data/docs/doc/Doing/ItemTags.html +3 -3
  57. data/docs/doc/Doing/Items.html +3 -3
  58. data/docs/doc/Doing/JSONExport.html +3 -3
  59. data/docs/doc/Doing/JSONImport.html +3 -3
  60. data/docs/doc/Doing/Logger.html +3 -3
  61. data/docs/doc/Doing/MarkdownExport.html +3 -3
  62. data/docs/doc/Doing/Note.html +3 -3
  63. data/docs/doc/Doing/Pager.html +3 -3
  64. data/docs/doc/Doing/Plugins.html +3 -3
  65. data/docs/doc/Doing/Prompt.html +3 -3
  66. data/docs/doc/Doing/PromptChoose.html +3 -3
  67. data/docs/doc/Doing/PromptFZF.html +3 -3
  68. data/docs/doc/Doing/PromptInput.html +3 -3
  69. data/docs/doc/Doing/PromptSTD.html +3 -3
  70. data/docs/doc/Doing/PromptYN.html +3 -3
  71. data/docs/doc/Doing/Section.html +3 -3
  72. data/docs/doc/Doing/StringHighlight.html +3 -3
  73. data/docs/doc/Doing/StringNormalize.html +115 -3
  74. data/docs/doc/Doing/StringQuery.html +4 -4
  75. data/docs/doc/Doing/StringTags.html +3 -3
  76. data/docs/doc/Doing/StringTransform.html +3 -3
  77. data/docs/doc/Doing/StringTruncate.html +3 -3
  78. data/docs/doc/Doing/StringURL.html +3 -3
  79. data/docs/doc/Doing/SymbolNormalize.html +37 -3
  80. data/docs/doc/Doing/TaskPaperExport.html +3 -3
  81. data/docs/doc/Doing/TemplateExport.html +3 -3
  82. data/docs/doc/Doing/TemplateString.html +4 -4
  83. data/docs/doc/Doing/TimingImport.html +3 -3
  84. data/docs/doc/Doing/Types.html +13 -3
  85. data/docs/doc/Doing/Util/Backup.html +3 -3
  86. data/docs/doc/Doing/Util.html +4 -4
  87. data/docs/doc/Doing/Version.html +3 -3
  88. data/docs/doc/Doing/WWID.html +5 -5
  89. data/docs/doc/Doing.html +4 -4
  90. data/docs/doc/FalseClass.html +3 -3
  91. data/docs/doc/GLI/Commands/Help.html +3 -3
  92. data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +3 -3
  93. data/docs/doc/GLI/Commands.html +3 -3
  94. data/docs/doc/GLI.html +3 -3
  95. data/docs/doc/Hash.html +4 -4
  96. data/docs/doc/Numeric.html +3 -3
  97. data/docs/doc/Object.html +3 -3
  98. data/docs/doc/PhraseParser/Operator.html +3 -3
  99. data/docs/doc/PhraseParser/PhraseClause.html +3 -3
  100. data/docs/doc/PhraseParser/Query.html +3 -3
  101. data/docs/doc/PhraseParser/QueryParser.html +3 -3
  102. data/docs/doc/PhraseParser/QueryTransformer.html +3 -3
  103. data/docs/doc/PhraseParser/TermClause.html +3 -3
  104. data/docs/doc/PhraseParser.html +3 -3
  105. data/docs/doc/Status.html +3 -3
  106. data/docs/doc/String.html +4 -4
  107. data/docs/doc/Symbol.html +4 -4
  108. data/docs/doc/Time.html +3 -3
  109. data/docs/doc/TrueClass.html +3 -3
  110. data/docs/doc/_index.html +4 -4
  111. data/docs/doc/class_list.html +3 -6
  112. data/docs/doc/css/full_list.css +3 -3
  113. data/docs/doc/css/style.css +15 -8
  114. data/docs/doc/file.README.html +13 -5
  115. data/docs/doc/file_list.html +2 -5
  116. data/docs/doc/frames.html +1 -1
  117. data/docs/doc/index.html +13 -5
  118. data/docs/doc/js/app.js +267 -348
  119. data/docs/doc/js/full_list.js +24 -52
  120. data/docs/doc/method_list.html +403 -382
  121. data/docs/doc/top-level-namespace.html +3 -3
  122. data/doing.rdoc +65 -1
  123. data/lib/completion/_doing.zsh +9 -9
  124. data/lib/completion/doing.bash +16 -16
  125. data/lib/completion/doing.fish +8 -0
  126. data/lib/completion/doing.ts +90 -0
  127. data/lib/doing/add_options.rb +4 -0
  128. data/lib/doing/normalize.rb +25 -0
  129. data/lib/doing/plugins/export/dayone_export.rb +2 -1
  130. data/lib/doing/plugins/export/html_export.rb +1 -1
  131. data/lib/doing/plugins/export/json_export.rb +2 -1
  132. data/lib/doing/plugins/export/markdown_export.rb +2 -1
  133. data/lib/doing/plugins/export/template_export.rb +2 -1
  134. data/lib/doing/types.rb +2 -0
  135. data/lib/doing/version.rb +1 -1
  136. data/lib/doing/wwid/timers.rb +146 -94
  137. data/lib/examples/plugins/wiki_export/wiki_export.rb +1 -1
  138. metadata +2 -2
@@ -6,7 +6,7 @@
6
6
  <title>
7
7
  Top Level Namespace
8
8
 
9
- &mdash; Documentation by YARD 0.9.38
9
+ &mdash; Documentation by YARD 0.9.36
10
10
 
11
11
  </title>
12
12
 
@@ -216,9 +216,9 @@
216
216
  </div>
217
217
 
218
218
  <div id="footer">
219
- Generated on Sat Mar 21 04:13:32 2026 by
219
+ Generated on Mon Mar 23 04:24:51 2026 by
220
220
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
221
- 0.9.38 (ruby-4.0.1).
221
+ 0.9.36 (ruby-4.0.2).
222
222
  </div>
223
223
 
224
224
  </div>
data/doing.rdoc CHANGED
@@ -5,7 +5,7 @@ record of what you've been doing, complete with tag-based time tracking. The
5
5
  command line tool allows you to add entries, annotate with tags and notes, and
6
6
  view your entries with myriad options, with a focus on a "natural" language syntax.
7
7
 
8
- v2.1.99
8
+ v2.1.103
9
9
 
10
10
  === Global Options
11
11
  === --config_file arg
@@ -933,6 +933,14 @@ Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and -
933
933
  [Must Match] (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
934
934
 
935
935
 
936
+ ===== --by GROUP
937
+
938
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
939
+
940
+ [Default Value] None
941
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
942
+
943
+
936
944
  ===== --case TYPE
937
945
 
938
946
  Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
@@ -1624,6 +1632,14 @@ Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and -
1624
1632
  [Must Match] (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
1625
1633
 
1626
1634
 
1635
+ ===== --by GROUP
1636
+
1637
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
1638
+
1639
+ [Default Value] None
1640
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
1641
+
1642
+
1627
1643
  ===== --case TYPE
1628
1644
 
1629
1645
  Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
@@ -1806,6 +1822,14 @@ List recent entries
1806
1822
 
1807
1823
 
1808
1824
  ===== Options
1825
+ ===== --by GROUP
1826
+
1827
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
1828
+
1829
+ [Default Value] None
1830
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
1831
+
1832
+
1809
1833
  ===== --config_template TEMPLATE_KEY
1810
1834
 
1811
1835
  Output using a template from configuration
@@ -2326,6 +2350,14 @@ Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and -
2326
2350
  [Must Match] (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
2327
2351
 
2328
2352
 
2353
+ ===== --by GROUP
2354
+
2355
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
2356
+
2357
+ [Default Value] None
2358
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
2359
+
2360
+
2329
2361
  ===== -c|--count MAX
2330
2362
 
2331
2363
  Max count to show
@@ -2507,6 +2539,14 @@ Boolean used to combine multiple tags (AND|OR|NOT). Use PATTERN to parse + and -
2507
2539
  [Must Match] (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
2508
2540
 
2509
2541
 
2542
+ ===== --by GROUP
2543
+
2544
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
2545
+
2546
+ [Default Value] None
2547
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
2548
+
2549
+
2510
2550
  ===== --case TYPE
2511
2551
 
2512
2552
  Case sensitivity for search string matching [(c)ase-sensitive, (i)gnore, (s)mart]
@@ -2925,6 +2965,14 @@ View entries before specified time (e.g. 8am, 12:30pm, 15:00)
2925
2965
  [Default Value] None
2926
2966
 
2927
2967
 
2968
+ ===== --by GROUP
2969
+
2970
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
2971
+
2972
+ [Default Value] None
2973
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
2974
+
2975
+
2928
2976
  ===== --config_template TEMPLATE_KEY
2929
2977
 
2930
2978
  Output using a template from configuration
@@ -3112,6 +3160,14 @@ Boolean used to combine multiple tags. Use PATTERN to parse + and - as booleans
3112
3160
  [Must Match] (?i-mx:^(?:and|all|any|or|not|none|p(?:at(?:tern)?)?)$)
3113
3161
 
3114
3162
 
3163
+ ===== --by GROUP
3164
+
3165
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
3166
+
3167
+ [Default Value] None
3168
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
3169
+
3170
+
3115
3171
  ===== -c|--count COUNT
3116
3172
 
3117
3173
  Count to display
@@ -3362,6 +3418,14 @@ View entries before specified time (e.g. 8am, 12:30pm, 15:00)
3362
3418
  [Default Value] None
3363
3419
 
3364
3420
 
3421
+ ===== --by GROUP
3422
+
3423
+ Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section
3424
+
3425
+ [Default Value] None
3426
+ [Must Match] (?i-mx:^(?:t(?:ag(?:s)?)?|s(?:ec(?:tion|tions)?)?|p(?:roj(?:ect|ects)?)?)$)
3427
+
3428
+
3365
3429
  ===== --config_template TEMPLATE_KEY
3366
3430
 
3367
3431
  Output using a template from configuration
@@ -117,10 +117,10 @@ function _doing() {
117
117
  args=( {'(--archive)-a','(-a)--archive'}"[Archive entries]" "--finished[Set finish date to specific date/time]:DATE_STRING:" "--auto[Auto-generate finish dates from next entry's start time]" "--started[Backdate completed date to date string [4pm|20m|2h|yesterday noon]]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--date[Include date]" "--from[Start and end times as a date/time range `doing done --from \"1am to 8am\"`]:TIME_RANGE:" {'(--interactive)-i','(-i)--interactive'}"[Select item(s) to finish from a menu of matching entries]" "--not[Finish items that *don't* match search/tag filters]" {'(--remove)-r','(-r)--remove'}"[Remove @done tag]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--search[Filter entries using a search query]:QUERY:" "--for[Set completion date to start date plus interval]:INTERVAL:" "--tag[Filter entries by tag]:TAG:" {'(--unfinished)-u','(-u)--unfinished'}"[Finish last entry]" "--update[Overwrite existing @done tag with new date]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
118
118
  ;;
119
119
  grep)
120
- args=( "--after[Search entries newer than date]:DATE_STRING:" "--before[Search entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" {'(--delete)-d','(-d)--delete'}"[Delete matching entries]" "--duration[Show elapsed time on entries without @done tag]" {'(--editor)-e','(-e)--editor'}"[Edit matching entries with vim]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Display an interactive menu of results to perform further operations]" "--not[Search items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact string matching]" )
120
+ args=( "--after[Search entries newer than date]:DATE_STRING:" "--before[Search entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--by[Totals grouping]:GROUP:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" {'(--delete)-d','(-d)--delete'}"[Delete matching entries]" "--duration[Show elapsed time on entries without @done tag]" {'(--editor)-e','(-e)--editor'}"[Edit matching entries with vim]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Display an interactive menu of results to perform further operations]" "--not[Search items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact string matching]" )
121
121
  ;;
122
122
  search)
123
- args=( "--after[Search entries newer than date]:DATE_STRING:" "--before[Search entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" {'(--delete)-d','(-d)--delete'}"[Delete matching entries]" "--duration[Show elapsed time on entries without @done tag]" {'(--editor)-e','(-e)--editor'}"[Edit matching entries with vim]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Display an interactive menu of results to perform further operations]" "--not[Search items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact string matching]" )
123
+ args=( "--after[Search entries newer than date]:DATE_STRING:" "--before[Search entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--by[Totals grouping]:GROUP:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" {'(--delete)-d','(-d)--delete'}"[Delete matching entries]" "--duration[Show elapsed time on entries without @done tag]" {'(--editor)-e','(-e)--editor'}"[Edit matching entries with vim]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Display an interactive menu of results to perform further operations]" "--not[Search items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact string matching]" )
124
124
  ;;
125
125
  help)
126
126
  args=( )
@@ -150,7 +150,7 @@ function _doing() {
150
150
  args=( {'(--noauto)-X','(-X)--noauto'}"[Exclude auto tags and default tags]" "--ask[Prompt for note via multi-line input]" "--since[Backdate start date for new entry to date string [4pm|20m|2h|yesterday noon]]:DATE_STRING:" {'(--editor)-e','(-e)--editor'}"[Edit entry with vim]" {'(--finish_last)-f','(-f)--finish_last'}"[Timed entry]" "--from[Set a start and optionally end time as a date range]:TIME_RANGE:" {'(--note)-n','(-n)--note'}"[Include a note]:TEXT:" {'(--section)-s','(-s)--section'}"[Section]:NAME:" )
151
151
  ;;
152
152
  on)
153
- args=( "--after[View entries after specified time]:TIME_STRING:" "--before[View entries before specified time]:TIME_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Time range to show `doing on --from \"12pm to 4pm\"`]:TIME_RANGE:" "--not[Show items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" "--search[Filter entries using a search query]:QUERY:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
153
+ args=( "--after[View entries after specified time]:TIME_STRING:" "--before[View entries before specified time]:TIME_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--by[Totals grouping]:GROUP:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Time range to show `doing on --from \"12pm to 4pm\"`]:TIME_RANGE:" "--not[Show items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" "--search[Filter entries using a search query]:QUERY:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
154
154
  ;;
155
155
  open)
156
156
  args=( {'(--app)-a','(-a)--app'}"[Open with app name]:APP_NAME:" {'(--bundle_id)-b','(-b)--bundle_id'}"[Open with app bundle id]:BUNDLE_ID:" {'(--editor)-e','(-e)--editor'}"[Open with editor command]:COMMAND:" )
@@ -159,7 +159,7 @@ function _doing() {
159
159
  args=( {'(--column)-c','(-c)--column'}"[List in single column for completion]" {'(--type)-t','(-t)--type'}"[List plugins of type]:TYPE:" )
160
160
  ;;
161
161
  recent)
162
- args=( "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" {'(--interactive)-i','(-i)--interactive'}"[Select from a menu of matching entries to perform additional operations]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" )
162
+ args=( "--by[Totals grouping]:GROUP:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" {'(--interactive)-i','(-i)--interactive'}"[Select from a menu of matching entries to perform additional operations]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" )
163
163
  ;;
164
164
  redo)
165
165
  args=( {'(--file)-f','(-f)--file'}"[Specify alternate doing file]:PATH:" {'(--interactive)-i','(-i)--interactive'}"[Select from an interactive menu]" )
@@ -180,10 +180,10 @@ function _doing() {
180
180
  args=( {'(--archive)-a','(-a)--archive'}"[Archive selected items]" "--after[Select entries newer than date]:DATE_STRING:" "--resume[Copy selection as a new entry with current time and no @done tag]" "--before[Select entries older than date]:DATE_STRING:" {'(--cancel)-c','(-c)--cancel'}"[Cancel selected items]" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" {'(--delete)-d','(-d)--delete'}"[Delete selected items]" {'(--editor)-e','(-e)--editor'}"[Edit selected item(s)]" {'(--finish)-f','(-f)--finish'}"[Add @done with current time to selected item(s)]" "--flag[Add flag to selected item(s)]" "--force[Perform action without confirmation]" "--from[Date range]:DATE_OR_RANGE:" {'(--move)-m','(-m)--move'}"[Move selected items to section]:SECTION:" "--menu[Use --no-menu to skip the interactive menu]" "--not[Select items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output entries to format]:FORMAT:" {'(--query)-q','(-q)--query'}"[Initial search query for filtering]:QUERY:" {'(--remove)-r','(-r)--remove'}"[Reverse -c]" {'(--section)-s','(-s)--section'}"[Select from a specific section]:SECTION:" "--save_to[Save selected entries to file using --output format]:FILE:" "--search[Filter entries using a search query]:QUERY:" {'(--tag)-t','(-t)--tag'}"[Tag selected entries]:TAG:" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
181
181
  ;;
182
182
  show)
183
- args=( {'(--age)-a','(-a)--age'}"[Age]:AGE:" "--after[Show entries newer than date]:DATE_STRING:" "--before[Show entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" {'(--count)-c','(-c)--count'}"[Max count to show]:MAX:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" {'(--editor)-e','(-e)--editor'}"[Edit matching entries with vim]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Select from a menu of matching entries to perform additional operations]" {'(--menu)-m','(-m)--menu'}"[Select section or tag to display from a menu]" "--not[Show items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Only show entries within section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" "--search[Filter entries using a search query]:QUERY:" "--sort[Sort order]:ORDER:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
183
+ args=( {'(--age)-a','(-a)--age'}"[Age]:AGE:" "--after[Show entries newer than date]:DATE_STRING:" "--before[Show entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--by[Totals grouping]:GROUP:" {'(--count)-c','(-c)--count'}"[Max count to show]:MAX:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" {'(--editor)-e','(-e)--editor'}"[Edit matching entries with vim]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Select from a menu of matching entries to perform additional operations]" {'(--menu)-m','(-m)--menu'}"[Select section or tag to display from a menu]" "--not[Show items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Only show entries within section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" "--search[Filter entries using a search query]:QUERY:" "--sort[Sort order]:ORDER:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
184
184
  ;;
185
185
  since)
186
- args=( "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--not[Since items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" "--search[Filter entries using a search query]:QUERY:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
186
+ args=( "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--by[Totals grouping]:GROUP:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--not[Since items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" "--search[Filter entries using a search query]:QUERY:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
187
187
  ;;
188
188
  tag)
189
189
  args=( {'(--autotag)-a','(-a)--autotag'}"[Autotag entries based on autotag configuration in ~/]" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" {'(--count)-c','(-c)--count'}"[How many recent entries to tag]:COUNT:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" {'(--date)-d','(-d)--date'}"[Include current date/time with tag]" "--force[Don't ask permission to tag all entries when count is 0]" {'(--interactive)-i','(-i)--interactive'}"[Select item(s) to tag from a menu of matching entries]" "--not[Tag items that *don't* match search/tag filters]" {'(--remove)-r','(-r)--remove'}"[Remove given tag(s)]" "--regex[Interpret tag string as regular expression]" "--rename[Replace existing tag with tag argument]:ORIG_TAG:" {'(--section)-s','(-s)--section'}"[Section]:SECTION_NAME:" "--search[Filter entries using a search query]:QUERY:" "--tag[Filter entries by tag]:TAG:" {'(--unfinished)-u','(-u)--unfinished'}"[Tag last entry]" {'(--value)-v','(-v)--value'}"[Include a value]:VALUE:" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
@@ -201,7 +201,7 @@ function _doing() {
201
201
  args=( )
202
202
  ;;
203
203
  today)
204
- args=( "--after[View entries after specified time]:TIME_STRING:" "--before[View entries before specified time]:TIME_STRING:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Time range to show `doing today --from \"12pm to 4pm\"`]:TIME_RANGE:" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Specify a section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" )
204
+ args=( "--after[View entries after specified time]:TIME_STRING:" "--before[View entries before specified time]:TIME_STRING:" "--by[Totals grouping]:GROUP:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Time range to show `doing today --from \"12pm to 4pm\"`]:TIME_RANGE:" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Specify a section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" )
205
205
  ;;
206
206
  todo)
207
207
  args=( "--ask[Prompt for note via multi-line input]" {'(--editor)-e','(-e)--editor'}"[Edit entry with vim]" {'(--note)-n','(-n)--note'}"[Note]:TEXT:" )
@@ -213,7 +213,7 @@ function _doing() {
213
213
  args=( "--beta[Check for pre-release version]" )
214
214
  ;;
215
215
  view)
216
- args=( "--after[Show entries newer than date]:DATE_STRING:" "--age[Age]:AGE:" "--before[Show entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" {'(--count)-c','(-c)--count'}"[Count to display]:COUNT:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--color[Include colors in output]" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Select from a menu of matching entries to perform additional operations]" "--not[Show items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--search[Filter entries using a search query]:QUERY:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--totals[Show intervals with totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
216
+ args=( "--after[Show entries newer than date]:DATE_STRING:" "--age[Age]:AGE:" "--before[Show entries older than date]:DATE_STRING:" "--bool[Boolean used to combine multiple tags]:BOOLEAN:" "--by[Totals grouping]:GROUP:" {'(--count)-c','(-c)--count'}"[Count to display]:COUNT:" "--case[Case sensitivity for search string matching [(c)ase-sensitive]:TYPE:" "--color[Include colors in output]" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Date range]:DATE_OR_RANGE:" {'(--hilite)-h','(-h)--hilite'}"[Highlight search matches in output]" {'(--interactive)-i','(-i)--interactive'}"[Select from a menu of matching entries to perform additional operations]" "--not[Show items that *don't* match search/tag filters]" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section]:NAME:" "--search[Filter entries using a search query]:QUERY:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag[Filter entries by tag]:TAG:" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--totals[Show intervals with totals at the end of output]" "--val[Perform a tag value query]:QUERY:" {'(--exact)-x','(-x)--exact'}"[Force exact search string matching]" )
217
217
  ;;
218
218
  views)
219
219
  args=( {'(--column)-c','(-c)--column'}"[List in single column]" {'(--editor)-e','(-e)--editor'}"[Open YAML for view in editor]" {'(--output)-o','(-o)--output'}"[Output/edit view in alternative format]:FORMAT:" {'(--remove)-r','(-r)--remove'}"[Delete view config]" )
@@ -222,7 +222,7 @@ function _doing() {
222
222
  args=( "--after[Include entries newer than date]:DATE_STRING:" {'(--bool)-b','(-b)--bool'}"[Tag boolean]:BOOLEAN:" "--before[Include entries older than date]:DATE_STRING:" {'(--from)-f','(-f)--from'}"[Date range to include]:DATE_OR_RANGE:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Section to rotate]:SECTION_NAME:" "--search[Search filter]:QUERY:" "--tag[Tag filter]:TAG:" )
223
223
  ;;
224
224
  yesterday)
225
- args=( "--after[View entries after specified time]:TIME_STRING:" "--before[View entries before specified time]:TIME_STRING:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Time range to show `doing yesterday --from \"12pm to 4pm\"`]:TIME_RANGE:" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Specify a section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" )
225
+ args=( "--after[View entries after specified time]:TIME_STRING:" "--before[View entries before specified time]:TIME_STRING:" "--by[Totals grouping]:GROUP:" "--config_template[Output using a template from configuration]:TEMPLATE_KEY:" "--duration[Show elapsed time on entries without @done tag]" "--from[Time range to show `doing yesterday --from \"12pm to 4pm\"`]:TIME_RANGE:" {'(--output)-o','(-o)--output'}"[Output to export format]:FORMAT:" "--only_timed[Only show items with recorded time intervals]" {'(--section)-s','(-s)--section'}"[Specify a section]:NAME:" "--save[Save all current command line options as a new view]:VIEW_NAME:" {'(--times)-t','(-t)--times'}"[Show time intervals on @done tasks]" "--tag_order[Tag sort direction]:DIRECTION:" "--tag_sort[Sort tags by]:KEY:" "--template[Override output format with a template string containing %placeholders]:TEMPLATE_STRING:" "--title[Title string to be used for output formats that require it]:TITLE:" "--totals[Show time totals at the end of output]" )
226
226
  ;;
227
227
  esac
228
228
 
@@ -121,9 +121,9 @@ _doing_finish() {
121
121
  _doing_grep() {
122
122
 
123
123
  if [[ "$token" == --* ]]; then
124
- COMPREPLY=( $( compgen -W '--after --before --bool --case --config_template --delete --duration --editor --from --hilite --interactive --not --output --only_timed --section --save --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
124
+ COMPREPLY=( $( compgen -W '--after --before --bool --by --case --config_template --delete --duration --editor --from --hilite --interactive --not --output --only_timed --section --save --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
125
125
  elif [[ "$token" == -* ]]; then
126
- COMPREPLY=( $( compgen -W '-d -e -h -i -o -s -t -x --after --before --bool --case --config_template --delete --duration --editor --from --hilite --interactive --not --output --only_timed --section --save --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
126
+ COMPREPLY=( $( compgen -W '-d -e -h -i -o -s -t -x --after --before --bool --by --case --config_template --delete --duration --editor --from --hilite --interactive --not --output --only_timed --section --save --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
127
127
 
128
128
  fi
129
129
  }
@@ -201,9 +201,9 @@ _doing_now() {
201
201
  _doing_on() {
202
202
 
203
203
  if [[ "$token" == --* ]]; then
204
- COMPREPLY=( $( compgen -W '--after --before --bool --case --config_template --duration --from --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
204
+ COMPREPLY=( $( compgen -W '--after --before --bool --by --case --config_template --duration --from --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
205
205
  elif [[ "$token" == -* ]]; then
206
- COMPREPLY=( $( compgen -W '-o -s -t -x --after --before --bool --case --config_template --duration --from --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
206
+ COMPREPLY=( $( compgen -W '-o -s -t -x --after --before --bool --by --case --config_template --duration --from --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
207
207
 
208
208
  fi
209
209
  }
@@ -231,9 +231,9 @@ _doing_plugins() {
231
231
  _doing_recent() {
232
232
 
233
233
  if [[ "$token" == --* ]]; then
234
- COMPREPLY=( $( compgen -W '--config_template --duration --interactive --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
234
+ COMPREPLY=( $( compgen -W '--by --config_template --duration --interactive --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
235
235
  elif [[ "$token" == -* ]]; then
236
- COMPREPLY=( $( compgen -W '-i -o -s -t --config_template --duration --interactive --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
236
+ COMPREPLY=( $( compgen -W '-i -o -s -t --by --config_template --duration --interactive --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
237
237
 
238
238
  fi
239
239
  }
@@ -286,9 +286,9 @@ local words=$(doing sections)
286
286
  IFS="$OLD_IFS"
287
287
 
288
288
  if [[ "$token" == --* ]]; then
289
- COMPREPLY=( $( compgen -W '--age --after --before --bool --count --case --config_template --duration --editor --from --hilite --interactive --menu --not --output --only_timed --section --save --search --sort --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
289
+ COMPREPLY=( $( compgen -W '--age --after --before --bool --by --count --case --config_template --duration --editor --from --hilite --interactive --menu --not --output --only_timed --section --save --search --sort --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
290
290
  elif [[ "$token" == -* ]]; then
291
- COMPREPLY=( $( compgen -W '-a -c -e -h -i -m -o -s -t -x --age --after --before --bool --count --case --config_template --duration --editor --from --hilite --interactive --menu --not --output --only_timed --section --save --search --sort --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
291
+ COMPREPLY=( $( compgen -W '-a -c -e -h -i -m -o -s -t -x --age --after --before --bool --by --count --case --config_template --duration --editor --from --hilite --interactive --menu --not --output --only_timed --section --save --search --sort --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
292
292
  else
293
293
  local nocasematchWasOff=0
294
294
  shopt nocasematch >/dev/null || nocasematchWasOff=1
@@ -311,9 +311,9 @@ IFS="$OLD_IFS"
311
311
  _doing_since() {
312
312
 
313
313
  if [[ "$token" == --* ]]; then
314
- COMPREPLY=( $( compgen -W '--bool --case --config_template --duration --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
314
+ COMPREPLY=( $( compgen -W '--bool --by --case --config_template --duration --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
315
315
  elif [[ "$token" == -* ]]; then
316
- COMPREPLY=( $( compgen -W '-o -s -t -x --bool --case --config_template --duration --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
316
+ COMPREPLY=( $( compgen -W '-o -s -t -x --bool --by --case --config_template --duration --not --output --only_timed --section --save --search --times --tag --tag_order --tag_sort --template --title --totals --val --exact' -- $token ) )
317
317
 
318
318
  fi
319
319
  }
@@ -361,9 +361,9 @@ _doing_template() {
361
361
  _doing_today() {
362
362
 
363
363
  if [[ "$token" == --* ]]; then
364
- COMPREPLY=( $( compgen -W '--after --before --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
364
+ COMPREPLY=( $( compgen -W '--after --before --by --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
365
365
  elif [[ "$token" == -* ]]; then
366
- COMPREPLY=( $( compgen -W '-o -s -t --after --before --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
366
+ COMPREPLY=( $( compgen -W '-o -s -t --after --before --by --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
367
367
 
368
368
  fi
369
369
  }
@@ -406,9 +406,9 @@ local words=$(doing views)
406
406
  IFS="$OLD_IFS"
407
407
 
408
408
  if [[ "$token" == --* ]]; then
409
- COMPREPLY=( $( compgen -W '--after --age --before --bool --count --case --color --config_template --duration --from --hilite --interactive --not --output --only_timed --section --search --times --tag --tag_order --tag_sort --template --totals --val --exact' -- $token ) )
409
+ COMPREPLY=( $( compgen -W '--after --age --before --bool --by --count --case --color --config_template --duration --from --hilite --interactive --not --output --only_timed --section --search --times --tag --tag_order --tag_sort --template --totals --val --exact' -- $token ) )
410
410
  elif [[ "$token" == -* ]]; then
411
- COMPREPLY=( $( compgen -W '-c -h -i -o -s -t -x --after --age --before --bool --count --case --color --config_template --duration --from --hilite --interactive --not --output --only_timed --section --search --times --tag --tag_order --tag_sort --template --totals --val --exact' -- $token ) )
411
+ COMPREPLY=( $( compgen -W '-c -h -i -o -s -t -x --after --age --before --bool --by --count --case --color --config_template --duration --from --hilite --interactive --not --output --only_timed --section --search --times --tag --tag_order --tag_sort --template --totals --val --exact' -- $token ) )
412
412
  else
413
413
  local nocasematchWasOff=0
414
414
  shopt nocasematch >/dev/null || nocasematchWasOff=1
@@ -451,9 +451,9 @@ _doing_wiki() {
451
451
  _doing_yesterday() {
452
452
 
453
453
  if [[ "$token" == --* ]]; then
454
- COMPREPLY=( $( compgen -W '--after --before --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
454
+ COMPREPLY=( $( compgen -W '--after --before --by --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
455
455
  elif [[ "$token" == -* ]]; then
456
- COMPREPLY=( $( compgen -W '-o -s -t --after --before --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
456
+ COMPREPLY=( $( compgen -W '-o -s -t --after --before --by --config_template --duration --from --output --only_timed --section --save --times --tag_order --tag_sort --template --title --totals' -- $token ) )
457
457
 
458
458
  fi
459
459
  }
@@ -275,6 +275,7 @@ complete -c doing -l exact -s x -f -n '__fish_doing_using_command finish' -d Fo
275
275
  complete -c doing -l after -f -r -n '__fish_doing_using_command grep search' -d Search\ entries\ newer\ than\ date
276
276
  complete -c doing -l before -f -r -n '__fish_doing_using_command grep search' -d Search\ entries\ older\ than\ date
277
277
  complete -c doing -l bool -f -r -n '__fish_doing_using_command grep search' -d Boolean\ used\ to\ combine\ multiple\ tags
278
+ complete -c doing -l by -f -r -n '__fish_doing_using_command grep search' -d Totals\ grouping
278
279
  complete -c doing -l case -f -r -n '__fish_doing_using_command grep search' -d Case\ sensitivity\ for\ search\ string\ matching\ \[\(c\)ase-sensitive
279
280
  complete -c doing -l config_template -f -r -n '__fish_doing_using_command grep search' -d Output\ using\ a\ template\ from\ configuration
280
281
  complete -c doing -l delete -s d -f -n '__fish_doing_using_command grep search' -d Delete\ matching\ entries
@@ -373,6 +374,7 @@ complete -c doing -l section -s s -f -r -n '__fish_doing_using_command now next'
373
374
  complete -c doing -l after -f -r -n '__fish_doing_using_command on' -d View\ entries\ after\ specified\ time
374
375
  complete -c doing -l before -f -r -n '__fish_doing_using_command on' -d View\ entries\ before\ specified\ time
375
376
  complete -c doing -l bool -f -r -n '__fish_doing_using_command on' -d Boolean\ used\ to\ combine\ multiple\ tags
377
+ complete -c doing -l by -f -r -n '__fish_doing_using_command on' -d Totals\ grouping
376
378
  complete -c doing -l case -f -r -n '__fish_doing_using_command on' -d Case\ sensitivity\ for\ search\ string\ matching\ \[\(c\)ase-sensitive
377
379
  complete -c doing -l config_template -f -r -n '__fish_doing_using_command on' -d Output\ using\ a\ template\ from\ configuration
378
380
  complete -c doing -l duration -f -n '__fish_doing_using_command on' -d Show\ elapsed\ time\ on\ entries\ without\ @done\ tag
@@ -397,6 +399,7 @@ complete -c doing -l bundle_id -s b -f -r -n '__fish_doing_using_command open' -
397
399
  complete -c doing -l editor -s e -f -r -n '__fish_doing_using_command open' -d Open\ with\ editor\ command
398
400
  complete -c doing -l column -s c -f -n '__fish_doing_using_command plugins' -d List\ in\ single\ column\ for\ completion
399
401
  complete -c doing -l type -s t -f -r -n '__fish_doing_using_command plugins' -d List\ plugins\ of\ type
402
+ complete -c doing -l by -f -r -n '__fish_doing_using_command recent' -d Totals\ grouping
400
403
  complete -c doing -l config_template -f -r -n '__fish_doing_using_command recent' -d Output\ using\ a\ template\ from\ configuration
401
404
  complete -c doing -l duration -f -n '__fish_doing_using_command recent' -d Show\ elapsed\ time\ on\ entries\ without\ @done\ tag
402
405
  complete -c doing -l interactive -s i -f -n '__fish_doing_using_command recent' -d Select\ from\ a\ menu\ of\ matching\ entries\ to\ perform\ additional\ operations
@@ -462,6 +465,7 @@ complete -c doing -l age -s a -f -r -n '__fish_doing_using_command show' -d Age
462
465
  complete -c doing -l after -f -r -n '__fish_doing_using_command show' -d Show\ entries\ newer\ than\ date
463
466
  complete -c doing -l before -f -r -n '__fish_doing_using_command show' -d Show\ entries\ older\ than\ date
464
467
  complete -c doing -l bool -f -r -n '__fish_doing_using_command show' -d Boolean\ used\ to\ combine\ multiple\ tags
468
+ complete -c doing -l by -f -r -n '__fish_doing_using_command show' -d Totals\ grouping
465
469
  complete -c doing -l count -s c -f -r -n '__fish_doing_using_command show' -d Max\ count\ to\ show
466
470
  complete -c doing -l case -f -r -n '__fish_doing_using_command show' -d Case\ sensitivity\ for\ search\ string\ matching\ \[\(c\)ase-sensitive
467
471
  complete -c doing -l config_template -f -r -n '__fish_doing_using_command show' -d Output\ using\ a\ template\ from\ configuration
@@ -488,6 +492,7 @@ complete -c doing -l totals -f -n '__fish_doing_using_command show' -d Show\ t
488
492
  complete -c doing -l val -f -r -n '__fish_doing_using_command show' -d Perform\ a\ tag\ value\ query
489
493
  complete -c doing -l exact -s x -f -n '__fish_doing_using_command show' -d Force\ exact\ search\ string\ matching
490
494
  complete -c doing -l bool -f -r -n '__fish_doing_using_command since' -d Boolean\ used\ to\ combine\ multiple\ tags
495
+ complete -c doing -l by -f -r -n '__fish_doing_using_command since' -d Totals\ grouping
491
496
  complete -c doing -l case -f -r -n '__fish_doing_using_command since' -d Case\ sensitivity\ for\ search\ string\ matching\ \[\(c\)ase-sensitive
492
497
  complete -c doing -l config_template -f -r -n '__fish_doing_using_command since' -d Output\ using\ a\ template\ from\ configuration
493
498
  complete -c doing -l duration -f -n '__fish_doing_using_command since' -d Show\ elapsed\ time\ on\ entries\ without\ @done\ tag
@@ -546,6 +551,7 @@ complete -c doing -l path -s p -f -r -n '__fish_doing_using_command template' -d
546
551
  complete -c doing -l save -s s -f -n '__fish_doing_using_command template' -d Save\ template\ to\ file\ instead\ of\ STDOUT
547
552
  complete -c doing -l after -f -r -n '__fish_doing_using_command today' -d View\ entries\ after\ specified\ time
548
553
  complete -c doing -l before -f -r -n '__fish_doing_using_command today' -d View\ entries\ before\ specified\ time
554
+ complete -c doing -l by -f -r -n '__fish_doing_using_command today' -d Totals\ grouping
549
555
  complete -c doing -l config_template -f -r -n '__fish_doing_using_command today' -d Output\ using\ a\ template\ from\ configuration
550
556
  complete -c doing -l duration -f -n '__fish_doing_using_command today' -d Show\ elapsed\ time\ on\ entries\ without\ @done\ tag
551
557
  complete -c doing -l from -f -r -n '__fish_doing_using_command today' -d Time\ range\ to\ show\ \`doing\ today\ --from\ \"12pm\ to\ 4pm\"\`
@@ -571,6 +577,7 @@ complete -c doing -l after -f -r -n '__fish_doing_using_command view' -d Show\
571
577
  complete -c doing -l age -f -r -n '__fish_doing_using_command view' -d Age
572
578
  complete -c doing -l before -f -r -n '__fish_doing_using_command view' -d Show\ entries\ older\ than\ date
573
579
  complete -c doing -l bool -f -r -n '__fish_doing_using_command view' -d Boolean\ used\ to\ combine\ multiple\ tags
580
+ complete -c doing -l by -f -r -n '__fish_doing_using_command view' -d Totals\ grouping
574
581
  complete -c doing -l count -s c -f -r -n '__fish_doing_using_command view' -d Count\ to\ display
575
582
  complete -c doing -l case -f -r -n '__fish_doing_using_command view' -d Case\ sensitivity\ for\ search\ string\ matching\ \[\(c\)ase-sensitive
576
583
  complete -c doing -l color -f -n '__fish_doing_using_command view' -d Include\ colors\ in\ output
@@ -606,6 +613,7 @@ complete -c doing -l search -f -r -n '__fish_doing_using_command wiki' -d Searc
606
613
  complete -c doing -l tag -f -r -n '__fish_doing_using_command wiki' -d Tag\ filter
607
614
  complete -c doing -l after -f -r -n '__fish_doing_using_command yesterday' -d View\ entries\ after\ specified\ time
608
615
  complete -c doing -l before -f -r -n '__fish_doing_using_command yesterday' -d View\ entries\ before\ specified\ time
616
+ complete -c doing -l by -f -r -n '__fish_doing_using_command yesterday' -d Totals\ grouping
609
617
  complete -c doing -l config_template -f -r -n '__fish_doing_using_command yesterday' -d Output\ using\ a\ template\ from\ configuration
610
618
  complete -c doing -l duration -f -n '__fish_doing_using_command yesterday' -d Show\ elapsed\ time\ on\ entries\ without\ @done\ tag
611
619
  complete -c doing -l from -f -r -n '__fish_doing_using_command yesterday' -d Time\ range\ to\ show\ \`doing\ yesterday\ --from\ \"12pm\ to\ 4pm\"\`
@@ -1344,6 +1344,16 @@ const completionSpec: Fig.Spec = {
1344
1344
 
1345
1345
  },
1346
1346
 
1347
+ {
1348
+ name: ["--by"],
1349
+ description: "Totals grouping",
1350
+ args: {
1351
+ name: "GROUP",
1352
+ description: "GROUP",
1353
+ },
1354
+
1355
+ },
1356
+
1347
1357
  {
1348
1358
  name: ["--case"],
1349
1359
  description: "Case sensitivity for search string matching [(c)ase-sensitive",
@@ -1562,6 +1572,16 @@ const completionSpec: Fig.Spec = {
1562
1572
 
1563
1573
  },
1564
1574
 
1575
+ {
1576
+ name: ["--by"],
1577
+ description: "Totals grouping",
1578
+ args: {
1579
+ name: "GROUP",
1580
+ description: "GROUP",
1581
+ },
1582
+
1583
+ },
1584
+
1565
1585
  {
1566
1586
  name: ["--case"],
1567
1587
  description: "Case sensitivity for search string matching [(c)ase-sensitive",
@@ -2621,6 +2641,16 @@ const completionSpec: Fig.Spec = {
2621
2641
 
2622
2642
  },
2623
2643
 
2644
+ {
2645
+ name: ["--by"],
2646
+ description: "Totals grouping",
2647
+ args: {
2648
+ name: "GROUP",
2649
+ description: "GROUP",
2650
+ },
2651
+
2652
+ },
2653
+
2624
2654
  {
2625
2655
  name: ["--case"],
2626
2656
  description: "Case sensitivity for search string matching [(c)ase-sensitive",
@@ -2857,6 +2887,16 @@ const completionSpec: Fig.Spec = {
2857
2887
  name: "recent",
2858
2888
  description: "List recent entries",
2859
2889
  options: [
2890
+ {
2891
+ name: ["--by"],
2892
+ description: "Totals grouping",
2893
+ args: {
2894
+ name: "GROUP",
2895
+ description: "GROUP",
2896
+ },
2897
+
2898
+ },
2899
+
2860
2900
  {
2861
2901
  name: ["--config_template"],
2862
2902
  description: "Output using a template from configuration",
@@ -3569,6 +3609,16 @@ const completionSpec: Fig.Spec = {
3569
3609
 
3570
3610
  },
3571
3611
 
3612
+ {
3613
+ name: ["--by"],
3614
+ description: "Totals grouping",
3615
+ args: {
3616
+ name: "GROUP",
3617
+ description: "GROUP",
3618
+ },
3619
+
3620
+ },
3621
+
3572
3622
  {
3573
3623
  name: ["-c", "--count"],
3574
3624
  description: "Max count to show",
@@ -3797,6 +3847,16 @@ const completionSpec: Fig.Spec = {
3797
3847
 
3798
3848
  },
3799
3849
 
3850
+ {
3851
+ name: ["--by"],
3852
+ description: "Totals grouping",
3853
+ args: {
3854
+ name: "GROUP",
3855
+ description: "GROUP",
3856
+ },
3857
+
3858
+ },
3859
+
3800
3860
  {
3801
3861
  name: ["--case"],
3802
3862
  description: "Case sensitivity for search string matching [(c)ase-sensitive",
@@ -4319,6 +4379,16 @@ const completionSpec: Fig.Spec = {
4319
4379
 
4320
4380
  },
4321
4381
 
4382
+ {
4383
+ name: ["--by"],
4384
+ description: "Totals grouping",
4385
+ args: {
4386
+ name: "GROUP",
4387
+ description: "GROUP",
4388
+ },
4389
+
4390
+ },
4391
+
4322
4392
  {
4323
4393
  name: ["--config_template"],
4324
4394
  description: "Output using a template from configuration",
@@ -4565,6 +4635,16 @@ const completionSpec: Fig.Spec = {
4565
4635
 
4566
4636
  },
4567
4637
 
4638
+ {
4639
+ name: ["--by"],
4640
+ description: "Totals grouping",
4641
+ args: {
4642
+ name: "GROUP",
4643
+ description: "GROUP",
4644
+ },
4645
+
4646
+ },
4647
+
4568
4648
  {
4569
4649
  name: ["-c", "--count"],
4570
4650
  description: "Count to display",
@@ -4887,6 +4967,16 @@ const completionSpec: Fig.Spec = {
4887
4967
 
4888
4968
  },
4889
4969
 
4970
+ {
4971
+ name: ["--by"],
4972
+ description: "Totals grouping",
4973
+ args: {
4974
+ name: "GROUP",
4975
+ description: "GROUP",
4976
+ },
4977
+
4978
+ },
4979
+
4890
4980
  {
4891
4981
  name: ["--config_template"],
4892
4982
  description: "Output using a template from configuration",
@@ -134,6 +134,10 @@ def add_options(type, cmd, default_template: 'default')
134
134
 
135
135
  cmd.desc 'Only show items with recorded time intervals'
136
136
  cmd.switch [:only_timed], default_value: false, negatable: false
137
+
138
+ cmd.desc 'Totals grouping (tags|section). Can be repeated, e.g. --by tags --by section'
139
+ cmd.arg_name 'GROUP'
140
+ cmd.flag [:by], must_match: REGEX_TOTALS_BY, multiple: true, type: TotalsBySymbol
137
141
  when :tag_filter
138
142
  cmd.desc 'Filter entries by tag. Combine multiple tags with a comma. Wildcards allowed (*, ?)'
139
143
  cmd.arg_name 'TAG'