doing 1.0.93 → 2.0.6.pre
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.
- checksums.yaml +4 -4
- data/AUTHORS +19 -0
- data/CHANGELOG.md +616 -0
- data/COMMANDS.md +1181 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +110 -0
- data/LICENSE +23 -0
- data/README.md +15 -699
- data/Rakefile +79 -0
- data/_config.yml +1 -0
- data/bin/doing +1055 -494
- data/doing.gemspec +34 -0
- data/doing.rdoc +1839 -0
- data/example_plugin.rb +209 -0
- data/generate_completions.sh +5 -0
- data/img/doing-colors.jpg +0 -0
- data/img/doing-printf-wrap-800.jpg +0 -0
- data/img/doing-show-note-formatting-800.jpg +0 -0
- data/lib/completion/_doing.zsh +203 -0
- data/lib/completion/doing.bash +449 -0
- data/lib/completion/doing.fish +329 -0
- data/lib/doing/array.rb +8 -0
- data/lib/doing/cli_status.rb +70 -0
- data/lib/doing/colors.rb +136 -0
- data/lib/doing/configuration.rb +312 -0
- data/lib/doing/errors.rb +109 -0
- data/lib/doing/hash.rb +31 -0
- data/lib/doing/hooks.rb +59 -0
- data/lib/doing/item.rb +155 -0
- data/lib/doing/log_adapter.rb +344 -0
- data/lib/doing/markdown_document_listener.rb +174 -0
- data/lib/doing/note.rb +59 -0
- data/lib/doing/pager.rb +95 -0
- data/lib/doing/plugin_manager.rb +208 -0
- data/lib/doing/plugins/export/csv_export.rb +48 -0
- data/lib/doing/plugins/export/html_export.rb +83 -0
- data/lib/doing/plugins/export/json_export.rb +140 -0
- data/lib/doing/plugins/export/markdown_export.rb +85 -0
- data/lib/doing/plugins/export/taskpaper_export.rb +34 -0
- data/lib/doing/plugins/export/template_export.rb +141 -0
- data/lib/doing/plugins/import/cal_to_json.scpt +0 -0
- data/lib/doing/plugins/import/calendar_import.rb +76 -0
- data/lib/doing/plugins/import/doing_import.rb +144 -0
- data/lib/doing/plugins/import/timing_import.rb +78 -0
- data/lib/doing/string.rb +348 -0
- data/lib/doing/symbol.rb +16 -0
- data/lib/doing/time.rb +18 -0
- data/lib/doing/util.rb +186 -0
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +1868 -2349
- data/lib/doing/wwidfile.rb +117 -0
- data/lib/doing.rb +43 -3
- data/lib/examples/commands/autotag.rb +63 -0
- data/lib/examples/commands/wiki.rb +81 -0
- data/lib/examples/plugins/hooks.rb +22 -0
- data/lib/examples/plugins/say_export.rb +202 -0
- data/lib/examples/plugins/templates/wiki.css +169 -0
- data/lib/examples/plugins/templates/wiki.haml +27 -0
- data/lib/examples/plugins/templates/wiki_index.haml +18 -0
- data/lib/examples/plugins/wiki_export.rb +87 -0
- data/lib/templates/doing-markdown.erb +5 -0
- data/man/doing.1 +964 -0
- data/man/doing.1.html +711 -0
- data/man/doing.1.ronn +600 -0
- data/package-lock.json +3 -0
- data/rdoc_to_mmd.rb +42 -0
- data/rdocfixer.rb +13 -0
- data/scripts/generate_bash_completions.rb +211 -0
- data/scripts/generate_fish_completions.rb +204 -0
- data/scripts/generate_zsh_completions.rb +168 -0
- metadata +82 -7
- data/lib/doing/helpers.rb +0 -191
- data/lib/doing/markdown_export.rb +0 -16
data/COMMANDS.md
ADDED
@@ -0,0 +1,1181 @@
|
|
1
|
+
# doing CLI
|
2
|
+
|
3
|
+
A CLI for a What Was I Doing system
|
4
|
+
|
5
|
+
*v1.0.90*
|
6
|
+
|
7
|
+
## Global Options
|
8
|
+
|
9
|
+
### `--config_file` arg
|
10
|
+
|
11
|
+
Use a specific configuration file
|
12
|
+
|
13
|
+
*Default Value:* `~/.doingrc`
|
14
|
+
|
15
|
+
### `-f` | `--doing_file` arg
|
16
|
+
|
17
|
+
Specify a different doing_file
|
18
|
+
|
19
|
+
### `--help`
|
20
|
+
|
21
|
+
Show this message
|
22
|
+
|
23
|
+
### `--[no-]notes`
|
24
|
+
|
25
|
+
Output notes if included in the template
|
26
|
+
|
27
|
+
### `--stdout`
|
28
|
+
|
29
|
+
Send results report to STDOUT instead of STDERR
|
30
|
+
|
31
|
+
### `--version`
|
32
|
+
|
33
|
+
Display the program version
|
34
|
+
|
35
|
+
### `-x`|`--[no-]noauto`
|
36
|
+
|
37
|
+
Exclude auto tags and default tags
|
38
|
+
|
39
|
+
## Commands
|
40
|
+
|
41
|
+
### `$ doing` <mark>`add_section`</mark> `SECTION_NAME`
|
42
|
+
|
43
|
+
*Add a new section to the "doing" file*
|
44
|
+
|
45
|
+
* * * * * *
|
46
|
+
|
47
|
+
### `$ doing` <mark>`again|resume`</mark> ``
|
48
|
+
|
49
|
+
*Repeat last entry as new entry*
|
50
|
+
|
51
|
+
#### Options
|
52
|
+
|
53
|
+
##### `--bool` BOOLEAN
|
54
|
+
|
55
|
+
Boolean used to combine multiple tags
|
56
|
+
|
57
|
+
*Default Value:* `AND`
|
58
|
+
|
59
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
60
|
+
|
61
|
+
##### `--in` SECTION_NAME
|
62
|
+
|
63
|
+
Add new entry to section (default: same section as repeated entry)
|
64
|
+
|
65
|
+
##### `-n` | `--note` TEXT
|
66
|
+
|
67
|
+
Note
|
68
|
+
|
69
|
+
##### `-s` | `--section` NAME
|
70
|
+
|
71
|
+
Section
|
72
|
+
|
73
|
+
*Default Value:* `All`
|
74
|
+
|
75
|
+
##### `--search` QUERY
|
76
|
+
|
77
|
+
Repeat last entry matching search. Surround with
|
78
|
+
slashes for regex (e.g. "/query/").
|
79
|
+
|
80
|
+
##### `--tag` TAG
|
81
|
+
|
82
|
+
Repeat last entry matching tags. Combine multiple tags with a comma.
|
83
|
+
|
84
|
+
* * * * * *
|
85
|
+
|
86
|
+
### `$ doing` <mark>`archive`</mark> `SECTION_NAME`
|
87
|
+
|
88
|
+
*Move entries between sections*
|
89
|
+
|
90
|
+
#### Options
|
91
|
+
|
92
|
+
##### `--before` DATE_STRING
|
93
|
+
|
94
|
+
Archive entries older than date
|
95
|
+
(Flexible date format, e.g. 1/27/2021, 2020-07-19, or Monday 3pm)
|
96
|
+
|
97
|
+
##### `--bool` BOOLEAN
|
98
|
+
|
99
|
+
Tag boolean (AND|OR|NOT)
|
100
|
+
|
101
|
+
*Default Value:* `AND`
|
102
|
+
|
103
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
104
|
+
|
105
|
+
##### `-k` | `--keep` X
|
106
|
+
|
107
|
+
How many items to keep (ignored if archiving by tag or search)
|
108
|
+
|
109
|
+
*Must Match:* `(?-mix:^\d+$)`
|
110
|
+
|
111
|
+
##### `--search` QUERY
|
112
|
+
|
113
|
+
Search filter
|
114
|
+
|
115
|
+
##### `-t` | `--to` SECTION_NAME
|
116
|
+
|
117
|
+
Move entries to
|
118
|
+
|
119
|
+
*Default Value:* `Archive`
|
120
|
+
|
121
|
+
##### `--tag` TAG
|
122
|
+
|
123
|
+
Tag filter, combine multiple tags with a comma. Added for compatibility with other commands.
|
124
|
+
|
125
|
+
##### `--[no-]label`
|
126
|
+
|
127
|
+
Label moved items with @from(SECTION_NAME)
|
128
|
+
|
129
|
+
* * * * * *
|
130
|
+
|
131
|
+
### `$ doing` <mark>`cancel`</mark> `COUNT`
|
132
|
+
|
133
|
+
*End last X entries with no time tracked*
|
134
|
+
|
135
|
+
> Adds @done tag without datestamp so no elapsed time is recorded. Alias for `doing finish --no-date`.
|
136
|
+
|
137
|
+
#### Options
|
138
|
+
|
139
|
+
##### `--bool` BOOLEAN
|
140
|
+
|
141
|
+
Boolean (AND|OR|NOT) with which to combine multiple tag filters
|
142
|
+
|
143
|
+
*Default Value:* `AND`
|
144
|
+
|
145
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
146
|
+
|
147
|
+
##### `-s` | `--section` NAME
|
148
|
+
|
149
|
+
Section
|
150
|
+
|
151
|
+
##### `--tag` TAG
|
152
|
+
|
153
|
+
Cancel the last X entries containing TAG. Separate multiple tags with comma (--tag=tag1,tag2)
|
154
|
+
|
155
|
+
##### `-a`|`--archive`
|
156
|
+
|
157
|
+
Archive entries
|
158
|
+
|
159
|
+
##### `-u`|`--unfinished`
|
160
|
+
|
161
|
+
Cancel last entry (or entries) not already marked @done
|
162
|
+
|
163
|
+
* * * * * *
|
164
|
+
|
165
|
+
### `$ doing` <mark>`choose`</mark> ``
|
166
|
+
|
167
|
+
*Select a section to display from a menu*
|
168
|
+
|
169
|
+
* * * * * *
|
170
|
+
|
171
|
+
### `$ doing` <mark>`colors`</mark> ``
|
172
|
+
|
173
|
+
*List available color variables for configuration templates and views*
|
174
|
+
|
175
|
+
* * * * * *
|
176
|
+
|
177
|
+
### `$ doing` <mark>`config`</mark> ``
|
178
|
+
|
179
|
+
*Edit the configuration file*
|
180
|
+
|
181
|
+
#### Options
|
182
|
+
|
183
|
+
##### `-a` APP_NAME
|
184
|
+
|
185
|
+
Application to use
|
186
|
+
|
187
|
+
##### `-b` BUNDLE_ID
|
188
|
+
|
189
|
+
Application bundle id to use
|
190
|
+
|
191
|
+
##### `-e` | `--editor` EDITOR
|
192
|
+
|
193
|
+
Editor to use
|
194
|
+
|
195
|
+
##### `-x`
|
196
|
+
|
197
|
+
Use the config_editor_app defined in ~/.doingrc (Sublime Text)
|
198
|
+
|
199
|
+
* * * * * *
|
200
|
+
|
201
|
+
### `$ doing` <mark>`done|did`</mark> `ENTRY`
|
202
|
+
|
203
|
+
*Add a completed item with @done(date). No argument finishes last entry.*
|
204
|
+
|
205
|
+
#### Options
|
206
|
+
|
207
|
+
##### `--at` DATE_STRING
|
208
|
+
|
209
|
+
Set finish date to specific date/time (natural language parsed, e.g. --at=1:30pm).
|
210
|
+
If used, ignores --back. Used with --took, backdates start date
|
211
|
+
|
212
|
+
##### `-b` | `--back` DATE_STRING
|
213
|
+
|
214
|
+
Backdate start date by interval [4pm|20m|2h|yesterday noon]
|
215
|
+
|
216
|
+
##### `-s` | `--section` NAME
|
217
|
+
|
218
|
+
Section
|
219
|
+
|
220
|
+
##### `-t` | `--took` INTERVAL
|
221
|
+
|
222
|
+
Set completion date to start date plus interval (XX[mhd] or HH:MM).
|
223
|
+
If used without the --back option, the start date will be moved back to allow
|
224
|
+
the completion date to be the current time.
|
225
|
+
|
226
|
+
##### `-a`|`--archive`
|
227
|
+
|
228
|
+
Immediately archive the entry
|
229
|
+
|
230
|
+
##### `--[no-]date`
|
231
|
+
|
232
|
+
Include date
|
233
|
+
|
234
|
+
##### `-e`|`--editor`
|
235
|
+
|
236
|
+
Edit entry with $EDITOR
|
237
|
+
|
238
|
+
##### `-r`|`--remove`
|
239
|
+
|
240
|
+
Remove @done tag
|
241
|
+
|
242
|
+
* * * * * *
|
243
|
+
|
244
|
+
### `$ doing` <mark>`finish`</mark> `COUNT`
|
245
|
+
|
246
|
+
*Mark last X entries as @done*
|
247
|
+
|
248
|
+
> Marks the last X entries with a @done tag and current date. Does not alter already completed entries.
|
249
|
+
|
250
|
+
#### Options
|
251
|
+
|
252
|
+
##### `--at` DATE_STRING
|
253
|
+
|
254
|
+
Set finish date to specific date/time (natural language parsed, e.g. --at=1:30pm). If used, ignores --back.
|
255
|
+
|
256
|
+
##### `-b` | `--back` DATE_STRING
|
257
|
+
|
258
|
+
Backdate completed date to date string [4pm|20m|2h|yesterday noon]
|
259
|
+
|
260
|
+
##### `--bool` BOOLEAN
|
261
|
+
|
262
|
+
Boolean (AND|OR|NOT) with which to combine multiple tag filters
|
263
|
+
|
264
|
+
*Default Value:* `AND`
|
265
|
+
|
266
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
267
|
+
|
268
|
+
##### `-s` | `--section` NAME
|
269
|
+
|
270
|
+
Section
|
271
|
+
|
272
|
+
##### `--search` QUERY
|
273
|
+
|
274
|
+
Finish the last X entries matching search filter, surround with slashes for regex (e.g. "/query.*/")
|
275
|
+
|
276
|
+
##### `-t` | `--took` INTERVAL
|
277
|
+
|
278
|
+
Set the completed date to the start date plus XX[hmd]
|
279
|
+
|
280
|
+
##### `--tag` TAG
|
281
|
+
|
282
|
+
Finish the last X entries containing TAG.
|
283
|
+
Separate multiple tags with comma (--tag=tag1,tag2), combine with --bool
|
284
|
+
|
285
|
+
##### `-a`|`--archive`
|
286
|
+
|
287
|
+
Archive entries
|
288
|
+
|
289
|
+
##### `--auto`
|
290
|
+
|
291
|
+
Auto-generate finish dates from next entry's start time.
|
292
|
+
Automatically generate completion dates 1 minute before next item (in any section) began.
|
293
|
+
--auto overrides the --date and --back parameters.
|
294
|
+
|
295
|
+
##### `--[no-]date`
|
296
|
+
|
297
|
+
Include date
|
298
|
+
|
299
|
+
##### `-u`|`--unfinished`
|
300
|
+
|
301
|
+
Finish last entry (or entries) not already marked @done
|
302
|
+
|
303
|
+
* * * * * *
|
304
|
+
|
305
|
+
### `$ doing` <mark>`grep|search`</mark> `SEARCH_PATTERN`
|
306
|
+
|
307
|
+
*Search for entries*
|
308
|
+
|
309
|
+
> Search all sections (or limit to a single section) for entries matching text or regular expression. Normal strings are fuzzy matched.
|
310
|
+
>
|
311
|
+
> To search with regular expressions, single quote the string and surround with slashes: `doing search '/\bm.*?x\b/'`
|
312
|
+
|
313
|
+
#### Options
|
314
|
+
|
315
|
+
##### `--after` DATE_STRING
|
316
|
+
|
317
|
+
Constrain search to entries newer than date
|
318
|
+
|
319
|
+
##### `--before` DATE_STRING
|
320
|
+
|
321
|
+
Constrain search to entries older than date
|
322
|
+
|
323
|
+
##### `-o` | `--output` FORMAT
|
324
|
+
|
325
|
+
Output to export format (csv|html|json|template|timeline)
|
326
|
+
|
327
|
+
*Must Match:* `(?i-mx:^(?:template|html|csv|json|timeline)$)`
|
328
|
+
|
329
|
+
##### `-s` | `--section` NAME
|
330
|
+
|
331
|
+
Section
|
332
|
+
|
333
|
+
*Default Value:* `All`
|
334
|
+
|
335
|
+
##### `--tag_sort` KEY
|
336
|
+
|
337
|
+
Sort tags by (name|time)
|
338
|
+
|
339
|
+
*Default Value:* `name`
|
340
|
+
|
341
|
+
*Must Match:* `(?i-mx:^(?:name|time)$)`
|
342
|
+
|
343
|
+
##### `--only_timed`
|
344
|
+
|
345
|
+
Only show items with recorded time intervals
|
346
|
+
|
347
|
+
##### `-t`|`--[no-]times`
|
348
|
+
|
349
|
+
Show time intervals on @done tasks
|
350
|
+
|
351
|
+
##### `--totals`
|
352
|
+
|
353
|
+
Show intervals with totals at the end of output
|
354
|
+
|
355
|
+
* * * * * *
|
356
|
+
|
357
|
+
### `$ doing` <mark>`help`</mark> `command`
|
358
|
+
|
359
|
+
*Shows a list of commands or help for one command*
|
360
|
+
|
361
|
+
> Gets help for the application or its commands. Can also list the commands in a way helpful to creating a bash-style completion function
|
362
|
+
|
363
|
+
#### Options
|
364
|
+
|
365
|
+
##### `-c`
|
366
|
+
|
367
|
+
List commands one per line, to assist with shell completion
|
368
|
+
|
369
|
+
* * * * * *
|
370
|
+
|
371
|
+
### `$ doing` <mark>`import`</mark> `PATH`
|
372
|
+
|
373
|
+
*Import entries from an external source*
|
374
|
+
|
375
|
+
> Imports entries from other sources. Currently only handles JSON reports exported from Timing.app.
|
376
|
+
|
377
|
+
#### Options
|
378
|
+
|
379
|
+
##### `--prefix` PREFIX
|
380
|
+
|
381
|
+
Prefix entries with
|
382
|
+
|
383
|
+
##### `-s` | `--section` NAME
|
384
|
+
|
385
|
+
Target section
|
386
|
+
|
387
|
+
##### `--tag` TAGS
|
388
|
+
|
389
|
+
Tag all imported entries
|
390
|
+
|
391
|
+
##### `--type` TYPE
|
392
|
+
|
393
|
+
Import type
|
394
|
+
|
395
|
+
*Default Value:* `timing`
|
396
|
+
|
397
|
+
##### `--[no-]autotag`
|
398
|
+
|
399
|
+
Autotag entries
|
400
|
+
|
401
|
+
##### `--[no-]overlap`
|
402
|
+
|
403
|
+
Allow entries that overlap existing times
|
404
|
+
|
405
|
+
* * * * * *
|
406
|
+
|
407
|
+
### `$ doing` <mark>`last`</mark> ``
|
408
|
+
|
409
|
+
*Show the last entry, optionally edit*
|
410
|
+
|
411
|
+
#### Options
|
412
|
+
|
413
|
+
##### `--bool` BOOLEAN
|
414
|
+
|
415
|
+
Tag boolean
|
416
|
+
|
417
|
+
*Default Value:* `AND`
|
418
|
+
|
419
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
420
|
+
|
421
|
+
##### `-s` | `--section` NAME
|
422
|
+
|
423
|
+
Specify a section
|
424
|
+
|
425
|
+
*Default Value:* `All`
|
426
|
+
|
427
|
+
##### `--search` QUERY
|
428
|
+
|
429
|
+
Search filter, surround with slashes for regex (/query/)
|
430
|
+
|
431
|
+
##### `--tag` TAG
|
432
|
+
|
433
|
+
Tag filter, combine multiple tags with a comma.
|
434
|
+
|
435
|
+
##### `-e`|`--editor`
|
436
|
+
|
437
|
+
Edit entry with $EDITOR
|
438
|
+
|
439
|
+
* * * * * *
|
440
|
+
|
441
|
+
### `$ doing` <mark>`later`</mark> `ENTRY`
|
442
|
+
|
443
|
+
*Add an item to the Later section*
|
444
|
+
|
445
|
+
#### Options
|
446
|
+
|
447
|
+
##### `-b` | `--back` DATE_STRING
|
448
|
+
|
449
|
+
Backdate start time to date string [4pm|20m|2h|yesterday noon]
|
450
|
+
|
451
|
+
##### `-n` | `--note` TEXT
|
452
|
+
|
453
|
+
Note
|
454
|
+
|
455
|
+
##### `-e`|`--editor`
|
456
|
+
|
457
|
+
Edit entry with $EDITOR
|
458
|
+
|
459
|
+
* * * * * *
|
460
|
+
|
461
|
+
### `$ doing` <mark>`mark|flag`</mark> ``
|
462
|
+
|
463
|
+
*Mark last entry as highlighted*
|
464
|
+
|
465
|
+
#### Options
|
466
|
+
|
467
|
+
##### `-s` | `--section` NAME
|
468
|
+
|
469
|
+
Section
|
470
|
+
|
471
|
+
##### `-r`|`--remove`
|
472
|
+
|
473
|
+
Remove mark
|
474
|
+
|
475
|
+
##### `-u`|`--unfinished`
|
476
|
+
|
477
|
+
Mark last entry not marked @done
|
478
|
+
|
479
|
+
* * * * * *
|
480
|
+
|
481
|
+
### `$ doing` <mark>`meanwhile`</mark> `ENTRY`
|
482
|
+
|
483
|
+
*Finish any running @meanwhile tasks and optionally create a new one*
|
484
|
+
|
485
|
+
#### Options
|
486
|
+
|
487
|
+
##### `-b` | `--back` DATE_STRING
|
488
|
+
|
489
|
+
Backdate start date for new entry to date string [4pm|20m|2h|yesterday noon]
|
490
|
+
|
491
|
+
##### `-n` | `--note` TEXT
|
492
|
+
|
493
|
+
Note
|
494
|
+
|
495
|
+
##### `-s` | `--section` NAME
|
496
|
+
|
497
|
+
Section
|
498
|
+
|
499
|
+
##### `-a`|`--[no-]archive`
|
500
|
+
|
501
|
+
Archive previous @meanwhile entry
|
502
|
+
|
503
|
+
##### `-e`|`--editor`
|
504
|
+
|
505
|
+
Edit entry with $EDITOR
|
506
|
+
|
507
|
+
* * * * * *
|
508
|
+
|
509
|
+
### `$ doing` <mark>`note`</mark> `NOTE_TEXT`
|
510
|
+
|
511
|
+
*Add a note to the last entry*
|
512
|
+
|
513
|
+
> 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.
|
514
|
+
>
|
515
|
+
> Use -e to load the last entry in a text editor where you can append a note.
|
516
|
+
|
517
|
+
#### Options
|
518
|
+
|
519
|
+
##### `-s` | `--section` NAME
|
520
|
+
|
521
|
+
Section
|
522
|
+
|
523
|
+
*Default Value:* `All`
|
524
|
+
|
525
|
+
##### `-e`|`--editor`
|
526
|
+
|
527
|
+
Edit entry with $EDITOR
|
528
|
+
|
529
|
+
##### `-r`|`--remove`
|
530
|
+
|
531
|
+
Replace/Remove last entry's note (default append)
|
532
|
+
|
533
|
+
* * * * * *
|
534
|
+
|
535
|
+
### `$ doing` <mark>`now|next`</mark> `ENTRY`
|
536
|
+
|
537
|
+
*Add an entry*
|
538
|
+
|
539
|
+
#### Options
|
540
|
+
|
541
|
+
##### `-b` | `--back` DATE_STRING
|
542
|
+
|
543
|
+
Backdate start time [4pm|20m|2h|yesterday noon]
|
544
|
+
|
545
|
+
##### `-n` | `--note` TEXT
|
546
|
+
|
547
|
+
Note
|
548
|
+
|
549
|
+
##### `-s` | `--section` NAME
|
550
|
+
|
551
|
+
Section
|
552
|
+
|
553
|
+
##### `-e`|`--editor`
|
554
|
+
|
555
|
+
Edit entry with $EDITOR
|
556
|
+
|
557
|
+
##### `-f`|`--finish_last`
|
558
|
+
|
559
|
+
Timed entry, marks last entry in section as @done
|
560
|
+
|
561
|
+
* * * * * *
|
562
|
+
|
563
|
+
### `$ doing` <mark>`on`</mark> `DATE_STRING`
|
564
|
+
|
565
|
+
*List entries for a date*
|
566
|
+
|
567
|
+
> Date argument can be natural language. "thursday" would be interpreted as "last thursday,"
|
568
|
+
> and "2d" would be interpreted as "two days ago." If you use "to" or "through" between two dates,
|
569
|
+
> it will create a range.
|
570
|
+
|
571
|
+
#### Options
|
572
|
+
|
573
|
+
##### `-o` | `--output` FORMAT
|
574
|
+
|
575
|
+
Output to export format (csv|html|json|template|timeline)
|
576
|
+
|
577
|
+
*Must Match:* `(?i-mx:^(?:template|html|csv|json|timeline)$)`
|
578
|
+
|
579
|
+
##### `-s` | `--section` NAME
|
580
|
+
|
581
|
+
Section
|
582
|
+
|
583
|
+
*Default Value:* `All`
|
584
|
+
|
585
|
+
##### `--tag_sort` KEY
|
586
|
+
|
587
|
+
Sort tags by (name|time)
|
588
|
+
|
589
|
+
*Default Value:* `name`
|
590
|
+
|
591
|
+
*Must Match:* `(?i-mx:^(?:name|time)$)`
|
592
|
+
|
593
|
+
##### `-t`|`--[no-]times`
|
594
|
+
|
595
|
+
Show time intervals on @done tasks
|
596
|
+
|
597
|
+
##### `--totals`
|
598
|
+
|
599
|
+
Show time totals at the end of output
|
600
|
+
|
601
|
+
* * * * * *
|
602
|
+
|
603
|
+
### `$ doing` <mark>`open`</mark> ``
|
604
|
+
|
605
|
+
*Open the "doing" file in an editor*
|
606
|
+
|
607
|
+
> `doing open` defaults to using the editor_app setting in ~/.doingrc (TaskPaper)
|
608
|
+
|
609
|
+
#### Options
|
610
|
+
|
611
|
+
##### `-a` | `--app` APP_NAME
|
612
|
+
|
613
|
+
Open with app name
|
614
|
+
|
615
|
+
##### `-b` | `--bundle_id` BUNDLE_ID
|
616
|
+
|
617
|
+
Open with app bundle id
|
618
|
+
|
619
|
+
##### `-e`|`--editor`
|
620
|
+
|
621
|
+
Open with $EDITOR ($EDITOR)
|
622
|
+
|
623
|
+
* * * * * *
|
624
|
+
|
625
|
+
### `$ doing` <mark>`recent`</mark> `COUNT`
|
626
|
+
|
627
|
+
*List recent entries*
|
628
|
+
|
629
|
+
#### Options
|
630
|
+
|
631
|
+
##### `-s` | `--section` NAME
|
632
|
+
|
633
|
+
Section
|
634
|
+
|
635
|
+
*Default Value:* `All`
|
636
|
+
|
637
|
+
##### `--tag_sort` KEY
|
638
|
+
|
639
|
+
Sort tags by (name|time)
|
640
|
+
|
641
|
+
*Default Value:* `name`
|
642
|
+
|
643
|
+
*Must Match:* `(?i-mx:^(?:name|time)$)`
|
644
|
+
|
645
|
+
##### `-t`|`--[no-]times`
|
646
|
+
|
647
|
+
Show time intervals on @done tasks
|
648
|
+
|
649
|
+
##### `--totals`
|
650
|
+
|
651
|
+
Show intervals with totals at the end of output
|
652
|
+
|
653
|
+
* * * * * *
|
654
|
+
|
655
|
+
### `$ doing` <mark>`rotate`</mark> ``
|
656
|
+
|
657
|
+
*Move entries to archive file*
|
658
|
+
|
659
|
+
#### Options
|
660
|
+
|
661
|
+
##### `--before` DATE_STRING
|
662
|
+
|
663
|
+
Rotate entries older than date
|
664
|
+
(Flexible date format, e.g. 1/27/2021, 2020-07-19, or Monday 3pm)
|
665
|
+
|
666
|
+
##### `--bool` BOOLEAN
|
667
|
+
|
668
|
+
Tag boolean (AND|OR|NOT)
|
669
|
+
|
670
|
+
*Default Value:* `AND`
|
671
|
+
|
672
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
673
|
+
|
674
|
+
##### `-k` | `--keep` X
|
675
|
+
|
676
|
+
How many items to keep in each section (most recent)
|
677
|
+
|
678
|
+
*Must Match:* `(?-mix:^\d+$)`
|
679
|
+
|
680
|
+
##### `-s` | `--section` SECTION_NAME
|
681
|
+
|
682
|
+
Section to rotate
|
683
|
+
|
684
|
+
*Default Value:* `All`
|
685
|
+
|
686
|
+
##### `--search` QUERY
|
687
|
+
|
688
|
+
Search filter
|
689
|
+
|
690
|
+
##### `--tag` TAG
|
691
|
+
|
692
|
+
Tag filter, combine multiple tags with a comma. Added for compatibility with other commands.
|
693
|
+
|
694
|
+
* * * * * *
|
695
|
+
|
696
|
+
### `$ doing` <mark>`sections`</mark> ``
|
697
|
+
|
698
|
+
*List sections*
|
699
|
+
|
700
|
+
#### Options
|
701
|
+
|
702
|
+
##### `-c`|`--[no-]column`
|
703
|
+
|
704
|
+
List in single column
|
705
|
+
|
706
|
+
* * * * * *
|
707
|
+
|
708
|
+
### `$ doing` <mark>`select`</mark> ``
|
709
|
+
|
710
|
+
*Display an interactive menu to perform operations (requires fzf)*
|
711
|
+
|
712
|
+
> List all entries and select with type-ahead fuzzy matching.
|
713
|
+
>
|
714
|
+
> Multiple selections are allowed, hit tab to add the highlighted entry to the selection. Return processes the selected entries.
|
715
|
+
|
716
|
+
#### Options
|
717
|
+
|
718
|
+
##### `-m` | `--move` SECTION
|
719
|
+
|
720
|
+
Move selected items to section
|
721
|
+
|
722
|
+
##### `-o` | `--output` FORMAT
|
723
|
+
|
724
|
+
Output entries to format (doing|taskpaper|csv|html|json|template|timeline)
|
725
|
+
|
726
|
+
*Must Match:* `(?i-mx:^(?:doing|taskpaper|html|csv|json|template|timeline)$)`
|
727
|
+
|
728
|
+
##### `-q` | `--query` QUERY
|
729
|
+
|
730
|
+
Initial search query for filtering. Matching is fuzzy. For exact matching, start query with a single quote, e.g. `--query "'search"
|
731
|
+
|
732
|
+
##### `-s` | `--section` SECTION
|
733
|
+
|
734
|
+
Select from a specific section
|
735
|
+
|
736
|
+
##### `--save_to` FILE
|
737
|
+
|
738
|
+
Save selected entries to file using --output format
|
739
|
+
|
740
|
+
##### `-t` | `--tag` TAG
|
741
|
+
|
742
|
+
Tag selected entries
|
743
|
+
|
744
|
+
##### `-a`|`--archive`
|
745
|
+
|
746
|
+
Archive selected items
|
747
|
+
|
748
|
+
##### `-c`|`--cancel`
|
749
|
+
|
750
|
+
Cancel selected items (add @done without timestamp)
|
751
|
+
|
752
|
+
##### `-d`|`--delete`
|
753
|
+
|
754
|
+
Delete selected items
|
755
|
+
|
756
|
+
##### `-e`|`--editor`
|
757
|
+
|
758
|
+
Edit selected item(s)
|
759
|
+
|
760
|
+
##### `-f`|`--finish`
|
761
|
+
|
762
|
+
Add @done with current time to selected item(s)
|
763
|
+
|
764
|
+
##### `--flag`
|
765
|
+
|
766
|
+
Add flag to selected item(s)
|
767
|
+
|
768
|
+
##### `--force`
|
769
|
+
|
770
|
+
Perform action without confirmation.
|
771
|
+
|
772
|
+
##### `--[no-]menu`
|
773
|
+
|
774
|
+
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.
|
775
|
+
|
776
|
+
##### `-r`|`--remove`
|
777
|
+
|
778
|
+
Reverse -c, -f, --flag, and -t (remove instead of adding)
|
779
|
+
|
780
|
+
* * * * * *
|
781
|
+
|
782
|
+
### `$ doing` <mark>`show`</mark> `[SECTION|@TAGS]`
|
783
|
+
|
784
|
+
*List all entries*
|
785
|
+
|
786
|
+
> The argument can be a section name, @tag(s) or both.
|
787
|
+
> "pick" or "choose" as an argument will offer a section menu.
|
788
|
+
|
789
|
+
#### Options
|
790
|
+
|
791
|
+
##### `-a` | `--age` AGE
|
792
|
+
|
793
|
+
Age (oldest|newest)
|
794
|
+
|
795
|
+
*Default Value:* `newest`
|
796
|
+
|
797
|
+
##### `--after` DATE_STRING
|
798
|
+
|
799
|
+
View entries newer than date
|
800
|
+
|
801
|
+
##### `-b` | `--bool` BOOLEAN
|
802
|
+
|
803
|
+
Tag boolean (AND,OR,NOT)
|
804
|
+
|
805
|
+
*Default Value:* `OR`
|
806
|
+
|
807
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
808
|
+
|
809
|
+
##### `--before` DATE_STRING
|
810
|
+
|
811
|
+
View entries older than date
|
812
|
+
|
813
|
+
##### `-c` | `--count` MAX
|
814
|
+
|
815
|
+
Max count to show
|
816
|
+
|
817
|
+
*Default Value:* `0`
|
818
|
+
|
819
|
+
##### `-f` | `--from` DATE_OR_RANGE
|
820
|
+
|
821
|
+
Date range to show, or a single day to filter date on.
|
822
|
+
Date range argument should be quoted. Date specifications can be natural language.
|
823
|
+
To specify a range, use "to" or "through": `doing show --from "monday to friday"`
|
824
|
+
|
825
|
+
##### `-o` | `--output` FORMAT
|
826
|
+
|
827
|
+
Output to export format (csv|html|json|template|timeline)
|
828
|
+
|
829
|
+
*Must Match:* `(?i-mx:^(?:template|html|csv|json|timeline)$)`
|
830
|
+
|
831
|
+
##### `-s` | `--sort` ORDER
|
832
|
+
|
833
|
+
Sort order (asc/desc)
|
834
|
+
|
835
|
+
*Default Value:* `ASC`
|
836
|
+
|
837
|
+
*Must Match:* `(?i-mx:^[ad].*)`
|
838
|
+
|
839
|
+
##### `--search` QUERY
|
840
|
+
|
841
|
+
Search filter, surround with slashes for regex (/query/)
|
842
|
+
|
843
|
+
##### `--tag` TAG
|
844
|
+
|
845
|
+
Tag filter, combine multiple tags with a comma. Added for compatibility with other commands.
|
846
|
+
|
847
|
+
##### `--tag_order` DIRECTION
|
848
|
+
|
849
|
+
Tag sort direction (asc|desc)
|
850
|
+
|
851
|
+
*Must Match:* `(?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)`
|
852
|
+
|
853
|
+
##### `--tag_sort` KEY
|
854
|
+
|
855
|
+
Sort tags by (name|time)
|
856
|
+
|
857
|
+
*Default Value:* `name`
|
858
|
+
|
859
|
+
*Must Match:* `(?i-mx:^(?:name|time))`
|
860
|
+
|
861
|
+
##### `--only_timed`
|
862
|
+
|
863
|
+
Only show items with recorded time intervals
|
864
|
+
|
865
|
+
##### `-t`|`--[no-]times`
|
866
|
+
|
867
|
+
Show time intervals on @done tasks
|
868
|
+
|
869
|
+
##### `--totals`
|
870
|
+
|
871
|
+
Show intervals with totals at the end of output
|
872
|
+
|
873
|
+
* * * * * *
|
874
|
+
|
875
|
+
### `$ doing` <mark>`since`</mark> `DATE_STRING`
|
876
|
+
|
877
|
+
*List entries since a date*
|
878
|
+
|
879
|
+
> Date argument can be natural language and are always interpreted as being in the past. "thursday" would be interpreted as "last thursday,"
|
880
|
+
> and "2d" would be interpreted as "two days ago."
|
881
|
+
|
882
|
+
#### Options
|
883
|
+
|
884
|
+
##### `-o` | `--output` FORMAT
|
885
|
+
|
886
|
+
Output to export format (csv|html|json|template|timeline)
|
887
|
+
|
888
|
+
*Must Match:* `(?i-mx:^(?:template|html|csv|json|timeline)$)`
|
889
|
+
|
890
|
+
##### `-s` | `--section` NAME
|
891
|
+
|
892
|
+
Section
|
893
|
+
|
894
|
+
*Default Value:* `All`
|
895
|
+
|
896
|
+
##### `--tag_sort` KEY
|
897
|
+
|
898
|
+
Sort tags by (name|time)
|
899
|
+
|
900
|
+
*Default Value:* `name`
|
901
|
+
|
902
|
+
*Must Match:* `(?i-mx:^(?:name|time)$)`
|
903
|
+
|
904
|
+
##### `-t`|`--[no-]times`
|
905
|
+
|
906
|
+
Show time intervals on @done tasks
|
907
|
+
|
908
|
+
##### `--totals`
|
909
|
+
|
910
|
+
Show time totals at the end of output
|
911
|
+
|
912
|
+
* * * * * *
|
913
|
+
|
914
|
+
### `$ doing` <mark>`tag`</mark> `TAG...`
|
915
|
+
|
916
|
+
*Add tag(s) to last entry*
|
917
|
+
|
918
|
+
#### Options
|
919
|
+
|
920
|
+
##### `--bool` BOOLEAN
|
921
|
+
|
922
|
+
Boolean (AND|OR|NOT) with which to combine multiple tag filters
|
923
|
+
|
924
|
+
*Default Value:* `AND`
|
925
|
+
|
926
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
927
|
+
|
928
|
+
##### `-c` | `--count` COUNT
|
929
|
+
|
930
|
+
How many recent entries to tag (0 for all)
|
931
|
+
|
932
|
+
*Default Value:* `1`
|
933
|
+
|
934
|
+
##### `-s` | `--section` SECTION_NAME
|
935
|
+
|
936
|
+
Section
|
937
|
+
|
938
|
+
*Default Value:* `All`
|
939
|
+
|
940
|
+
##### `--search` QUERY
|
941
|
+
|
942
|
+
Tag entries matching search filter, surround with slashes for regex (e.g. "/query.*/")
|
943
|
+
|
944
|
+
##### `--tag` TAG
|
945
|
+
|
946
|
+
Tag the last X entries containing TAG.
|
947
|
+
Separate multiple tags with comma (--tag=tag1,tag2), combine with --bool
|
948
|
+
|
949
|
+
##### `-a`|`--autotag`
|
950
|
+
|
951
|
+
Autotag entries based on autotag configuration in ~/.doingrc
|
952
|
+
|
953
|
+
##### `-d`|`--date`
|
954
|
+
|
955
|
+
Include current date/time with tag
|
956
|
+
|
957
|
+
##### `--force`
|
958
|
+
|
959
|
+
Don't ask permission to tag all entries when count is 0
|
960
|
+
|
961
|
+
##### `-r`|`--remove`
|
962
|
+
|
963
|
+
Remove given tag(s)
|
964
|
+
|
965
|
+
##### `-u`|`--unfinished`
|
966
|
+
|
967
|
+
Tag last entry (or entries) not marked @done
|
968
|
+
|
969
|
+
* * * * * *
|
970
|
+
|
971
|
+
### `$ doing` <mark>`template`</mark> `TYPE`
|
972
|
+
|
973
|
+
*Output HTML and CSS templates for customization*
|
974
|
+
|
975
|
+
> Templates are printed to STDOUT for piping to a file.
|
976
|
+
> Save them and use them in the configuration file under html_template.
|
977
|
+
>
|
978
|
+
> Example `doing template HAML > ~/styles/my_doing.haml`
|
979
|
+
|
980
|
+
* * * * * *
|
981
|
+
|
982
|
+
### `$ doing` <mark>`today`</mark> ``
|
983
|
+
|
984
|
+
*List entries from today*
|
985
|
+
|
986
|
+
#### Options
|
987
|
+
|
988
|
+
##### `--after` TIME_STRING
|
989
|
+
|
990
|
+
View entries after specified time (e.g. 8am, 12:30pm, 15:00)
|
991
|
+
|
992
|
+
##### `--before` TIME_STRING
|
993
|
+
|
994
|
+
View entries before specified time (e.g. 8am, 12:30pm, 15:00)
|
995
|
+
|
996
|
+
##### `-o` | `--output` FORMAT
|
997
|
+
|
998
|
+
Output to export format (csv|html|json|template|timeline)
|
999
|
+
|
1000
|
+
*Must Match:* `(?i-mx:^(?:template|html|csv|json|timeline)$)`
|
1001
|
+
|
1002
|
+
##### `-s` | `--section` NAME
|
1003
|
+
|
1004
|
+
Specify a section
|
1005
|
+
|
1006
|
+
*Default Value:* `All`
|
1007
|
+
|
1008
|
+
##### `--tag_sort` KEY
|
1009
|
+
|
1010
|
+
Sort tags by (name|time)
|
1011
|
+
|
1012
|
+
*Default Value:* `name`
|
1013
|
+
|
1014
|
+
*Must Match:* `(?i-mx:^(?:name|time)$)`
|
1015
|
+
|
1016
|
+
##### `-t`|`--[no-]times`
|
1017
|
+
|
1018
|
+
Show time intervals on @done tasks
|
1019
|
+
|
1020
|
+
##### `--totals`
|
1021
|
+
|
1022
|
+
Show time totals at the end of output
|
1023
|
+
|
1024
|
+
* * * * * *
|
1025
|
+
|
1026
|
+
### `$ doing` <mark>`undo`</mark> ``
|
1027
|
+
|
1028
|
+
*Undo the last change to the doing_file*
|
1029
|
+
|
1030
|
+
#### Options
|
1031
|
+
|
1032
|
+
##### `-f` | `--file` PATH
|
1033
|
+
|
1034
|
+
Specify alternate doing file
|
1035
|
+
|
1036
|
+
* * * * * *
|
1037
|
+
|
1038
|
+
### `$ doing` <mark>`view`</mark> `VIEW_NAME`
|
1039
|
+
|
1040
|
+
*Display a user-created view*
|
1041
|
+
|
1042
|
+
> Command line options override view configuration
|
1043
|
+
|
1044
|
+
#### Options
|
1045
|
+
|
1046
|
+
##### `--after` DATE_STRING
|
1047
|
+
|
1048
|
+
View entries newer than date
|
1049
|
+
|
1050
|
+
##### `-b` | `--bool` BOOLEAN
|
1051
|
+
|
1052
|
+
Tag boolean (AND,OR,NOT)
|
1053
|
+
|
1054
|
+
*Default Value:* `OR`
|
1055
|
+
|
1056
|
+
*Must Match:* `(?i-mx:and|all|any|or|not|none)`
|
1057
|
+
|
1058
|
+
##### `--before` DATE_STRING
|
1059
|
+
|
1060
|
+
View entries older than date
|
1061
|
+
|
1062
|
+
##### `-c` | `--count` COUNT
|
1063
|
+
|
1064
|
+
Count to display
|
1065
|
+
|
1066
|
+
*Must Match:* `(?-mix:^\d+$)`
|
1067
|
+
|
1068
|
+
##### `-o` | `--output` FORMAT
|
1069
|
+
|
1070
|
+
Output to export format (csv|html|json|template|timeline)
|
1071
|
+
|
1072
|
+
*Must Match:* `(?i-mx:^(?:template|html|csv|json|timeline)$)`
|
1073
|
+
|
1074
|
+
##### `-s` | `--section` NAME
|
1075
|
+
|
1076
|
+
Section
|
1077
|
+
|
1078
|
+
##### `--search` QUERY
|
1079
|
+
|
1080
|
+
Search filter, surround with slashes for regex (/query/)
|
1081
|
+
|
1082
|
+
##### `--tag` TAG
|
1083
|
+
|
1084
|
+
Tag filter, combine multiple tags with a comma.
|
1085
|
+
|
1086
|
+
##### `--tag_order` DIRECTION
|
1087
|
+
|
1088
|
+
Tag sort direction (asc|desc)
|
1089
|
+
|
1090
|
+
*Must Match:* `(?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)`
|
1091
|
+
|
1092
|
+
##### `--tag_sort` KEY
|
1093
|
+
|
1094
|
+
Sort tags by (name|time)
|
1095
|
+
|
1096
|
+
*Must Match:* `(?i-mx:^(?:name|time)$)`
|
1097
|
+
|
1098
|
+
##### `--[no-]color`
|
1099
|
+
|
1100
|
+
Include colors in output
|
1101
|
+
|
1102
|
+
##### `--only_timed`
|
1103
|
+
|
1104
|
+
Only show items with recorded time intervals (override view settings)
|
1105
|
+
|
1106
|
+
##### `-t`|`--[no-]times`
|
1107
|
+
|
1108
|
+
Show time intervals on @done tasks
|
1109
|
+
|
1110
|
+
##### `--totals`
|
1111
|
+
|
1112
|
+
Show intervals with totals at the end of output
|
1113
|
+
|
1114
|
+
* * * * * *
|
1115
|
+
|
1116
|
+
### `$ doing` <mark>`views`</mark> ``
|
1117
|
+
|
1118
|
+
*List available custom views*
|
1119
|
+
|
1120
|
+
#### Options
|
1121
|
+
|
1122
|
+
##### `-c`|`--[no-]column`
|
1123
|
+
|
1124
|
+
List in single column
|
1125
|
+
|
1126
|
+
* * * * * *
|
1127
|
+
|
1128
|
+
### `$ doing` <mark>`yesterday`</mark> ``
|
1129
|
+
|
1130
|
+
*List entries from yesterday*
|
1131
|
+
|
1132
|
+
#### Options
|
1133
|
+
|
1134
|
+
##### `--after` TIME_STRING
|
1135
|
+
|
1136
|
+
View entries after specified time (e.g. 8am, 12:30pm, 15:00)
|
1137
|
+
|
1138
|
+
##### `--before` TIME_STRING
|
1139
|
+
|
1140
|
+
View entries before specified time (e.g. 8am, 12:30pm, 15:00)
|
1141
|
+
|
1142
|
+
##### `-o` | `--output` FORMAT
|
1143
|
+
|
1144
|
+
Output to export format (csv|html|json|template|timeline)
|
1145
|
+
|
1146
|
+
*Must Match:* `(?i-mx:^(?:template|html|csv|json|timeline)$)`
|
1147
|
+
|
1148
|
+
##### `-s` | `--section` NAME
|
1149
|
+
|
1150
|
+
Specify a section
|
1151
|
+
|
1152
|
+
*Default Value:* `All`
|
1153
|
+
|
1154
|
+
##### `--tag_order` DIRECTION
|
1155
|
+
|
1156
|
+
Tag sort direction (asc|desc)
|
1157
|
+
|
1158
|
+
*Must Match:* `(?i-mx:^(?:a(?:sc)?|d(?:esc)?)$)`
|
1159
|
+
|
1160
|
+
##### `--tag_sort` KEY
|
1161
|
+
|
1162
|
+
Sort tags by (name|time)
|
1163
|
+
|
1164
|
+
*Default Value:* `name`
|
1165
|
+
|
1166
|
+
*Must Match:* `(?i-mx:^(?:name|time)$)`
|
1167
|
+
|
1168
|
+
##### `-t`|`--[no-]times`
|
1169
|
+
|
1170
|
+
Show time intervals on @done tasks
|
1171
|
+
|
1172
|
+
##### `--totals`
|
1173
|
+
|
1174
|
+
Show time totals at the end of output
|
1175
|
+
|
1176
|
+
* * * * * *
|
1177
|
+
|
1178
|
+
#### [Default Command] recent
|
1179
|
+
|
1180
|
+
Documentation generated 2021-10-15 05:03
|
1181
|
+
|