pbeckingham / task

A command line GTD application for managing text todo lists.

This URL has Read+Write access

task / TUTORIAL
100644 655 lines (423 sloc) 18.274 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
Task program tutorial, for version 1.0.0
----------------------------------------
 
This guide shows how to quickly set up the task program, and become proficient
with it.
 
  Contents:
    Quick Setup
    Simple Usage
    Advanced Usage
    Interacting with the Shell
    Configuring Task
    Colors
 
 
 
Quick Setup
-----------
 
Build the task program according to the directions in the INSTALL file. This
transcript illustrates a typical installation:
 
  % ls
  task-1.0.0.tar.gz
  % gunzip task-1.0.0.tar.gz
  % tar xf task-1.0.0.tar
  % cd task-1.0.0
  % ./configure
  ...
  % make
  ...
  % make install # (may require sudo, depending on --prefix)
 
You need to make sure that the installed task program is in your PATH
environment variable.
 
Task reads a configuration file - called .taskrc in your home directory - and
stores pending and completed tasks in in a directory specified in the
configuration file.
 
The simplest way to get a configuration file and task directory is to run task.
On startup, task will check to see if it can find the configuration file and
task directory, and if not found, will ask you whether it may create both.
 
  % task version
 
  A configuration file could not be found in /Users/paul/.taskrc
 
  Would you like a sample .taskrc created, so task can proceed? (y/n) y
  Done.
 
  [then task will show version information]
 
 
Simple Usage
------------
 
Let us begin by adding some tasks:
 
  % task add Book plane ticket
  % task add Rent a tux
  % task add Reserve a rental car
  % task add Reserve a hotel room
 
That's it. You'll notice immediately that task has a very minimalist
interface. Let us take a look at those tasks:
 
  % task ls
 
  ID Project Pri Description
   1 Book plane ticket
   2 Rent a tux
   3 Reserve a rental car
   4 Send John a birthday card
 
The 'ls' command provides the most minimal list of tasks. Each task has been
given an id number, and you can see that there are no projects or priorities
assigned. Wait a minute - I own a tux, I don't need to rent one. Let us delete
task 2:
 
  % task 2 delete
  Permanently delete task? (y/n) y
 
Task wants you to confirm deletions. To remove the confirmation, edit your
.taskrc file and change the line:
 
  confirmation=yes
 
to have a value of "no".
 
While the use of projects and priorities are not essential to benefitting from
task, they can be very useful when the list of tasks grows large. Let's assign
a project to these tasks:
 
  % task 1 project:Wedding
  % task 3 project:Wedding
  % task 4 project:Family
  % task ls
 
  ID Project Pri Description
   3 Family Send John a birthday card
   2 Wedding Reserve a rental car
   1 Wedding Book plane ticket
 
Notice that the id numbers have changed. When tasks get deleted, or have their
attributes changed (project, for example), the ids are prone to change. But the
id numbers will remain valid until the next 'ls' command is run. You should
only use the ids from the most recent 'ls' command. The ids change, because
task is always trying to use small numbers so that it is easy for you to enter
them correctly. Now that projects are assigned, we can look at just the Wedding
project tasks:
 
  % task ls project:Wedding
 
  ID Project Pri Description
   1 Wedding Book plane ticket
   2 Wedding Reserve a rental car
 
Any command arguments after the 'ls' are used for filtering the output. We
could also have requested:
 
  % task ls ticket plane
 
  ID Project Pri Description
   1 Wedding Book plane ticket
 
Now let's prioritize. Priorities can be H, M or L (High, Medium, Low).
 
  % task ls
 
  ID Project Pri Description
   3 Family Send John a birthday card
   2 Wedding Reserve a rental car
   1 Wedding Book plane ticket
 
  % task 1 priority:H
  % task 2 prior:M
  % task 3 pr:H
  Ambiguous attribute 'pr' - could be either of project, priority
  % task 3 pri:H
  % task ls
 
  ID Project Pri Description
   3 Family H Send John a birthday card
   1 Wedding H Book plane ticket
   2 Wedding M Reserve a rental car
 
