todo.rb 0.1.9 → 0.2.0
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.
- data/bin/todo.rb +3 -0
- data/index.html +572 -0
- data/lib/todo.rb/help.rb +3 -2
- data/lib/todo.rb/version.rb +1 -1
- data/lib/todo.rb.rb +10 -0
- data/todo.txt +2 -1
- metadata +7 -6
data/bin/todo.rb
CHANGED
@@ -29,6 +29,7 @@ end
|
|
29
29
|
|
30
30
|
command = args.shift
|
31
31
|
has_args = !args.empty?
|
32
|
+
rest_args = args.join(' ')
|
32
33
|
|
33
34
|
tag = command && command[/^(@|\+)\S+$/,0]
|
34
35
|
|
@@ -57,6 +58,8 @@ elsif command == 'pri' && args[0]
|
|
57
58
|
t.ed_command! "#{args[0]}s/$/ !/\nm0"
|
58
59
|
elsif command == 'depri' && args[0]
|
59
60
|
t.ed_command! "#{args[0]}s/ *!//g\nm/^[^!]*$/-1"
|
61
|
+
elsif command =~ /e(dit)?$/
|
62
|
+
t.external_edit rest_args
|
60
63
|
elsif command.nil?
|
61
64
|
t.catn
|
62
65
|
else
|
data/index.html
ADDED
@@ -0,0 +1,572 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset='utf-8'>
|
5
|
+
|
6
|
+
<title>danchoi/todo.rb @ GitHub</title>
|
7
|
+
|
8
|
+
<style type="text/css">
|
9
|
+
body {
|
10
|
+
margin-top: 1.0em;
|
11
|
+
background-color: #FFFFFF;
|
12
|
+
font-family: Helvetica, Arial, FreeSans, san-serif;
|
13
|
+
color: #555555;
|
14
|
+
line-height: 1.5em;
|
15
|
+
}
|
16
|
+
#container {
|
17
|
+
margin: 0 auto;
|
18
|
+
width: 700px;
|
19
|
+
}
|
20
|
+
h1 { font-size: 3.8em; color: #333333; margin-bottom: 3px; }
|
21
|
+
h1 .small { font-size: 0.4em; }
|
22
|
+
h1 a { text-decoration: none }
|
23
|
+
h2 { margin-top: 1.5em; font-size: 1.5em; color: #333333; }
|
24
|
+
h3 { text-align: center; color: #333333; }
|
25
|
+
a { color: #333333; }
|
26
|
+
.description { font-size: 1.2em; margin-bottom: 30px; margin-top: 30px; font-style: italic;}
|
27
|
+
.download { float: right; }
|
28
|
+
code {
|
29
|
+
font-size: 0.9em;
|
30
|
+
font-family:Andale Mono;
|
31
|
+
background-color:#ECECEC;
|
32
|
+
border: 1px solid #DDD;
|
33
|
+
padding: 2px;
|
34
|
+
|
35
|
+
}
|
36
|
+
pre {
|
37
|
+
border-radius: 5px;
|
38
|
+
line-height: 1.1em;
|
39
|
+
padding: 15px;
|
40
|
+
font-size: smaller;
|
41
|
+
color:#08FF08;
|
42
|
+
font-family:Andale Mono;
|
43
|
+
background-color:black
|
44
|
+
}
|
45
|
+
hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
|
46
|
+
.footer { text-align:center; padding-top:30px; font-style: italic; }
|
47
|
+
</style>
|
48
|
+
</head>
|
49
|
+
|
50
|
+
<body>
|
51
|
+
<a href="https://github.com/danchoi/todo.rb"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
|
52
|
+
|
53
|
+
<div id="container">
|
54
|
+
|
55
|
+
|
56
|
+
<h1><a href="https://github.com/danchoi/todo.rb">todo.rb</a>
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
<h2>Intro</h2>
|
61
|
+
|
62
|
+
<p> todo.rb is a command-line todo list manager. It stores data as simple
|
63
|
+
lists in flat text files and is highly interoperable with other Unix-style
|
64
|
+
tools. </p>
|
65
|
+
|
66
|
+
<p>
|
67
|
+
Like <a href="http://wiki.43folders.com/index.php/ToDo.txt">Merlin Mann</a>, I
|
68
|
+
used to edit my todo lists in Vim.
|
69
|
+
The problem is that Vim, like every popular text editor, presents a <a
|
70
|
+
href="http://books.google.com/books?id=RaPwX0sScf4C&lpg=PA93&ots=SNzsy-p8h6&dq=tenet%208%20avoid%20captive&pg=PA93#v=onepage&q&f=false">captive
|
71
|
+
user interface</a> which removes you from the command line
|
72
|
+
and is also more difficult to script than a standard, noninteractive Unix tool.
|
73
|
+
</p>
|
74
|
+
|
75
|
+
<p>todo.rb was designed to avoid these problems. It is a small, sharp,
|
76
|
+
Unix-style tool for managing lists, especially todo lists.</p>
|
77
|
+
|
78
|
+
<p>One notable thing about
|
79
|
+
todo.rb is that it uses the ancient and venerable Unix text editor <a
|
80
|
+
href="http://en.wikipedia.org/wiki/Ed_%28text_editor%29">ed</a> under the hood
|
81
|
+
to let you perform a wide range of edits on your todo.txt without leaving the
|
82
|
+
command line or impairing scriptability. If you haven't heard of ed, ed is the <a href="http://en.wikipedia.org/wiki/Obi-Wan_Kenobi">Obi-Wan Kenobi</a> of text editors. Highly underestimated and mistaken for a useless antique, ed can do amazingly useful things.</p>
|
83
|
+
|
84
|
+
<p>
|
85
|
+
Inspired by <a
|
86
|
+
href="http://ginatrapani.github.com/todo.txt-cli/">todo.sh</a> by Gina
|
87
|
+
Trapani, todo.rb carries that idea further in the direction of the
|
88
|
+
<a href="http://www.faqs.org/docs/artu/ch01s06.html">Unix philosophy</a>.
|
89
|
+
</p>
|
90
|
+
|
91
|
+
|
92
|
+
<h2>Requires</h2>
|
93
|
+
<p>Ruby 1.9</p>
|
94
|
+
|
95
|
+
<h2>Install</h2>
|
96
|
+
<pre>$ gem install todo.rb</pre>
|
97
|
+
|
98
|
+
<h2>Basics</h2>
|
99
|
+
|
100
|
+
<p>
|
101
|
+
The full command name is todo.rb, but you'll probably want to
|
102
|
+
alias it to something shorter. Put something like this in your
|
103
|
+
~/.bash_profile or ~/.bashrc:
|
104
|
+
</p>
|
105
|
+
|
106
|
+
<pre>alias t=todo.rb</pre>
|
107
|
+
|
108
|
+
<p>
|
109
|
+
This is a detailed guide to the program. You can type this to get help from the command line:
|
110
|
+
</p>
|
111
|
+
|
112
|
+
<pre>
|
113
|
+
$ t -h
|
114
|
+
</pre>
|
115
|
+
|
116
|
+
<p>todo.rb operates in the current working directory. It looks for a todo.txt
|
117
|
+
and done.txt file, and creates them if they don't already exist.
|
118
|
+
</p>
|
119
|
+
|
120
|
+
<pre>
|
121
|
+
$ t
|
122
|
+
Missing a todo.txt file. Creating.
|
123
|
+
Missing a done.txt file. Creating.
|
124
|
+
</pre>
|
125
|
+
|
126
|
+
<p>
|
127
|
+
You can start adding tasks like this.
|
128
|
+
</p>
|
129
|
+
|
130
|
+
<pre>
|
131
|
+
$ t @harvardsq buy some assam from tealuxe
|
132
|
+
0a1
|
133
|
+
> @harvardsq buy some assam from tealuxe
|
134
|
+
</pre>
|
135
|
+
|
136
|
+
<p>
|
137
|
+
@harvardsq is a <strong>context tag</strong> for your task. A context tag usually indicates a
|
138
|
+
location, but it can also represent an activity, like @email. The two lines you
|
139
|
+
see after the command prompt is a diff showing the change you just made.
|
140
|
+
</p>
|
141
|
+
|
142
|
+
<p>
|
143
|
+
To see the tasks we have accumulated so far, just press t.
|
144
|
+
</p>
|
145
|
+
|
146
|
+
<pre>
|
147
|
+
$ t
|
148
|
+
1 <span style='color:#00FFFF'>@harvardsq</span> buy some assam from tealuxe
|
149
|
+
</pre>
|
150
|
+
|
151
|
+
<p>
|
152
|
+
If you look in the file todo.txt, you'll see that all todo.rb is doing besides
|
153
|
+
printing the file is adding line numbers and coloring the context tags.
|
154
|
+
</p>
|
155
|
+
|
156
|
+
<p>
|
157
|
+
There is another type of tag you can use when you add tasks: a <strong>project tag</strong>.
|
158
|
+
It looks like this:
|
159
|
+
</p>
|
160
|
+
|
161
|
+
<pre>
|
162
|
+
$ t +opensource release todo.rb
|
163
|
+
1a2
|
164
|
+
> +opensource release todo.rb
|
165
|
+
</pre>
|
166
|
+
|
167
|
+
<p>
|
168
|
+
A project tag need not represent an actual project. It can stand for a topic, a
|
169
|
+
feature, or whatever.
|
170
|
+
</p>
|
171
|
+
|
172
|
+
<p>
|
173
|
+
When you print the task list, you'll see that project tags and context tags are
|
174
|
+
colored differently.
|
175
|
+
You can also have more than one tag per task, and you can mix project and context tags.
|
176
|
+
</p>
|
177
|
+
|
178
|
+
<pre>
|
179
|
+
$ t
|
180
|
+
1 <span style='color:#00FFFF'>@harvardsq</span> buy some assam from tealuxe
|
181
|
+
2 <span style='color:#DC143C'>+opensource</span> release todo.rb
|
182
|
+
</pre>
|
183
|
+
|
184
|
+
<p>
|
185
|
+
Let's add one more task to the @harvardsq context.
|
186
|
+
</p>
|
187
|
+
|
188
|
+
<pre>
|
189
|
+
$ t @harvardsq buy more moleskine notebooks
|
190
|
+
2a3
|
191
|
+
> @harvardsq buy more moleskine notebooks
|
192
|
+
|
193
|
+
$ t
|
194
|
+
1 <span style='color:#00FFFF'>@harvardsq</span> buy some assam from tealuxe
|
195
|
+
2 <span style='color:#DC143C'>+opensource</span> release todo.rb
|
196
|
+
3 <span style='color:#00FFFF'>@harvardsq</span> buy more moleskine notebooks
|
197
|
+
</pre>
|
198
|
+
|
199
|
+
<p>
|
200
|
+
So when you type <code>t [tag] [task]</code> a new task will be created and tagged.
|
201
|
+
If you don't want to provide a tag, or if you want to put the tag after the first word
|
202
|
+
in your task, or if you want to insert a task somewhere other than at the bottom of your todo list,
|
203
|
+
you need to use another syntax to create a task, a syntax which is based on `ed` commands.
|
204
|
+
This is described below. </p>
|
205
|
+
|
206
|
+
<p>
|
207
|
+
This is how you <strong>reorder tasks</strong>:
|
208
|
+
</p>
|
209
|
+
|
210
|
+
|
211
|
+
<pre>
|
212
|
+
$ t 3m0
|
213
|
+
0a1
|
214
|
+
> @harvardsq buy more moleskine notebooks
|
215
|
+
3d3
|
216
|
+
< @harvardsq buy more moleskine notebooks
|
217
|
+
|
218
|
+
$ t
|
219
|
+
1 <span style='color:#00FFFF'>@harvardsq</span> buy more moleskine notebooks
|
220
|
+
2 <span style='color:#00FFFF'>@harvardsq</span> buy some assam from tealuxe
|
221
|
+
3 <span style='color:#DC143C'>+opensource</span> release todo.rb
|
222
|
+
</pre>
|
223
|
+
|
224
|
+
<p> The <code>3m0</code> is an <strong>ed script</strong>. That's right, todo.rb delegates a
|
225
|
+
lot of commands to <a
|
226
|
+
href="http://en.wikipedia.org/wiki/Ed_%28text_editor%29">ed, the venerable Unix
|
227
|
+
text editor</a>. This gives you a lot of power to edit your todo list from the
|
228
|
+
command line with very succinct commands, and without disrupting your command
|
229
|
+
line workflow.
|
230
|
+
</p>
|
231
|
+
|
232
|
+
<p>So if you wanted to delete the first task, you would use <code>t 1d</code>.
|
233
|
+
If you wanted to delete a range, you could use something like <code>t 1,3d</code>.
|
234
|
+
</p>
|
235
|
+
|
236
|
+
<p>
|
237
|
+
If you want to insert text via an ed
|
238
|
+
command sequence, put a space after the ed motion
|
239
|
+
command, followed by the text to insert. Put quotes around the text if it
|
240
|
+
contains any characters you don't want interpreted by the shell.
|
241
|
+
</p>
|
242
|
+
|
243
|
+
|
244
|
+
<p>So for example, this would append a new task after line 3:</p>
|
245
|
+
|
246
|
+
<pre>
|
247
|
+
$ t 3a 'buy some fresh basil @traderjoes'
|
248
|
+
</pre>
|
249
|
+
|
250
|
+
<p> Remember, you do <strong>not</strong> have to use ed commands all the time.
|
251
|
+
You can always open the todo.txt file and edit it directly in a more conventional
|
252
|
+
text editor like Vim, Emacs, or TextEdit. You can also use Unix commands like
|
253
|
+
<code>cat >> todo.txt</code> or <code>echo 'buy arugla @wholefoods' >> todo.txt</code> to add
|
254
|
+
tasks. You have many options, and the data format of the todo.txt file is so
|
255
|
+
simple that there is almost no way you can accidentally corrupt it. But
|
256
|
+
it's possible to overwrite or delete the file accidentally, so please keep it
|
257
|
+
backed up or under version control.</p>
|
258
|
+
|
259
|
+
<p>
|
260
|
+
The "do" command marks tasks as done.
|
261
|
+
</p>
|
262
|
+
|
263
|
+
<pre>
|
264
|
+
$ t do 2
|
265
|
+
2d1
|
266
|
+
< @harvardsq buy some assam from tealuxe
|
267
|
+
</pre>
|
268
|
+
|
269
|
+
<p>Now watch this:</p>
|
270
|
+
|
271
|
+
<pre>
|
272
|
+
$ t do /moleskine/
|
273
|
+
1d0
|
274
|
+
< @harvardsq buy more moleskine notebooks
|
275
|
+
</pre>
|
276
|
+
|
277
|
+
<p>
|
278
|
+
Here we used a <strong>regular expression</strong> instead of a line number to grab the task.
|
279
|
+
This is possible because we are farming out work to `ed`.
|
280
|
+
Tasks can be identified with ed-style <strong>addressing</strong>.
|
281
|
+
So in the earlier example, instead of using <code>t 3m0</code>, we could have moved the task
|
282
|
+
with <code>t /notebook/m0</code>.
|
283
|
+
</p>
|
284
|
+
|
285
|
+
<p>
|
286
|
+
Addressing with regular expressions saves you from having to print the list to look up
|
287
|
+
task line numbers. You can just "use the force," so to speak, and manipulate your
|
288
|
+
todo.txt using your memory of the tasks that are in there.
|
289
|
+
</p>
|
290
|
+
|
291
|
+
<p>For example, you could use regex to move the first item with the word "exercise" in it to after the first item with
|
292
|
+
the word "deadline" in it:</p>
|
293
|
+
|
294
|
+
<pre>
|
295
|
+
t /exercise/m/deadline
|
296
|
+
</pre>
|
297
|
+
|
298
|
+
<p>The closing '/' is optional.</p>
|
299
|
+
|
300
|
+
<p> You can do batch manipulations with regular expressions too, using ed's
|
301
|
+
concise search and replace syntax. For example, running
|
302
|
+
</p>
|
303
|
+
|
304
|
+
<pre>
|
305
|
+
t ,s/@apple/@orange/g
|
306
|
+
</pre>
|
307
|
+
|
308
|
+
<p>
|
309
|
+
would change all the @apple tags in your todo list to @orange tags. Read more about `ed` commands
|
310
|
+
using <code>man ed</code>.
|
311
|
+
</p>
|
312
|
+
|
313
|
+
<p>
|
314
|
+
What's the difference between <code>t 2d</code> and <code>t do 2</code>? The first command simply deletes a task.
|
315
|
+
The second command moves it to the done.txt file and timestamps it with the date of
|
316
|
+
completion. You can display done tasks with the "done" command.
|
317
|
+
</p>
|
318
|
+
|
319
|
+
<pre>
|
320
|
+
$ t done
|
321
|
+
1 2012-01-29 <span style='color:#00FFFF'>@harvardsq</span> buy some assam from tealuxe
|
322
|
+
2 2012-01-29 <span style='color:#00FFFF'>@harvardsq</span> buy more moleskine notebooks
|
323
|
+
</pre>
|
324
|
+
|
325
|
+
<p>
|
326
|
+
To undo a task, use "undo" along with the ed address of the done item.
|
327
|
+
</p>
|
328
|
+
|
329
|
+
<pre>
|
330
|
+
$ t undo 2
|
331
|
+
1a2
|
332
|
+
> @harvardsq buy more moleskine notebooks
|
333
|
+
|
334
|
+
$ t
|
335
|
+
1 <span style='color:#DC143C'>+opensource</span> release todo.rb
|
336
|
+
2 buy fresh basil <span style='color:#00FFFF'>@traderjoes</span>
|
337
|
+
3 <span style='color:#00FFFF'>@harvardsq</span> buy more moleskine notebooks
|
338
|
+
</pre>
|
339
|
+
|
340
|
+
<p>
|
341
|
+
You can <strong>filter</strong> tasks by tag like this:
|
342
|
+
</p>
|
343
|
+
|
344
|
+
<pre>
|
345
|
+
$ t @harvardsq
|
346
|
+
3 <span style='color:#00FFFF'>@harvardsq</span> buy more moleskine notebooks
|
347
|
+
</pre>
|
348
|
+
|
349
|
+
<p>
|
350
|
+
You can also <strong>abbreviate tags</strong>. todo.rb will expand the
|
351
|
+
abbreviated tag to the first tag it finds that matches the abbreviation.
|
352
|
+
<p>
|
353
|
+
|
354
|
+
<pre>
|
355
|
+
$ t @h
|
356
|
+
3 <span style='color:#00FFFF'>@harvardsq</span> buy more moleskine notebooks
|
357
|
+
</pre>
|
358
|
+
|
359
|
+
You can list both incomplete and done tasks with the "all" command. You can
|
360
|
+
pass a context or project tag to "all" to filter the list by that tag.
|
361
|
+
Again, you can use abbrevation.
|
362
|
+
</p>
|
363
|
+
|
364
|
+
<pre>
|
365
|
+
$ t all @h
|
366
|
+
todo
|
367
|
+
3 <span style='color:#00FFFF'>@harvardsq</span> buy more moleskine notebooks
|
368
|
+
|
369
|
+
done
|
370
|
+
1 2012-01-29 <span style='color:#00FFFF'>@harvardsq</span> buy some assam from tealuxe
|
371
|
+
</pre>
|
372
|
+
|
373
|
+
|
374
|
+
<p>
|
375
|
+
There is one more way to highlight and filter items, and that is by flagging
|
376
|
+
tasks as <strong>high priority</strong>. A task is deemed to be high
|
377
|
+
priority if it contains an <strong>exclamation mark</strong>.
|
378
|
+
You can prioritize an action with the "pri" command and deprioritize it with the "depri" command.
|
379
|
+
The "pri" command adds an exclamation mark to the end of the task and moves it to the
|
380
|
+
top of the list.
|
381
|
+
</p>
|
382
|
+
|
383
|
+
<pre>
|
384
|
+
$ t pri /notebook/
|
385
|
+
0a1
|
386
|
+
> @harvardsq buy more moleskine notebooks !
|
387
|
+
3d3
|
388
|
+
< @harvardsq buy more moleskine notebooks
|
389
|
+
|
390
|
+
$ t
|
391
|
+
<span style='color:#FFFF00'> 1 </span><span style='color:#00FFFF'>@harvardsq</span><span style='color:#FFFF00'> buy more moleskine notebooks !</span>
|
392
|
+
2 <span style='color:#DC143C'>+opensource</span> release todo.rb
|
393
|
+
3 buy fresh basil <span style='color:#00FFFF'>@traderjoes</span>
|
394
|
+
</pre>
|
395
|
+
|
396
|
+
<p>If a task contains three exclamation points in a row [!!!], the item will actually flash. I'll spare you that
|
397
|
+
demonstration, because blinking text is very annoying. I included this feature because sometimes annoying is what you want from
|
398
|
+
a todo list.</p>
|
399
|
+
|
400
|
+
|
401
|
+
<p>To filter the list to show just priority items, use
|
402
|
+
t ! or t ! followed by a tag or tag abbreviation:</p>
|
403
|
+
|
404
|
+
<pre>
|
405
|
+
$ t ! @h
|
406
|
+
<span style='color:#FFFF00'> 1 </span><span style='color:#00FFFF'>@harvardsq</span><span style='color:#FFFF00'> buy more moleskine notebooks !</span>
|
407
|
+
</pre>
|
408
|
+
|
409
|
+
<p>To see a simple report of your tasks:</p>
|
410
|
+
|
411
|
+
<pre>
|
412
|
+
$ t report
|
413
|
+
tag priority todo done
|
414
|
+
-------------- -------- -------- --------
|
415
|
+
<span style='color:#DC143C'>+opensource</span> 0 1 0
|
416
|
+
<span style='color:#00FFFF'>@harvardsq</span> 1 1 1
|
417
|
+
<span style='color:#00FFFF'>@traderjoes</span> 0 1 0
|
418
|
+
</pre>
|
419
|
+
|
420
|
+
|
421
|
+
<h2>Extras</h2>
|
422
|
+
|
423
|
+
<p>If you want to undo a destructive action, you can use the "revert" command:</p>
|
424
|
+
|
425
|
+
<pre>t revert</pre>
|
426
|
+
|
427
|
+
<p>
|
428
|
+
Before changing todo.txt, todo.rb backs up todo.txt as .todo.txt.bkp. The
|
429
|
+
revert command just swaps the two files. If you're versioning your todo.txt and done.txt files
|
430
|
+
with Git, you can also use "git revert", "git stash" and similar commands
|
431
|
+
to achieve the same effect.
|
432
|
+
</p>
|
433
|
+
|
434
|
+
<p>If you don't want colored output, use the -C flag after t.</p>
|
435
|
+
|
436
|
+
<p>
|
437
|
+
todo.rb also lets you <strong>customize colors</strong>. It will look for a colors.yml
|
438
|
+
file in the current directory or in ~/.todo.rb/. The colors.yml file can specify
|
439
|
+
the color for high priority items, default colors for context and project tags,
|
440
|
+
as well as special colors for particular tags.
|
441
|
+
</p>
|
442
|
+
|
443
|
+
<p>For example, this colors.yml</p>
|
444
|
+
|
445
|
+
<pre>
|
446
|
+
priority: fuchsia
|
447
|
+
context: ff69b4
|
448
|
+
project: ffebcd
|
449
|
+
@harvardsq: ddaa00
|
450
|
+
</pre>
|
451
|
+
|
452
|
+
|
453
|
+
<p>
|
454
|
+
would color the output like this:
|
455
|
+
</p>
|
456
|
+
|
457
|
+
<pre>
|
458
|
+
1 <span style='color:#FFEBCD'>+opensource</span> release todo.rb
|
459
|
+
2 buy fresh basil <span style='color:#FF0000'>@traderjoes</span>
|
460
|
+
<span style='color:#FF00FF'> 3 </span><span style='color:#DDAA00'>@harvardsq</span><span style='color:#FF00FF'> buy more moleskine notebooks!</span>
|
461
|
+
</pre>
|
462
|
+
|
463
|
+
|
464
|
+
<h2>Tips</h2>
|
465
|
+
|
466
|
+
<p>
|
467
|
+
I keep a global todo list in ~/todo/todo.txt and per-project todo.txt
|
468
|
+
files in project folders. I use t as an alias for todo.rb to manage project todo.txt files.
|
469
|
+
For managing the global todo.txt, I added this bash function to ~/.bash_profile to let
|
470
|
+
me use `tt` to edit the global todo list from any directory:
|
471
|
+
</p>
|
472
|
+
|
473
|
+
<pre>
|
474
|
+
function tt() {
|
475
|
+
pushd ~/todo && t $@
|
476
|
+
popd
|
477
|
+
}
|
478
|
+
</pre>
|
479
|
+
|
480
|
+
<p>You can use this same technique to wrap todo.rb in a bash function that does
|
481
|
+
pre- and post-processing, such as pulling changes from an upstream git repository,
|
482
|
+
committing new changes to git, and pushing those changes upstream.</p>
|
483
|
+
|
484
|
+
<pre>
|
485
|
+
function ttgit() {
|
486
|
+
pushd ~/todo
|
487
|
+
git pull
|
488
|
+
t $@
|
489
|
+
git commit -a -m "edit" 2> /dev/null
|
490
|
+
git push
|
491
|
+
popd
|
492
|
+
}
|
493
|
+
</pre>
|
494
|
+
|
495
|
+
<p>I synchronize the folder containing my todo.txt, done.txt, and colors.yml
|
496
|
+
across my computers using a private upstream GitHub repository. You can also use Dropbox.</p>
|
497
|
+
|
498
|
+
<p>You can easily pipe todo.rb output into other Unix tools like
|
499
|
+
<strong>head</strong>, <strong>grep</strong>, <strong>lpr</strong>, or
|
500
|
+
<strong>mail</strong>.</p>
|
501
|
+
|
502
|
+
<p>
|
503
|
+
For example, if you have a long list of tasks and you want to stay focused on the top items, you
|
504
|
+
can do this:
|
505
|
+
</p>
|
506
|
+
|
507
|
+
<pre>
|
508
|
+
t | head -5
|
509
|
+
</pre>
|
510
|
+
|
511
|
+
<p>
|
512
|
+
To reverse the order of tasks, so that the lowest-numbered are output last:
|
513
|
+
</p>
|
514
|
+
|
515
|
+
<pre>
|
516
|
+
t | sort -r
|
517
|
+
</pre>
|
518
|
+
|
519
|
+
|
520
|
+
<p>
|
521
|
+
Because todo.rb is a standard, non-interactive Unix command-line program and
|
522
|
+
todo.txt is a regular text file, you can go wild automating your information flows with Unix scripts.
|
523
|
+
</p>
|
524
|
+
|
525
|
+
<p>
|
526
|
+
All of the following scripts would be simple to write:
|
527
|
+
</p>
|
528
|
+
|
529
|
+
<p>
|
530
|
+
You can write crontasks to scan your todo.txt for items with dates and times in
|
531
|
+
them and send you email reminders when things are due.
|
532
|
+
</p>
|
533
|
+
|
534
|
+
<p>
|
535
|
+
You can write a program to poll your Gmail inbox for emails
|
536
|
+
matching certain rules and create tasks from the subject lines of those emails.
|
537
|
+
</p>
|
538
|
+
|
539
|
+
<p>
|
540
|
+
You can write a script to publish your todo list to a webserver and to
|
541
|
+
automatically update it when the todo list changes. This lets you access your todo lists
|
542
|
+
from any computer or mobile device, as well as share them with others.
|
543
|
+
</p>
|
544
|
+
|
545
|
+
|
546
|
+
</ul>
|
547
|
+
|
548
|
+
|
549
|
+
<h2>Feedback</h2>
|
550
|
+
|
551
|
+
<p>
|
552
|
+
Your feedback is welcome. You can leave it on the <a href="https://github.com/danchoi/todo.rb/issues">GitHub issue tracker</a>.
|
553
|
+
</p>
|
554
|
+
|
555
|
+
|
556
|
+
<h2>Source</h2>
|
557
|
+
<p>You can also clone the project with <a href="http://git-scm.com">Git</a>
|
558
|
+
by running:
|
559
|
+
<pre>$ git clone git://github.com/danchoi/todo.rb</pre>
|
560
|
+
</p>
|
561
|
+
|
562
|
+
|
563
|
+
|
564
|
+
|
565
|
+
<div class="footer">
|
566
|
+
get the source code on GitHub : <a href="https://github.com/danchoi/todo.rb">danchoi/todo.rb</a>
|
567
|
+
</div>
|
568
|
+
|
569
|
+
</div>
|
570
|
+
|
571
|
+
</body>
|
572
|
+
</html>
|
data/lib/todo.rb/help.rb
CHANGED
@@ -14,12 +14,13 @@ The following assumes that `alias t=todo.rb` is in effect.
|
|
14
14
|
|
15
15
|
A [tag] may be a @context or a +project.
|
16
16
|
|
17
|
-
And [address] can be a line number or a regular expression that matches
|
18
|
-
task.
|
17
|
+
And [task address] can be a line number or a regular expression that matches
|
18
|
+
the task.
|
19
19
|
|
20
20
|
t [tag] [task text] append a task with tag
|
21
21
|
t show tasks
|
22
22
|
t [ed command] perform ed command on todo list
|
23
|
+
t e [task address] edit task at [task address] in external EDITOR
|
23
24
|
t done show done tasks
|
24
25
|
t do [task address] move a task to the done.txt
|
25
26
|
t undo [task address] move a task from done.txt to todo.txt
|
data/lib/todo.rb/version.rb
CHANGED
data/lib/todo.rb.rb
CHANGED
@@ -118,6 +118,16 @@ diff #{backup_file} #{todo_file}
|
|
118
118
|
END
|
119
119
|
end
|
120
120
|
|
121
|
+
|
122
|
+
def external_edit(range)
|
123
|
+
require 'tempfile'
|
124
|
+
f = Tempfile.new('todo.rb')
|
125
|
+
`sed -n '#{range}p' #{todo_file} > #{f.path}`
|
126
|
+
system("#{ENV['EDITOR']} #{f.path}")
|
127
|
+
new_text = File.read(f.path).strip
|
128
|
+
ed_command! "#{range}c", new_text
|
129
|
+
end
|
130
|
+
|
121
131
|
TAG_REGEX = /[@\+]\S+/
|
122
132
|
|
123
133
|
def report
|
data/todo.txt
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
@features maybe remove the t ! filter; not really necessary
|
1
|
+
@features TEST sets et maybe remove the t ! filter; not really necessary estset
|
2
|
+
another item
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: todo.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-31 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: highline
|
16
|
-
requirement: &
|
16
|
+
requirement: &70326420042860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.6.11
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70326420042860
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: color-tools
|
27
|
-
requirement: &
|
27
|
+
requirement: &70326420042100 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '1.3'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70326420042100
|
36
36
|
description: ed-like todo list manager
|
37
37
|
email:
|
38
38
|
- dhchoi@gmail.com
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- README.md
|
50
50
|
- Rakefile
|
51
51
|
- bin/todo.rb
|
52
|
+
- index.html
|
52
53
|
- lib/color_config.rb
|
53
54
|
- lib/colorizer.rb
|
54
55
|
- lib/html.rb
|