doing 1.0.93 → 2.0.6.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHORS +19 -0
  3. data/CHANGELOG.md +616 -0
  4. data/COMMANDS.md +1181 -0
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +110 -0
  7. data/LICENSE +23 -0
  8. data/README.md +15 -699
  9. data/Rakefile +79 -0
  10. data/_config.yml +1 -0
  11. data/bin/doing +1055 -494
  12. data/doing.gemspec +34 -0
  13. data/doing.rdoc +1839 -0
  14. data/example_plugin.rb +209 -0
  15. data/generate_completions.sh +5 -0
  16. data/img/doing-colors.jpg +0 -0
  17. data/img/doing-printf-wrap-800.jpg +0 -0
  18. data/img/doing-show-note-formatting-800.jpg +0 -0
  19. data/lib/completion/_doing.zsh +203 -0
  20. data/lib/completion/doing.bash +449 -0
  21. data/lib/completion/doing.fish +329 -0
  22. data/lib/doing/array.rb +8 -0
  23. data/lib/doing/cli_status.rb +70 -0
  24. data/lib/doing/colors.rb +136 -0
  25. data/lib/doing/configuration.rb +312 -0
  26. data/lib/doing/errors.rb +109 -0
  27. data/lib/doing/hash.rb +31 -0
  28. data/lib/doing/hooks.rb +59 -0
  29. data/lib/doing/item.rb +155 -0
  30. data/lib/doing/log_adapter.rb +344 -0
  31. data/lib/doing/markdown_document_listener.rb +174 -0
  32. data/lib/doing/note.rb +59 -0
  33. data/lib/doing/pager.rb +95 -0
  34. data/lib/doing/plugin_manager.rb +208 -0
  35. data/lib/doing/plugins/export/csv_export.rb +48 -0
  36. data/lib/doing/plugins/export/html_export.rb +83 -0
  37. data/lib/doing/plugins/export/json_export.rb +140 -0
  38. data/lib/doing/plugins/export/markdown_export.rb +85 -0
  39. data/lib/doing/plugins/export/taskpaper_export.rb +34 -0
  40. data/lib/doing/plugins/export/template_export.rb +141 -0
  41. data/lib/doing/plugins/import/cal_to_json.scpt +0 -0
  42. data/lib/doing/plugins/import/calendar_import.rb +76 -0
  43. data/lib/doing/plugins/import/doing_import.rb +144 -0
  44. data/lib/doing/plugins/import/timing_import.rb +78 -0
  45. data/lib/doing/string.rb +348 -0
  46. data/lib/doing/symbol.rb +16 -0
  47. data/lib/doing/time.rb +18 -0
  48. data/lib/doing/util.rb +186 -0
  49. data/lib/doing/version.rb +1 -1
  50. data/lib/doing/wwid.rb +1868 -2349
  51. data/lib/doing/wwidfile.rb +117 -0
  52. data/lib/doing.rb +43 -3
  53. data/lib/examples/commands/autotag.rb +63 -0
  54. data/lib/examples/commands/wiki.rb +81 -0
  55. data/lib/examples/plugins/hooks.rb +22 -0
  56. data/lib/examples/plugins/say_export.rb +202 -0
  57. data/lib/examples/plugins/templates/wiki.css +169 -0
  58. data/lib/examples/plugins/templates/wiki.haml +27 -0
  59. data/lib/examples/plugins/templates/wiki_index.haml +18 -0
  60. data/lib/examples/plugins/wiki_export.rb +87 -0
  61. data/lib/templates/doing-markdown.erb +5 -0
  62. data/man/doing.1 +964 -0
  63. data/man/doing.1.html +711 -0
  64. data/man/doing.1.ronn +600 -0
  65. data/package-lock.json +3 -0
  66. data/rdoc_to_mmd.rb +42 -0
  67. data/rdocfixer.rb +13 -0
  68. data/scripts/generate_bash_completions.rb +211 -0
  69. data/scripts/generate_fish_completions.rb +204 -0
  70. data/scripts/generate_zsh_completions.rb +168 -0
  71. metadata +82 -7
  72. data/lib/doing/helpers.rb +0 -191
  73. data/lib/doing/markdown_export.rb +0 -16
