I often schedule chapters to read from a textbook as separate to-dos. If you stay on top of them, they usually come up in order. When they are re-scheduled, sometimes the order gets jumbled.

This is a short script that takes the selected to-dos and moves them into the ‘Today’ list by alphabetical order. Be warned, it is not the most efficient…you may be stuck waiting for a while if you run this on a large list.

http://bit.ly/1QBgN8j

tell application "Things" set theList to the selected to dos set theListofNames to {} repeat with theToDo in theList copy name of theToDo to the end of theListofNames end repeat set theListofNames to reverse of my quickSort ( theListofNames ) repeat with theToDo in theListofNames set theActionable to to do named theToDo move theActionable to list "Today" end repeat end tell on quickSort ( theList ) --public routine, called from your script script bs property alist : theList on Qsort ( leftIndex , rightIndex ) --private routine called by quickSort. --do not call from your script! if rightIndex > leftIndex then set pivot to (( rightIndex - leftIndex ) div 2 ) + leftIndex set newPivot to Qpartition ( leftIndex , rightIndex , pivot ) set theList to Qsort ( leftIndex , newPivot - 1 ) set theList to Qsort ( newPivot + 1 , rightIndex ) end if end Qsort on Qpartition ( leftIndex , rightIndex , pivot ) --private routine called by quickSort. --do not call from your script! set pivotValue to item pivot of bs 's alist set temp to item pivot of bs 's alist set item pivot of bs 's alist to item rightIndex of bs 's alist set item rightIndex of bs 's alist to temp set tempIndex to leftIndex repeat with pointer from leftIndex to ( rightIndex - 1 ) if item pointer of bs 's alist ≤ pivotValue then set temp to item pointer of bs 's alist set item pointer of bs 's alist to item tempIndex of bs 's alist set item tempIndex of bs 's alist to temp set tempIndex to tempIndex + 1 end if end repeat set temp to item rightIndex of bs 's alist set item rightIndex of bs 's alist to item tempIndex of bs 's alist set item tempIndex of bs 's alist to temp return tempIndex end Qpartition end script if length of bs 's alist > 1 then bs 's Qsort ( 1 , length of bs 's alist ) return bs 's alist end quickSort