33 comments

[ 5.8 ms ] story [ 269 ms ] thread
You seem to have missed the point. As it says in the documentation for t:

    If you need anything beyond the basics
    you might want to look at todo.txt or
    TaskWarrior instead. They’re great tools
    with lots of bells and whistles.
In contrast, t (and therefore t-) does almost nothing. Instead, to make your task list prettier, do some work!

http://stevelosh.com/projects/t/#it-does-the-simplest-thing-...

Not at all. Those "bells and whistles" you decry have negligible impact its ease of use, as it's been designed such that the extras (due dates, priorities, projects, etc) are only there if/when you actually want to use them.

Otherwise it's just "task add something", "task list", "task done something".

And if you do find yourself wanting to use those "bells and whistles", they're just a man page away.

Having tried, I can't make it build and run on SuSE 8.1. Having read the page, yes, if all I want is a list of tasks, no doubt TaskWarrior and do it. I don't think it's a bad tool, not at all.

It just doesn't look like what I want. I like being able to just go in and edit the task list. I like being able to use the Unix philosophy and have sorting, prioritising, selecting, and counting in a pipeline.

I don't want much, and t- gives me what I want.

I don't see a difference between that and t, aside from -e and --delete-if-empty. Am I missing something? Or does t not have sort-friendly output? (if so, t- all the way, that's a big bonus)

http://stevelosh.com/projects/t/

I don't see a difference between that and a plain textfile..
That's what I thought when I first read about "t". Then I tried it, and it really does feel different.

<fx: shrug> YMMV.

Plain text files you have to select an editor to open it in, modify it, and save it. More steps than necessary, a command line interface really is ideal for something super-simple like this. Though it could be made as / might just be a handful of bash scripts wrapping around `cat`, not everyone has the know-how or desire to make such a thing, but many can use it.
But i have to open a terminal to use t. I argue that using vim is more efficient then t:

  - delete a task 'dd' -> two keystrokes, no need to remember some arbitrary id
  - select a task 'gg' -> go to line number
  - add new task 'o' -> one keystroke
  - add a bash alias 't' for "vim ~/.tasks" and you have the power of vim and still need fewer keystrokes to manage tasks ;)
Still, why i would use such a tool is far beyond me, honestly. I can understand using some advanced taskmanagers with GUI or a textfile, but i don't understand the benefits of t ;)
You don't always have a terminal open? I find that odd. Personally I always have a terminal open - it's where I do most of my work - so to add a task it's just typing it in, preceeded by "t-". I don't have to remember arbitrary IDs, they are listed.

But you're convinced it's of no value to you, and that's cool. Don't use it.

But if you haven't tried it, can you really be sure?

Actually i always have several terminals and several desktops open. I think my workflow would be to open a terminal on the "PIM" desktop and have vim running there.

Anyway, you are right, i haven't tried it, and i probably won't because my workflow and taskmanagement works different (and already works for me).

Everyone should use what suits him best.

    my workflow and taskmanagement works different
    (and already works for me).  Everyone should
    use what suits him best.
Absolutely. This is just another option for those that aren't yet happy with what they do or have.
Apart from those options, yes. It keeps finished tasks in a limbo so you can feel smug about things you've done, and it keeps a (one version only) backup in case it didn't do what you expected.

(It feels wrong describing extra features. I wanted fewer, not more)

It also runs without requiring a recent version of Python. It doesn't use "with", "OptParse", or the ternary "if". Therefore it runs on my really old machine sitting in the corner that I can't be bothered upgrading. That's where I do a lot of "Hmm - I'll just try this" hacking.

Running on older Pythons is a bonus. Significant, in some situations. Thanks!
To answer some of the comments made already, and to preempt others, I largely hacked "t-" together because I wanted to see if "t" would be worth bothering with. It seemed little better than just having a text file and so I didn't really see the point. But equally (I thought) I could be wrong.

But "t" didn't run on my very old, stick-it-in-the-corner-and-occasionally-play machine (which only has Python 2.2.1) so I spent a happy hour putting this together, more-or-less at random.

I'm finding it's helping, but maybe that will only be till the novelty wears off.

I think this would suit a Nanonote (Qi Hardware's pocket computer), to use for task management. I use emacs' org mode in it, but the time it takes to boot (15 seconds)+opening emacs (I didn't check, but probably as long) make it too cumbersome. When I have it connected for downloading things I'll try t- (I have debian in it).

Thanks for sharing it, these one-hour happy projects are the most fun to read and hack

Cool - let me know how you get on, and whether I can help.
Got it working without any problems after adding the "warnings" suggestion above. It is slightly slow (well, it is python and the Nanonote only has 32Mb RAM, taskwarrior is snappier, though, but that's what you get with C, I guess).

I found an odd thing: I added twice a task with the same name, and the random number is the same, i.e. t- test -> 098f test, doing it again results in 098f test twice. I guess the "random" number is just some hash applied to the string, but this means that let's say, if I put three "do the laundry" (3 washmachines, for example), when I remove them all three will be deleted at once.

Yes, the "random" string is a hash of the string, but no, removing one does not remove all. It only deletes one instance of the item. A subsequent "-f" will remove the next, and so on. I specifically had this usage case in mind, and I do that myself.
Something I wrote recently: a repl that keeps track of things I'd like to spend five minutes a day on. sqlite3 behind it. When I type 'run' it lists the tasks in random order. For each, I can say yes or no, and if yes, leave a note. At some time in the future I'll be able to write a tool to see the log being kept in sqlite3.
Care to make it available? Don't even bother to clean it up or make it run on other platforms, just show us what it does, and make a copy available for download. I'm sure I'm not the only one who'd like to see it.
Thanks for your interest.

My home internet is down, so I don't have the latest version handy. This shows I should keep things in github.

I'll post an older version from my laptop here now, and follow up later with the latest if I remember.

http://pastebin.com/bxt7RLX5

This is missing key functionality:

- 'run' command which spoon feeds you a random selection of the tasks

However, you can start it, and see the schema, and that direction it's headed in.

Thanks for that - an interesting take on the task/problem/idea. I hadn't thought of a REPL ... you've made me think again. I don't think I'll do it, but I've got another idea in mind.
I'm with RiderOfGiraffes, I'd love to see the code or test it.
My task management solution is similarly minimal, consisting of just 2 bash functions that operate on a text file. The twist with mine is that I embed the list on my desktop to increase awareness of things left to do.

More here: http://blog.jerodsanto.net/2010/12/minimally-awesome-todos/

I like it. The following todone definition will add a strikethrough to lines marked as done rather than deleting them (your terminal emulator must support the relevant control code to display it properly).

    function todone() { sed -i -e "/$*/s/.*/\o033[9m&\o033[0m/" $TODO; }
edit: gnome-terminal supports this, but it seems xterm and putty do not
For my task management I used a perl script which appends comments to the bottom of the script as to do items.

i.e script and to do list are one and the same.

There's no point in telling people to make it executable in your instructions, given that it needs all the extra arguments in the alias.

Also, putting these two lines before your import will make it run without complaint on Python 2.6.x:

    import warnings
    warnings.filterwarnings('ignore', 'the md5 module is deprecated')
I modified slightly the suggestion for bash prompt, to read as follows (the 'git' stuff is pretty standard):

    function count_tasks {
    ~/bin/t | wc -l | sed -e's/ *//' 2> /dev/null | sed -e s/0//'
    }
    export PS1="\h:\W\$(parse_git_branch)\$(count_tasks) $ "