Friday, September 7, 2007

Todoist Slickrun Integration

So I saw the Launchy Todoist plugin, that lets you quickly add an item to your Todoist lists with just a few keystrokes, and it made me jealous because I don't use Launchy, I use SlickRun. I wanted the same Todoist capture method for SlickRun. Capturing distracting thoughts while you're doing a task quickly and efficiently is essential to the GTD process. I couldn't find anything on the web so I tried doing it myself. I'm generally pretty incompetent when it comes to this level of geekyness but somehow I stumbled upon a solution.

First I just scrolled through the Todoist API page and found the add items url and created a magicword with Filename: Firefox and and Parameters: that url. With, of course, a $W$ for the content of the item, and a particular project id I wanted the task to go in. This worked, but it opened up a Firefox window every time and that defeats the whole purpose of instant, undistracting, capture.

I then did some searching through the Bayden message board and found a discussion where someone asked how to make Twitter posts through SlickRun and Eric posted a solution. It involved creating a vbscript and having SlickRun open that script and pass whatever you want to say to the script which then does the website updating. So I should say now that I have no Windows scripting experience and in general am not much of a programmer, but I figured adding an item to Todoist should be basically the same. So I took his script and modified things until it worked.

I can now type "td this is so cool" into SlickRun and the item "this is so cool" will appear in a given project in my Todoist account. That is cool.

Some Comments

  • I'm sure someone could modify this to allow you to type in the project as well, but I don't have the patience or know-how to do this. Some project names are too long and too hard to get exactly right for that to be quick and convenient(e.g. "Finalize ticket and hotel for Denver"). But if you want to, feel free to post that modification.
    • I have a project in Todoist called "New" and make all instantly captured items go there (I was doing this with Launchy, which I downloaded just for this capture, for a few hours until this SlickRun diddly worked). I then just put those items wherever they need to go the next time I've actually opened Todoist. Works well.
    • For some reason I couldn't add the context label to my item descriptions in Launchy; it would give me a syntax error message. I think this is because that @ sign is used to denote time for that plugin. In this slickrun method you can label items with @context at the end of the description and it works as a context.
Finally, here is the script:

Set objHTTP = CreateObject("Microsoft.XMLHTTP")
objHTTP.open "POST", "http://todoist.com/API/addItem?content=" & WScript.Arguments.item(0) & "&project_id=projectidhere&priority=4&token=yourtokenhere", False
objHTTP.send
Set objHTTP = Nothing
What's a token? Your token is basically the golden key into your account and can be found in Preferences -> Account.

How do I know the project id number? To get a list of the project id's for your projects, enter this url into your browser: http://todoist.com/API/getProjects?token=yourtokenhere.

For those of you like me, who have no idea how this scripting business works, don't be intimidated, just copy the above text and paste it into notepad and save the notepad file as scriptname.vbs, and put it in whatever directory you want.

Then create your magicword in SlickRun with:
Filename or Url: the above script's filename.
Parameters: $W$

I believe that's it. Let me know if I missed anything, this doesn't work, or there is a better method out there that I didn't run into. Happy GTDing!

1 comment:

Ingo Reichert said...

Thanks for posting your solution!

Just tried it - and unfortunately received an "Access denied" error (80070005).

Luckily, I found a solution:
Just change the first line to

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")

Runs like a charm now. :-)