@@ -0,0 +1,449 @@
1
+ _doing_again() {
2
+
3
+ if [[ "$token" == --* ]]; then
4
+ COMPREPLY=( $( compgen -W '--bool --editor --interactive --in --note --section --search --tag' -- $token ) )
5
+ elif [[ "$token" == -* ]]; then
6
+ COMPREPLY=( $( compgen -W '-e -i -n -s --bool --editor --interactive --in --note --section --search --tag' -- $token ) )
7
+
8
+ fi
9
+ }
10
+
11
+ _doing_archive() {
12
+ OLD_IFS="$IFS"
13
+ local token=${COMP_WORDS[$COMP_CWORD]}
14
+ IFS=$' '
15
+ local words=$(doing sections)
16
+ IFS="$OLD_IFS"
17
+
18
+ if [[ "$token" == --* ]]; then
19
+ COMPREPLY=( $( compgen -W '--before --bool --keep --label --search --to --tag' -- $token ) )
20
+ elif [[ "$token" == -* ]]; then
21
+ COMPREPLY=( $( compgen -W '-k -t --before --bool --keep --label --search --to --tag' -- $token ) )
22
+ else
23
+ local nocasematchWasOff=0
24
+ shopt nocasematch >/dev/null || nocasematchWasOff=1
25
+ (( nocasematchWasOff )) && shopt -s nocasematch
26
+ local w matches=()
27
+ OLD_IFS="$IFS"
28
+ IFS=$' '‰
29
+ for w in $words; do
30
+ if [[ "$w" == "$token"* ]]; then
31
+ matches+=("${w// / }")
32
+ fi
33
+ done
34
+ IFS="$OLD_IFS"
35
+ (( nocasematchWasOff )) && shopt -u nocasematch
36
+ COMPREPLY=("${matches[@]}")
37
+
38
+ fi
39
+ }
40
+
41
+ _doing_autotag() {
42
+
43
+ if [[ "$token" == --* ]]; then
44
+ COMPREPLY=( $( compgen -W '--bool --count --force --interactive --section --search --tag --unfinished' -- $token ) )
45
+ elif [[ "$token" == -* ]]; then
46
+ COMPREPLY=( $( compgen -W '-c -i -s -u --bool --count --force --interactive --section --search --tag --unfinished' -- $token ) )
47
+
48
+ fi
49
+ }
50
+
51
+ _doing_cancel() {
52
+
53
+ if [[ "$token" == --* ]]; then
54
+ COMPREPLY=( $( compgen -W '--archive --bool --interactive --section --tag --unfinished' -- $token ) )
55
+ elif [[ "$token" == -* ]]; then
56
+ COMPREPLY=( $( compgen -W '-a -i -s -u --archive --bool --interactive --section --tag --unfinished' -- $token ) )
57
+
58
+ fi
59
+ }
60
+
61
+ _doing_config() {
62
+
63
+ if [[ "$token" == --* ]]; then
64
+ COMPREPLY=( $( compgen -W '--dump --editor --output --update' -- $token ) )
65
+ elif [[ "$token" == -* ]]; then
66
+ COMPREPLY=( $( compgen -W '-d -e -o -u --dump --editor --output --update' -- $token ) )
67
+
68
+ fi
69
+ }
70
+
71
+ _doing_done() {
72
+
73
+ if [[ "$token" == --* ]]; then
74
+ COMPREPLY=( $( compgen -W '--archive --at --back --date --editor --note --remove --section --took --unfinished' -- $token ) )
75
+ elif [[ "$token" == -* ]]; then
76
+ COMPREPLY=( $( compgen -W '-a -b -e -n -r -s -t -u --archive --at --back --date --editor --note --remove --section --took --unfinished' -- $token ) )
77
+
78
+ fi
79
+ }
80
+
81
+ _doing_finish() {
82
+
83
+ if [[ "$token" == --* ]]; then
84
+ COMPREPLY=( $( compgen -W '--archive --at --auto --back --bool --date --interactive --remove --section --search --took --tag --unfinished' -- $token ) )
85
+ elif [[ "$token" == -* ]]; then
86
+ COMPREPLY=( $( compgen -W '-a -b -i -r -s -t -u --archive --at --auto --back --bool --date --interactive --remove --section --search --took --tag --unfinished' -- $token ) )
87
+
88
+ fi
89
+ }
90
+
91
+ _doing_grep() {
92
+
93
+ if [[ "$token" == --* ]]; then
94
+ COMPREPLY=( $( compgen -W '--after --before --interactive --output --only_timed --section --times --tag_sort --totals' -- $token ) )
95
+ elif [[ "$token" == -* ]]; then
96
+ COMPREPLY=( $( compgen -W '-i -o -s -t --after --before --interactive --output --only_timed --section --times --tag_sort --totals' -- $token ) )
97
+
98
+ fi
99
+ }
100
+
101
+ _doing_help() {
102
+
103
+ if [[ "$token" == --* ]]; then
104
+ COMPREPLY=( $( compgen -W '' -- $token ) )
105
+ elif [[ "$token" == -* ]]; then
106
+ COMPREPLY=( $( compgen -W ' ' -- $token ) )
107
+
108
+ fi
109
+ }
110
+
111
+ _doing_import() {
112
+
113
+ if [[ "$token" == --* ]]; then
114
+ COMPREPLY=( $( compgen -W '--after --autotag --before --from --only_timed --overlap --prefix --section --search --tag --type' -- $token ) )
115
+ elif [[ "$token" == -* ]]; then
116
+ COMPREPLY=( $( compgen -W '-f -s --after --autotag --before --from --only_timed --overlap --prefix --section --search --tag --type' -- $token ) )
117
+
118
+ fi
119
+ }
120
+
121
+ _doing_last() {
122
+
123
+ if [[ "$token" == --* ]]; then
124
+ COMPREPLY=( $( compgen -W '--bool --editor --section --search --tag' -- $token ) )
125
+ elif [[ "$token" == -* ]]; then
126
+ COMPREPLY=( $( compgen -W '-e -s --bool --editor --section --search --tag' -- $token ) )
127
+
128
+ fi
129
+ }
130
+
131
+ _doing_later() {
132
+
133
+ if [[ "$token" == --* ]]; then
134
+ COMPREPLY=( $( compgen -W '--back --editor --note' -- $token ) )
135
+ elif [[ "$token" == -* ]]; then
136
+ COMPREPLY=( $( compgen -W '-b -e -n --back --editor --note' -- $token ) )
137
+
138
+ fi
139
+ }
140
+
141
+ _doing_mark() {
142
+
143
+ if [[ "$token" == --* ]]; then
144
+ COMPREPLY=( $( compgen -W '--bool --count --date --force --interactive --remove --section --search --tag --unfinished' -- $token ) )
145
+ elif [[ "$token" == -* ]]; then
146
+ COMPREPLY=( $( compgen -W '-c -d -i -r -s -u --bool --count --date --force --interactive --remove --section --search --tag --unfinished' -- $token ) )
147
+
148
+ fi
149
+ }
150
+
151
+ _doing_meanwhile() {
152
+
153
+ if [[ "$token" == --* ]]; then
154
+ COMPREPLY=( $( compgen -W '--archive --back --editor --note --section' -- $token ) )
155
+ elif [[ "$token" == -* ]]; then
156
+ COMPREPLY=( $( compgen -W '-a -b -e -n -s --archive --back --editor --note --section' -- $token ) )
157
+
158
+ fi
159
+ }
160
+
161
+ _doing_note() {
162
+
163
+ if [[ "$token" == --* ]]; then
164
+ COMPREPLY=( $( compgen -W '--bool --editor --interactive --remove --section --search --tag' -- $token ) )
165
+ elif [[ "$token" == -* ]]; then
166
+ COMPREPLY=( $( compgen -W '-e -i -r -s --bool --editor --interactive --remove --section --search --tag' -- $token ) )
167
+
168
+ fi
169
+ }
170
+
171
+ _doing_now() {
172
+
173
+ if [[ "$token" == --* ]]; then
174
+ COMPREPLY=( $( compgen -W '--back --editor --finish_last --note --section' -- $token ) )
175
+ elif [[ "$token" == -* ]]; then
176
+ COMPREPLY=( $( compgen -W '-b -e -f -n -s --back --editor --finish_last --note --section' -- $token ) )
177
+
178
+ fi
179
+ }
180
+
181
+ _doing_on() {
182
+
183
+ if [[ "$token" == --* ]]; then
184
+ COMPREPLY=( $( compgen -W '--output --section --times --tag_sort --totals' -- $token ) )
185
+ elif [[ "$token" == -* ]]; then
186
+ COMPREPLY=( $( compgen -W '-o -s -t --output --section --times --tag_sort --totals' -- $token ) )
187
+
188
+ fi
189
+ }
190
+
191
+ _doing_open() {
192
+
193
+ if [[ "$token" == --* ]]; then
194
+ COMPREPLY=( $( compgen -W '--app --bundle_id' -- $token ) )
195
+ elif [[ "$token" == -* ]]; then
196
+ COMPREPLY=( $( compgen -W '-a -b --app --bundle_id' -- $token ) )
197
+
198
+ fi
199
+ }
200
+
201
+ _doing_plugins() {
202
+
203
+ if [[ "$token" == --* ]]; then
204
+ COMPREPLY=( $( compgen -W '--column --type' -- $token ) )
205
+ elif [[ "$token" == -* ]]; then
206
+ COMPREPLY=( $( compgen -W '-c -t --column --type' -- $token ) )
207
+
208
+ fi
209
+ }
210
+
211
+ _doing_recent() {
212
+
213
+ if [[ "$token" == --* ]]; then
214
+ COMPREPLY=( $( compgen -W '--interactive --section --times --tag_sort --totals' -- $token ) )
215
+ elif [[ "$token" == -* ]]; then
216
+ COMPREPLY=( $( compgen -W '-i -s -t --interactive --section --times --tag_sort --totals' -- $token ) )
217
+
218
+ fi
219
+ }
220
+
221
+ _doing_reset() {
222
+
223
+ if [[ "$token" == --* ]]; then
224
+ COMPREPLY=( $( compgen -W '--bool --interactive --resume --section --search --tag' -- $token ) )
225
+ elif [[ "$token" == -* ]]; then
226
+ COMPREPLY=( $( compgen -W '-i -r -s --bool --interactive --resume --section --search --tag' -- $token ) )
227
+
228
+ fi
229
+ }
230
+
231
+ _doing_rotate() {
232
+
233
+ if [[ "$token" == --* ]]; then
234
+ COMPREPLY=( $( compgen -W '--before --bool --keep --section --search --tag' -- $token ) )
235
+ elif [[ "$token" == -* ]]; then
236
+ COMPREPLY=( $( compgen -W '-k -s --before --bool --keep --section --search --tag' -- $token ) )
237
+
238
+ fi
239
+ }
240
+
241
+ _doing_sections() {
242
+
243
+ if [[ "$token" == --* ]]; then
244
+ COMPREPLY=( $( compgen -W '--column' -- $token ) )
245
+ elif [[ "$token" == -* ]]; then
246
+ COMPREPLY=( $( compgen -W '-c --column' -- $token ) )
247
+
248
+ fi
249
+ }
250
+
251
+ _doing_select() {
252
+
253
+ if [[ "$token" == --* ]]; then
254
+ COMPREPLY=( $( compgen -W '--archive --resume --cancel --delete --editor --finish --flag --force --move --menu --output --search --remove --section --save_to --tag' -- $token ) )
255
+ elif [[ "$token" == -* ]]; then
256
+ COMPREPLY=( $( compgen -W '-a -c -d -e -f -m -o -r -s -t --archive --resume --cancel --delete --editor --finish --flag --force --move --menu --output --search --remove --section --save_to --tag' -- $token ) )
257
+
258
+ fi
259
+ }
260
+
261
+ _doing_show() {
262
+ OLD_IFS="$IFS"
263
+ local token=${COMP_WORDS[$COMP_CWORD]}
264
+ IFS=$' '
265
+ local words=$(doing sections)
266
+ IFS="$OLD_IFS"
267
+
268
+ if [[ "$token" == --* ]]; then
269
+ COMPREPLY=( $( compgen -W '--age --after --bool --before --count --from --interactive --output --only_timed --sort --search --times --tag --tag_order --tag_sort --totals' -- $token ) )
270
+ elif [[ "$token" == -* ]]; then
271
+ COMPREPLY=( $( compgen -W '-a -b -c -f -i -o -s -t --age --after --bool --before --count --from --interactive --output --only_timed --sort --search --times --tag --tag_order --tag_sort --totals' -- $token ) )
272
+ else
273
+ local nocasematchWasOff=0
274
+ shopt nocasematch >/dev/null || nocasematchWasOff=1
275
+ (( nocasematchWasOff )) && shopt -s nocasematch
276
+ local w matches=()
277
+ OLD_IFS="$IFS"
278
+ IFS=$' '‰
279
+ for w in $words; do
280
+ if [[ "$w" == "$token"* ]]; then
281
+ matches+=("${w// / }")
282
+ fi
283
+ done
284
+ IFS="$OLD_IFS"
285
+ (( nocasematchWasOff )) && shopt -u nocasematch
286
+ COMPREPLY=("${matches[@]}")
287
+
288
+ fi
289
+ }
290
+
291
+ _doing_since() {
292
+
293
+ if [[ "$token" == --* ]]; then
294
+ COMPREPLY=( $( compgen -W '--output --section --times --tag_sort --totals' -- $token ) )
295
+ elif [[ "$token" == -* ]]; then
296
+ COMPREPLY=( $( compgen -W '-o -s -t --output --section --times --tag_sort --totals' -- $token ) )
297
+
298
+ fi
299
+ }
300
+
301
+ _doing_tag() {
302
+
303
+ if [[ "$token" == --* ]]; then
304
+ COMPREPLY=( $( compgen -W '--autotag --bool --count --date --force --interactive --remove --regex --rename --section --search --tag --unfinished' -- $token ) )
305
+ elif [[ "$token" == -* ]]; then
306
+ COMPREPLY=( $( compgen -W '-a -c -d -i -r -s -u --autotag --bool --count --date --force --interactive --remove --regex --rename --section --search --tag --unfinished' -- $token ) )
307
+
308
+ fi
309
+ }
310
+
311
+ _doing_template() {
312
+
313
+ if [[ "$token" == --* ]]; then
314
+ COMPREPLY=( $( compgen -W '--list' -- $token ) )
315
+ elif [[ "$token" == -* ]]; then
316
+ COMPREPLY=( $( compgen -W '-l --list' -- $token ) )
317
+
318
+ fi
319
+ }
320
+
321
+ _doing_today() {
322
+
323
+ if [[ "$token" == --* ]]; then
324
+ COMPREPLY=( $( compgen -W '--after --before --output --section --times --tag_sort --totals' -- $token ) )
325
+ elif [[ "$token" == -* ]]; then
326
+ COMPREPLY=( $( compgen -W '-o -s -t --after --before --output --section --times --tag_sort --totals' -- $token ) )
327
+
328
+ fi
329
+ }
330
+
331
+ _doing_undo() {
332
+
333
+ if [[ "$token" == --* ]]; then
334
+ COMPREPLY=( $( compgen -W '--file' -- $token ) )
335
+ elif [[ "$token" == -* ]]; then
336
+ COMPREPLY=( $( compgen -W '-f --file' -- $token ) )
337
+
338
+ fi
339
+ }
340
+
341
+ _doing_view() {
342
+ OLD_IFS="$IFS"
343
+ local token=${COMP_WORDS[$COMP_CWORD]}
344
+ IFS=$' '
345
+ local words=$(doing views)
346
+ IFS="$OLD_IFS"
347
+
348
+ if [[ "$token" == --* ]]; then
349
+ COMPREPLY=( $( compgen -W '--after --bool --before --count --color --interactive --output --only_timed --section --search --times --tag --tag_order --tag_sort --totals' -- $token ) )
350
+ elif [[ "$token" == -* ]]; then
351
+ COMPREPLY=( $( compgen -W '-b -c -i -o -s -t --after --bool --before --count --color --interactive --output --only_timed --section --search --times --tag --tag_order --tag_sort --totals' -- $token ) )
352
+ else
353
+ local nocasematchWasOff=0
354
+ shopt nocasematch >/dev/null || nocasematchWasOff=1
355
+ (( nocasematchWasOff )) && shopt -s nocasematch
356
+ local w matches=()
357
+ OLD_IFS="$IFS"
358
+ IFS=$' '‰
359
+ for w in $words; do
360
+ if [[ "$w" == "$token"* ]]; then
361
+ matches+=("${w// / }")
362
+ fi
363
+ done
364
+ IFS="$OLD_IFS"
365
+ (( nocasematchWasOff )) && shopt -u nocasematch
366
+ COMPREPLY=("${matches[@]}")
367
+
368
+ fi
369
+ }
370
+
371
+ _doing_views() {
372
+
373
+ if [[ "$token" == --* ]]; then
374
+ COMPREPLY=( $( compgen -W '--column' -- $token ) )
375
+ elif [[ "$token" == -* ]]; then
376
+ COMPREPLY=( $( compgen -W '-c --column' -- $token ) )
377
+
378
+ fi
379
+ }
380
+
381
+ _doing_wiki() {
382
+
383
+ if [[ "$token" == --* ]]; then
384
+ COMPREPLY=( $( compgen -W '--after --bool --before --from --only_timed --section --search --tag' -- $token ) )
385
+ elif [[ "$token" == -* ]]; then
386
+ COMPREPLY=( $( compgen -W '-b -f -s --after --bool --before --from --only_timed --section --search --tag' -- $token ) )
387
+
388
+ fi
389
+ }
390
+
391
+ _doing_yesterday() {
392
+
393
+ if [[ "$token" == --* ]]; then
394
+ COMPREPLY=( $( compgen -W '--after --before --output --section --times --tag_order --tag_sort --totals' -- $token ) )
395
+ elif [[ "$token" == -* ]]; then
396
+ COMPREPLY=( $( compgen -W '-o -s -t --after --before --output --section --times --tag_order --tag_sort --totals' -- $token ) )
397
+
398
+ fi
399
+ }
400
+
401
+ _doing()
402
+ {
403
+ local last="${@: -1}"
404
+ local token=${COMP_WORDS[$COMP_CWORD]}
405
+
406
+ if [[ $last =~ (again|resume) ]]; then _doing_again
407
+ elif [[ $last =~ (archive|move) ]]; then _doing_archive
408
+ elif [[ $last =~ (autotag) ]]; then _doing_autotag
409
+ elif [[ $last =~ (cancel) ]]; then _doing_cancel
410
+ elif [[ $last =~ (config) ]]; then _doing_config
411
+ elif [[ $last =~ (done|did) ]]; then _doing_done
412
+ elif [[ $last =~ (finish) ]]; then _doing_finish
413
+ elif [[ $last =~ (grep|search) ]]; then _doing_grep
414
+ elif [[ $last =~ (help) ]]; then _doing_help
415
+ elif [[ $last =~ (import) ]]; then _doing_import
416
+ elif [[ $last =~ (last) ]]; then _doing_last
417
+ elif [[ $last =~ (later) ]]; then _doing_later
418
+ elif [[ $last =~ (mark|flag) ]]; then _doing_mark
419
+ elif [[ $last =~ (meanwhile) ]]; then _doing_meanwhile
420
+ elif [[ $last =~ (note) ]]; then _doing_note
421
+ elif [[ $last =~ (now|next) ]]; then _doing_now
422
+ elif [[ $last =~ (on) ]]; then _doing_on
423
+ elif [[ $last =~ (open) ]]; then _doing_open
424
+ elif [[ $last =~ (plugins) ]]; then _doing_plugins
425
+ elif [[ $last =~ (recent) ]]; then _doing_recent
426
+ elif [[ $last =~ (reset|begin) ]]; then _doing_reset
427
+ elif [[ $last =~ (rotate) ]]; then _doing_rotate
428
+ elif [[ $last =~ (sections) ]]; then _doing_sections
429
+ elif [[ $last =~ (select) ]]; then _doing_select
430
+ elif [[ $last =~ (show) ]]; then _doing_show
431
+ elif [[ $last =~ (since) ]]; then _doing_since
432
+ elif [[ $last =~ (tag) ]]; then _doing_tag
433
+ elif [[ $last =~ (template) ]]; then _doing_template
434
+ elif [[ $last =~ (today) ]]; then _doing_today
435
+ elif [[ $last =~ (undo) ]]; then _doing_undo
436
+ elif [[ $last =~ (view) ]]; then _doing_view
437
+ elif [[ $last =~ (views) ]]; then _doing_views
438
+ elif [[ $last =~ (wiki) ]]; then _doing_wiki
439
+ elif [[ $last =~ (yesterday) ]]; then _doing_yesterday
440
+ else
441
+ OLD_IFS="$IFS"
442
+ IFS=$'
443
+ '
444
+ COMPREPLY=( $(compgen -W "$(doing help -c)" -- $token) )
445
+ IFS="$OLD_IFS"
446
+ fi
447
+ }
448
+
449
+ complete -F _doing doing