Elegant Desktop ToDo List

People often ask about the Desktop ToDo list that appears in my academic citation tutorial. So, here’s the scoop on this simple and elegant ToDo list system, which can be easily synchronized across multiple (Mac) computers.

Here’s what you need to set this stuff up.

Mac OS X. I don’t know of any good windows analogues for Quicksilver and Geektool. Let us know if you do!

Geektool. This beautiful little app is available for free from Tynsoe.org. For more on what it can do, try this tutorial. For our purposes, here’s how to display a TXT file on your Desktop:

  • Create a new Shell geeklet in the Geektool preference pane
  • Enter the command: cat PathToYourList/YourList.txt
  • To synchronize multiple computers, make sure the file is in a Dropbox folder.

Quicksilver. This is why I own a mac. It’s free from Blacktree.com. If you’re new to it, try this beginner’s guide. To set up the ‘Append’ and ‘Completed’ functions seen in the screencast:

  • On the Quicksilver > Plugins page, add the ‘Text Manipulation Actions’ plugin. Then make sure ‘Append’ box is checked on the Preferences > Actions page.
  • Now you can append text to any .TXT file — but only files with that extension.
  • Download the Completed script.
  • Open it with ScriptEditor and set the path to your Completed.txt file.
  • Add the Completed.scpt script to the folder YourUsername/Library/Application Support/Quicksilver/Actions. Create this folder if it doesn’t exist yet.

And that’s it! As always, be sure to leave your thoughts, ideas or improvements in the comments below.

Related Posts:


Soul Physics is authored by Bryan W. Roberts. Thanks for subscribing.
Want more Soul Physics? Try the Soul Physics Tweet.