Notice that task supports the abbreviation of words such as priority, project.
Priority can be abbreviated to pri, but not pr, because it is ambiguous. Now
that tasks have been prioritized, you can see that the tasks are being sorted
by priority, with the highest priority tasks at the top.
 
These attributes can all be provided when the task is added, instead of
applying them afterwards, as shown. The following command shows how to set all
the attributes at once:
 
  % task add project:Wedding priority:H Book plane ticket
 
The 'ls' command provides the least information for each task. The 'list'
command provides more:
 
  % task list
 
  ID Project Pri Due Active Age Description
   3 Family H 4 mins Send John a birthday card
   1 Wedding H 5 mins Book plane ticket
   2 Wedding M 5 mins Reserve a rental car
 
Notice that a task can have a due date, and can be active. The task lists are
sorted by due date, then priority. Let's add due dates:
 
  % task 3 due:6/25/2008
  % task 1 due:7/31/2008
  % task list
 
  ID Project Pri Due Active Age Description
   3 Family H 6/25/2008 6 mins Send John a birthday card
   1 Wedding H 7/31/2008 7 mins Book plane ticket
   2 Wedding M 7 mins Reserve a rental car
 
If today's date is 6/23/2008, then task 3 is due in 2 days. It will be colored
yellow if your terminal supports color. To change this color, edit your
.taskrc file, and change the line to one of these alternatives:
 
  color.due=red
  color.due=on_blue
  color.due=red on_blue
  color.due=bold_red on_blue
 
Where color is one of the following:
 
  black
  blue
  red
  green
  cyan
  magenta
  yellow
  white
 
All colors are specified in this way. Take a look in .taskrc for all the other
color rules that you control.
 
Tagging tasks is a good way to group them, aside from specifying a project. To
add a tag to a task:
 
  % task <id> +tag
 
The plus sign indicates that this is a tag. Any number of tags may be applied
to a task, and then used for searching. Tags are just single words that are
labels.
 
  % task list
 
  ID Project Pri Due Active Age Description
   3 Family H 6/25/2008 8 mins Send John a birthday card
   1 Wedding H 7/31/2008 9 mins Book plane ticket
   2 Wedding M 9 mins Reserve a rental car
 
  % task 1 +phone
  % task 2 +phone
  % task 3 +shopping
  % task 3 +john
 
  % task list +phone
 
  ID Project Pri Due Active Age Description
   1 Wedding H 7/31/2008 9 mins Book plane ticket
   2 Wedding M 9 mins Reserve a rental car
 
To remove a tag from a task, use the minus sign:
 
  % task 3 -john
 
 
 
Advanced Use
------------
 
Here are the other commands, in some detail. Note that the command:
 
  % task
 
with no arguments will generate a help message that lists all these commands.
 
 
% task projects
---------------
 
  This report generates a list of all the different projects that you are using
  along with a count of the pending tasks for each project. For example:
 
    % task projects
 
    Project Tasks
    Errands 1
    Birthdays 3
    Car 2
 
 
 
% task summary
--------------
 
  This report lists all the projects and a summary of their task status.
 
    % task summary
 
    Project Remaining Avg age Complete 0% 100%
    Errands 1 3 days 50% XXXXXXXXXXXXXXXX
    Birthdays 3 7 mths 0%
    Car 2 2 wks 25% XXXXXXXXX
 
  This shows the project, the remaining tasks, the average age of each task,
  the percentage completed (remaining vs total) and a bar indicating that
  percentage.
 
 
 
% task delete <id>
------------------
 
  There are two ways of getting rid of tasks - mark them as done, or delete
  them.
 
 
 
% task done <id>
----------------
 
  This is how a task is marked as done.
 
 
 
% task list ...
---------------
 
  The list report will show the active status, and age of the task in addition
  to the columns that "task ls" shows. It is just a more detailed list.
 
 
 
