This script, modified from several others, looks for items with a specified tag in the Today list and displays it. Combined with modifications to /etc/crontab, you can mimic alerts. I have 5 “times of day” set up – morning, noon, afternoon, evening, night. I tag items with those tags and then associate those tags with specific times of day when I want the growl notifications to appear.
Example Cron Tab:
30 9 * * * _user_ osascript /Users/_user_/Library/Scripts/Applications/Things/GrowlNotifyTags.scpt morning
00 12 * * * _user_ osascript /Users/_user_/Library/Scripts/Applications/Things/GrowlNotifyTags.scpt noon
00 14 * * * _user_ osascript /Users/_user_/Library/Scripts/Applications/Things/GrowlNotifyTags.scpt afternoon
00 18 * * * _user_ osascript /Users/_user_/Library/Scripts/Applications/Things/GrowlNotifyTags.scpt evening
40 19 * * * _user_ osascript /Users/_user_/Library/Scripts/Applications/Things/GrowlNotifyTags.scpt night
To Edit Cron, open Terminal and type sudo nano /etc/crontab
When you get to terminal, type `pwd` — the part between the slashes is your “_user_” name, just replace it.
The first column is minutes past the hour, the second column is the hour of the day
The tags at the end are what tags are scanned for at that time
Don’t forget to save after editing!
GrowlNotifyByTag.scpt:
on run argv
set tagToFind to item 1 of argv
tell application "GrowlHelperApp" to register as application "Things" all notifications {"ToDo Notice"} default notifications {"ToDo Notice"} icon of application "Things"
tell application "Things"
repeat with todayToDo in to dos of list "Today"
set tagNames to tag names of todayToDo
set tagList to tags of todayToDo
repeat with aTag in tagList
set aTagName to name of aTag
if aTagName is tagToFind then
set taskName to name of todayToDo
set taskNote to notes of todayToDo
if taskNote is not missing value then
set msgLen to the length of taskNote
if msgLen > 80 then
set noteLim to 73
set msgText to get texts 28 through noteLim of taskNote
set msgText to msgText &" " &"..."
else
set noteLim to msgLen - 7
set msgText to get texts 28 through noteLim of taskNote
end if
else
set msgText to " "
end if
my growlIt(name of todayToDo, msgText, true)
end if
end repeat
end repeat
end tell
end run
to growlIt(aTitle, aNote, hold)
tell application "GrowlHelperApp" to notify with name "ToDo Notice" title aTitle description return &aNote application name "Things" icon of application "Stickies" sticky hold
end growlIt