TUI for Todoist written with React+Ink.
0

Configure Feed

Select the types of activity you want to include in your feed.

add hinting for commands

Aly Raffauf (Feb 11, 2026, 8:18 AM EST) 7763552d 22be96df

+18
+10
source/app.tsx
··· 133 133 </Text> 134 134 <TextInput value={input} onChange={setInput} onSubmit={handleSubmit} /> 135 135 </Box> 136 + 137 + {input && 138 + commands 139 + .filter(c => c.prefix.startsWith(input)) 140 + .map(c => ( 141 + <Text key={c.prefix} dimColor> 142 + {' '} 143 + {c.hint} 144 + </Text> 145 + ))} 136 146 </Box> 137 147 ); 138 148 }
+8
source/commands.ts
··· 18 18 }; 19 19 type Command = { 20 20 prefix: string; 21 + hint: string; 21 22 run: (args: string, ctx: CommandContext) => Promise<void>; 22 23 }; 23 24 24 25 export const commands: Command[] = [ 25 26 { 26 27 prefix: 'done ', 28 + hint: 'done <number>', 27 29 run: async (args, {api, tasks, setMessage, refresh}) => { 28 30 const num = Number.parseInt(args, 10); 29 31 const task = tasks[num - 1]; ··· 38 40 }, 39 41 { 40 42 prefix: 'add ', 43 + hint: 'add <task>', 41 44 run: async (args, {api, setMessage, refresh}) => { 42 45 await api.quickAddTask({text: args}); 43 46 setMessage(`+ ${args}`); ··· 46 49 }, 47 50 { 48 51 prefix: 'refresh', 52 + hint: 'refresh', 49 53 run: async (_args, {refresh, setMessage}) => { 50 54 await refresh(); 51 55 setMessage('↻ refreshed'); ··· 53 57 }, 54 58 { 55 59 prefix: 'project ', 60 + hint: 'project <project>', 56 61 run: async (args, {projects, setMessage, setView}) => { 57 62 const projectId = [...projects.entries()].find( 58 63 ([, n]) => n.toLowerCase() === args.toLowerCase(), ··· 68 73 69 74 { 70 75 prefix: 'today', 76 + hint: 'today', 71 77 run: async (_args, {setView, setMessage}) => { 72 78 setView({type: 'filter', query: 'today'}); 73 79 setMessage('→ today'); ··· 76 82 77 83 { 78 84 prefix: 'home', 85 + hint: 'home', 79 86 run: async (_args, {setView, setMessage, homeFilter}) => { 80 87 setView({type: 'filter', query: homeFilter}); 81 88 setMessage('→ home'); ··· 84 91 85 92 { 86 93 prefix: 'quit', 94 + hint: 'quit', 87 95 run: async (_args, {exit}) => { 88 96 exit(); 89 97 },