18 thoughts on “Elegant Desktop ToDo List

  1. Anonymous

    Very powerfull tools !

    I updated your script to add a blank line between new days.

    using terms from application “Quicksilver”
    on process text log_text
    set theDate to (do shell script “date ‘+%m-%d-%Y %H:%M'”)
    set theText to log_text
    set theText to theDate & ” ” & theText & “

    set thePosixFilePath to “/Users/USERNAME/Desktop/TodoList/@Attente.txt” as string
    set theFilePath to POSIX file thePosixFilePath
    set theFileReference to open for access theFilePath with write permission
    write theText to theFileReference starting at eof
    close access theFileReference
    end process text

    end using terms from

    —-
    Here a second script to watch task that are not finished yet and they doesn’t depend on yourself anymore. For: example: you bought a book on internet and your waiting for delivery. OR you sent a mail to your administration and you’re waiting for an answer…

    # Pending file, temporyfile, and Timeout file
    file=/Users/USERNAME/Desktop/TodoList/@Attente.txt
    filetp=/Users/USERNAME/Desktop/TodoList/@Attentetp.txt
    fileAgain=/Users/USERNAME/Desktop/TodoList/@Again.txt

    x=0
    # Refresh every 3600 s required
    # 1 week max Wait : 7 days x 24h = 168 dots.

    MaxWait=168
    touch filetpecho(wc -l < file)# Read file line per linewhile [x -lt (wc -l <file) ]
    do

    str=””
    x=((x+1))
    ln=(head -nx file | tail -n 1)str=str”.”
    ln=strln

    NowStr=(echoln | wc -m)
    ShortStr=(echoln | sed s/\\.*// | wc -m)

    # Distance between 2 dates (cmp numbers of dots)
    TimeDist=(exprNowStr – ShortStr)if [TimeDist -lt MaxWait ]; then echo "["TimeDist “]” strln
    echo strln >> filetpelse# write in the file the unfinished task after 168 dots  tp=(echo ln | sed s/\\.*//) echotp “TIME OUT”
    echo tp >>fileAgain
    fi
    done
    mv filetpfile
    exit 0
    —-

    I can be interesting to use it with mails sent (using a particular character in subject of instance).

  2. Anonymous

    Huh? wrong file for the first code. Here the right one.

    — For this script to work, you must change the path /Users/YOURUSERNAME/Dropbox/Lists/@Completed.txt to the location of your completed file.
    — For more on how to use this script, visit soulphysics.org

    using terms from application “Quicksilver”
    on process text log_text
    set theDate to (do shell script “date ‘+%m-%d-%Y %H:%M'”)
    set theShortDate to (do shell script “date ‘+%m-%d-%Y'”)
    set oldDate to (do shell script “cat /Users/USERNAME/Desktop/TodoList/@Completed.txt | tail -1 | cut -d’ ‘ -f1”)
    set theText to log_text
    — Si la date est different alors saut de ligne.
    set daytext to “”
    if oldDate is not equal to theShortDate then
    set daytext to “

    end if
    set theText to daytext & theDate & ” ” & theText & “

    set thePosixFilePath to “/Users/USERNAME/Desktop/TodoList/@Completed.txt” as string
    set theFilePath to POSIX file thePosixFilePath
    set theFileReference to open for access theFilePath with write permission
    write theText to theFileReference starting at eof
    close access theFileReference
    end process text

    end using terms from

    Mathieu

  3. Bryan

    Excellent — many thanks for sharing, Mathieu! The pending tasks script is very interesting. I’ll give it a try and let you know what I think.

  4. Anonymous

    Ok I had your answer to my pending list =)

    I found something new: The last temporary file (@again.txt) is useless. After “time out”, it would be interesting to move back the task to @todo.txt with a new symbol (for instance [F]: pour Fail after 1 week waiting).

    It’s 1 week waiting for all because time management in unix shell script is a little bit hard. (Except if you have ideas).

    Mathieu

  5. Beyo

    How you get this spotlight-like window for searchning in quicksilver?
    I have always some rectangular area in the middle of screeen

  6. Bryan

    Hi Beyo — it’s the Flashlight command interface. Go to your Quicksilver preferences (invoke Quicksilver and hit Cmd-,) and select Plugins > All Plugins. Check the box next to “Flashlight Interface.” Then go to Preferences > Appearance, and change the command interface to “Flashlight.” That’s it!

  7. Beyo

    I think my QS binary is broken,tried to download it several times but I cannot invoke Preferences window, cmd-, only invokes last screen seen.

  8. Beyo

    Thanks it worked. It looks I had version for Leopard installed on Snow thats why it was broken and I couldnt see prefrences

  9. Beyo

    Unfortunately it doesn’t work again. This time it looks a bug in Geek Tool 3 12A. cat command doesnt work and doesn’t refresh properly. Anyone other notieced that?

  10. Beyo

    I am not sure,but if i create empty file in Terminal it looks there is a “space” after extension so e.g todo.txt is in fact “todo.txt “. But even if it’s ok,I’ve managed to list content of the file but after using your way of append to, widget will not properly refresh. I’ve set refresh 1 sec and timeout 1 sec.
    What exactly means “timeout”?

  11. Bryan

    “Timeout” is how long it takes to try again in case it fails to refresh. I’m not sure what’s going on, but here are some suggestions:

    – Make sure your ToDo list file is a .txt file (that’s the only doc-type that will work).

    – Make sure your shell script has the right command: cat /Users/…/YourFile.txt

    – Set the “refresh” time to 1 sec, and the “timeout” time to 0 sec.

    – Make sure the append function is working correctly: after appending, open the file by hand and check to make sure your string was actually added.

  12. Bryan

    Hmm, seem to be working for me. It’s a very simple applescript though; here’s the text:

    — For this script to work, you must change the path /Users/YOURUSERNAME/Dropbox/Lists/@Completed.txt to the location of your completed file.

    using terms from application “Quicksilver”
    on process text log_text
    set theDate to (do shell script “date ‘+%m-%d-%Y %H:%M'”)
    set theText to log_text
    set theText to theDate & ” ” & theText & “

    set thePosixFilePath to “/Users/YOURUSERNAME/Dropbox/Lists/@Completed.txt” as string
    set theFilePath to POSIX file thePosixFilePath
    set theFileReference to open for access theFilePath with write permission
    write theText to theFileReference starting at eof
    close access theFileReference
    end process text

    end using terms from

  13. Anonymous

    just a heads up – the link to the script seems to be wrong… I ended up getting it at pitt.edu/~bwr6/misc/completion.zip

    was so impressed with what you’ve done I thought I should let you know so you can update it for others.

    keep up the great work and thanks.

  14. Bryan Hicks

    I just found this post and it’s fantastic. I discovered I can move my tasks around to different lists or run the completed script on a line all from within QS. There is a text manipulation command DELETE LINE (UNSTABLE). I tried it and it worked fine for me. Enable QS, select text file that has the task you want to move or complete, hit the right arrow and scroll down to the desired task, hit tab, Delete line. Reenable QS hit tab append to… desired list or tab completed. Thanks for the great post

  15. Anonymous

    Is there an app or some way that you could project your list onto your ipod as well? I was thinking how nice it would be to be able to check things off while you’re on the bus :)

  16. Bryan

    You can keep your list synced with an ipod or iphone by just keeping it in a Dropbox folder. There’s no Geektool analogue that would “project” the list on the iphone wallpaper (I suspect that might be a little hard to see anyway). But you can view and edit your list using any plain-text editor. I use PlainText, as it’s very simple and functional. And Dropbox will keep your changes synced with your computer!