% task long ...
---------------
 
  The long report will show the entry date and start date of a task, in
  addition to the columns that the "task list" shows.
 
 
 
% task start <id>
-----------------
 
  This marks a task as started (and therefore active), which is shown in the
  "list" report:
 
    % task list
 
    ID Project Pri Due Active Age Description
    12 Errand L Remember to deposit check
    ...
 
    % task start 12
    % task list
 
    ID Project Pri Due Active Age Description
    12 Errand L * 3 days Remember to deposit check
    ...
 
 
 
% task active
-------------
 
  Shows all active tasks, that is, the tasks for which the "task start ..."
  command was run, as shown above.
 
 
 
% task overdue
--------------
 
  Simply lists all the task that have a due date that is past, in "list"
  format.
 
 
 
% task history
--------------
 
  This report shows you an overview of how many tasks were added, completed and
  deleted, by month. It looks like this:
 
    % task history
 
    Year Month Added Completed Deleted Net
    2008 March 21 16 0 5
         April 13 11 1 1
         May 8 14 3 -9
 
  This shows that for the three months that task has been used, March and April
  saw the total number of tasks increase, but in May the number decreased as
  more task were completed than added.
 
 
 
% task calendar
---------------
 
  This report shows a calendar of the current month, with any task due or
  overdue dates marked on it. Color is used to mark these dates.
 
    % task calendar
 
    May 2008
 
    Su Mo Tu We Th Fr Sa
                 1 2 3
     4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28 29 30 31
 
 
 
% task next
-----------
 
  This report shows you the tasks you should probable work on next. Task will
  scan all the tasks and will pick two task from each project to report. Those
  two tasks will be chosen in order of overdue, due soon, High, Medium or Low
  priority. Essentially task chooses the two most important task for each
  project and displays them ordered in the usual way.
 
  If you wish to show a different number of tasks per project, modify the entry
  in .taskrc:
 
    next=2
 
  To be your preferred number.
 
 
 
% task <id> ...
---------------
 
  When a task id is specified, everything applies to just that task. Suppose
  we needed to correct a task:
 
  % task ls
 
  ID Project Pri Description
  12 Errand L Remember to deposit chekc
  ...
 
  % task 12 Remember to deposit bonus check
  % task ls
 
  ID Project Pri Description
  12 Errand L Remember to deposit bonus check
  ...
 
 
 
% task /from/to/
----------------
 
  If a task has been entered with a typo, it can be easily corrected by this
  command. For example:
 
    % task ls
 
    ID Project Pri Description
    12 Errand L Remember to deposit chekc
    ...
 
    % task 12 /chekc/check/
    % task ls
 
    ID Project Pri Description
    12 Errand L Remember to deposit check
    ...
 
  This command makes single corrections to a task description.
 
 
 
% task tags
-----------
 
  This command will generate a list of all the tags that are currently in use
  by task.
 
 
 
% task info <id>
----------------
 
  This command gives detailed information about a single task. It will tell
  you when the task was entered, when started, its status, tags, and more.
 
 
 
% task stats
------------
 
  This command generates a list of statistics about your task usage, such as
  the average time it takes to complete a task, how often new tasks are added,
  and more.
 
 
 
% task completed
----------------
 
  This generates a list of all tasks that have been completed, sorted by their
  completion date.
 
 
 
% task export <file name>
-------------------------
 
  This instructs task to write out a CSV format dump of all tasks, both pending
  and completed, to the file specified. This is how you might view tasks in a
  spreadsheet.
 
 
 
% task colors
-------------
 
  This command displays all the colors that task supports.
 
 
 
% task usage
------------
 
  If logging has been enabled by the "command.logging=on" directive in the
  .taskrc file, then task will record every command that is run. When this
  command is run, task will display a count of how many times each command was
  used.
 
  This command is for the purpose of seeing whether command are actually used.
 
 
 
% task version
--------------
 
  This can be used to show the version number of task, and to display all the
  current configuration settings, as read from the .taskrc file.
 
 
 
