I wrote my own software, mostly scripts. Does that count?<p>I have a "todo" folder. It contains a subfolder "contexts", with one text file for each context. There are also "icebox", "inbox", and "projects" files.<p>I use vim to edit, and I've written a little command that lets me mark lines in my todo files with a "target context/file" and use the command to send them there.<p>I also have a command to let me add items to the inbox from the command line, they just get appended to the "inbox" file.<p>Say my inbox file looks like this:
buy milk
buy food
clean garage
send email to bob<p>I will then mark the lines in the file like so:
buy milk @buy
buy food @buy
clean garage :projects
send email to bob @laptop<p>Now I'll invoke my command, and it'll send all the lines ending in @x to contexts/x, and all the :y ones to y (i.e. icebox, inbox, projects).<p>I also have a little script that counts how many tasks are in my various contexts, so I can an overview. When invoked, it currently says this:<p>home:3 room:2 reflect:5 laptop:9 garage:3 (22)<p>Overall I'm pretty happy with it. I can add any functionality I want, and most of the time it just takes a few lines of shell or Ruby. It's extremely personalized because I'm the only user.<p>There are a few things that are missing because of the text file structure. For example, I can't easily reference back how many tasks belong to a given project, because I'd have to store references and introduce IDs, which would look terrible in a text file. At that point I should probably just switch to Sqlite. But that tradeoff isn't so bad - and working with text files is so much easier.<p>A few of the add-ons I've added with a few lines each include:
- Recurring tasks: recurring/wednesday or recurring/01 contains tasks that will be slurped in every Wednesday or every 1st day of the month, respectively. I just loop through all the files in the recurring folder and try to match them to weekdays or #s.
- integration with "calendar" file. I also wrote a clone of the UNIX calendar that takes my calendar file as an optional argument, highlighting days on which I have things scheduled and shows the appointments for today.<p>Calendar file has the following format:<p>Sunday, July 15th:
Do thing
Do other thing
3pm: Meet Bob<p>Monday, July 16th:
Call Alice<p>The whole system has evolved over ~5 years or so, starting with a single flat text file I edited in vim. There are various pieces I added over time that I ended up never using, for example I have a stateful command to "choose" a context and then pop the list one at a time, that also lets me complete them. But I find I rarely feel like actually finishing random tasks off a context, I like to scan and refactor/reorganize the context before choosing what to do.<p>It's interesting how similar refactoring my todo list is to refactoring code. Refactoring gives me a lot of clarity on my tasks, and I typically refactor almost every task, some multiple times.