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
|
.TH TODO 1 "2026-09-29" "todo 0.1.0" "User Commands"
.SH NAME
todo \- a little modal todo list
.SH SYNOPSIS
.B todo
.br
.B todo
.BR \-h | \-\-help
.br
.B todo
.BR \-v | \-\-version
.SH DESCRIPTION
.B todo
is an interactive todo list you drive like vim. It has modes: normal mode to
move around and act, insert mode to edit text, and a command line for
.BR : " and " /
commands. The list is stored as a plain text file you can also edit by hand or
from scripts.
.PP
The header shows the current date and time, localized through the environment.
Items sort so that unfinished ones stay above finished ones within each group,
and finished items are dimmed and struck through.
.PP
Nothing is written to disk until you save with
.BR :w .
.SH ITEMS
An item's kind is decided by how its text begins.
.TP
.I text
A plain task, shown with a checkbox and a number.
.TP
.BI = " name"
A section, shown as an uppercase roman heading
.RB ( I. ", " II. )
with its contents indented beneath it. Repeat the
.B =
for deeper levels
.RB ( == " is a subsection, shown as " i. ", " ii. ).
.TP
.BI \- " name"
A subtask of the task above it, indented further. A task is finished
automatically once all of its subtasks are done.
.PP
Each task carries one of three states, written in its checkbox:
.B [\ ]
todo,
.B [\-]
doing,
.B [x]
done.
.SH KEYS
.SS Movement
.TP
.BR h ", " j ", " k ", " l
Move: \fBh\fR/\fBl\fR move the cursor within the item, \fBj\fR/\fBk\fR between
items. Arrow keys work too.
.TP
.BR w ", " b
Move to the next or previous word.
.TP
.BR { ", " }
Jump to the previous or next section.
.TP
.BR gg ", " G
Jump to the top or bottom.
.TP
.I count
A leading number repeats the next motion or operator, e.g.\&
.BR 3j ", " 2dd .
.SS Editing
.TP
.B o
Add a new item below the cursor.
.TP
.B i
Enter insert mode at the cursor.
.TP
.B A
Append to the item's text.
.TP
.B R
Replace the item's text.
.TP
.B x
Toggle the item between done and not done.
.TP
.B space
Cycle the item through todo, doing and done.
.TP
.B dd
Cut the item (also copies it for pasting).
.TP
.B D
Remove every done item.
.TP
.BR yy ", " p ", " P
Yank the item, paste it below, or paste it above.
.TP
.BR J ", " K
Move the item down or up. On a section heading this moves the whole section.
.SS Other
.TP
.BR / ", " n ", " N
Search for text, then jump to the next or previous match.
.TP
.BR u ", " "ctrl-r"
Undo and redo.
.SH "INSERT MODE"
Type to insert at the cursor.
.B enter
commits the item and opens another below it;
.B escape
returns to normal mode, dropping the item if it is empty.
.B backspace
deletes, and the arrow keys move the cursor.
.SH COMMANDS
Press
.B :
to enter a command, then
.BR enter :
.TP
.B :w
Write the list to its file.
.TP
.B :q
Quit, discarding changes since the last write.
.TP
.BR :wq ", " :x
Write and quit.
.TP
.B :reset
Set every item back to todo, clearing all done and doing states.
.TP
.B :clear
Remove every item, emptying the list.
.SH OPTIONS
.TP
.BR \-h ", " \-\-help
Print a usage summary and exit.
.TP
.BR \-v ", " \-\-version
Print the version and exit.
.SH FILES
.TP
.B ~/.todo.txt
The default list. Each line is a task
.RB ( "[ ] text" ", " "[-] text" ", " "[x] text" ),
a section
.RB ( "= name" ),
or a subtask
.RB ( "- name" ).
Override the location with
.BR $TODO_FILE .
.SH ENVIRONMENT
.TP
.B TODO_FILE
Path to the list file, used instead of
.BR ~/.todo.txt .
.TP
.B LC_TIME
Sets the locale for the date and time in the header.
.SH "EXIT STATUS"
.TP
.B 0
Success.
.TP
.B 1
The terminal could not be initialized, or memory ran out.
.SH AUTHOR
hachem <im@hachem.wtf>
|