Interacting with the Shell
--------------------------
 
  Certain characters are interpreted by the shell. For example, the "&". If
  you wish to include the & in a task description, you need to escape it, so
  the shell doesn't interpret it. For example:
 
    % task add Buy bread & milk
 
  This command is an error because of the &. The shell will consider this to
  be two commands:
 
    % task add Buy bread &
    % milk
 
  The shell treats the & character as an indicator that the command is complete
  and should be run in the background. Then the shell considers "milk" to be a
  command all by itself. Which it is not. One way to get around this is to
  individually escape the & character:
 
    % task add Buy bread \& milk
 
  Another is to quote the entire description, with either ' or " characters:
 
    % task add "Buy bread & milk"
 
  Task itself interprets the commands, and it too can make mistakes. For
  example, any colon : character will be interpreted by task as a delimiter
  between an attribute name and its value. Currently there is no workaround
  for this.
 
 
 
% task <id> fg:... bg:...
-------------------------
 
  Not strictly a command, the setting of the fg and bg (foreground and
  background) attributes determines the colors used to represent the task.
  Valid foreground colors are:
 
  Valid background colors are:
 
  Note that these are not just colors, but combinations of colors and
  attributes.
 
  Note also that this capability does depend on whether your terminal program
  can display these colors.
 
 
 
 
Configuring Task
----------------
 
  Task recognizes several entries in the .taskrc file for configuration
  purposes. Valid entries are of the form:
 
    name=value
 
  Valid examples are:
 
    data.location This is a path to the directory containing all the task
                        files. By default, it is set up to be ~/.task, for
                        example: /Users/paul/.task
 
    command.logging May be "on" or "off", defaulting to "off". This
                        determines whether task records commands. This is not
                        generally useful, except while developing task.
 
    confirmation May be "yes" or "no", and determines whether task will
                        ask for confirmation before deleting a task.
 
    nag This may be a string of text, or blank. It is used as
                        a prompt when a task is completed that is not considered
                        high priority. The "task next" command lists important
                        tasks, and completing one of those does not generate
                        this nagging. Default value is:
 
                          Note: try to stick to high priority tasks.
                          See "task next".
 
    next Is a number, defaulting to 2, which is the number of
                        tasks for each project that are shown in the "task next"
                        command.
 
    curses Determines whether task uses ncurses to establish the
                        size of the window you are using, for text wrapping.
 
    color May be "on" or "off". Determines whether task uses
                        color.
 
    color.overdue These are the coloration rules. They correspond to a
    color.due particular attribute of a task, such as it being due, or
    color.pri.H being active, and specifies the automatic coloring of
    color.pri.M that task.
    color.pri.L
    color.pri.none The value may be one optional foreground color (see
    color.active below) and one optional background color.
    color.tagged
                        For example, the value may be:
 
                          bold_red on_bright_yellow
 
    color.tag.X Colors any task that has the tag X.
 
    color.project.X Colors any task assigned to project X.
 
    color.keyword.X Colors any task where the description contains X.
 
 
Colors
------
 
  Task supports color in several places. In cases where you may specify a
  color, a foreground, a background, or a combination foreground and background
  color may be used. The following are valid foreground colors:
 
             bold underline bold_underline
    black bold_black underline_black bold_underline_black
    red bold_red underline_red bold_underline_red
    green bold_green underline_green bold_underline_green
    yellow bold_yellow underline_yellow bold_underline_yellow
    blue bold_blue underline_blue bold_underline_blue
    magenta bold_magenta underline_magenta bold_underline_magenta
    cyan bold_cyan underline_cyan bold_underline_cyan
    white bold_white underline_white bold_underline_white
 
  and the following are valid background colors:
 
    on_black on_bright_black
    on_red on_bright_red
    on_green on_bright_green
    on_yellow on_bright_yellow
    on_blue on_bright_blue
    on_magenta on_bright_magenta
    on_cyan on_bright_cyan
    on_white on_bright_white