I’ve been studying Text UI (TUI) frameworks in Python for a while now. In my class, we use the built in argparse module to mange command line argument handling. I fantasise pushing up to REPLs and then widget based full screen console apps. Ideally, the TUI widget framework would have GUI and Web based backends but alas none do. Also, I have a couple of grade and exam management tools with argument handling that I’m looking to add a better front end. A TUI is appealing because it’s lightweight, portable, and easier to security audit.
In this investigation, I stumbled across a couple of TUI task and todo managers. There are, of course, dozens and based on editors, file formats, etc etc. These accidentally juxtaposed by one of them being in an open tab from Hacker News and the other is built on one of the frameworks I’m playing with. The first is a node.js app called Taskbook which has a kind of Trello mentality. The other is a Python/urwid toolkit based app called todotxt-machine and is designed around the todo.txt file format.
(I haven’t fully investigated but it certainly seems that todo.txt is sufficient to capture Taskbook’s data model.)
So, with minor differences in list layout, they have very similar functionality but very different interaction designs. Taskbook is entirely a shell app and all interaction is via arguments from the shell. This is great for integration with scripts and thus larger workflows but can get get when manually manipulating lots of items. It’s primary mode is batch.
Contrariwise, todotxt-machine is a full screen, interactive console app with a bit of menuing, mouse support, and so on. It’s virtues and vices are the reverse of Taskbook.
Implementationwise, though I don’t have actual stats or anything, it’s much easier to add the command line processing than the console UI. Adding the Taskbook argument handling should be a doddle (given feature parity).
In a similar summery, Taskbook’s JSON is more ready out of the box for processing whereas todo.txt is much easier for people to manipulate.