![]() |
Paul, I was ... until I inadvertently exported all of my Outlook tasks into OmniFocus while trying out the "reminders capture" in the IPad version. I recovered them all in the deleted items folder of Outlook, fortunately, but now have turned off the sync of Outlook to "reminders" and only allow Outlook to sync with my iPhone/iPad using IMExchange2, because I like how it preserves the categories from Outlook.
After switching to the reminders app last week it occurred to me that I could save myself some time when process email..
If you are a GTDer and you use Apple Mail instead of Outlook or Entourage. Then it's almost a must that you use the Mail-Act-On software. It's a simple piece of dirt cheap software that allows you to use hotkeys to trigger "mail rules" against the currently selected message(s). Essential for rapid filing, forward+filing, forwarding+deleted, etc. One extra feature it has is that is can trigger an AppleScript against a message.
So here's an applescript that you can place into "~/Library/Application Scripts/com.apple.mail" that allows you to create a reminder in your "Inbox" list that has a link back to the orginal message. I use a rule that moves the message to an email folder called "Reference" and then creates an Action in Inbox for that message and has a link back to in Mail. With Mail-Act-On automating all this; I simply highlight the message and hit "Ctrl-A" and poof the message is filed and a new action is in my reminders inbox waiting to be "actionafied". This script would need to be modified if not triggered by Mail-Act-On. The whole process runs in under 1 sec.
I'm not affiliated with MAO's creator you can google them easy enough.
I will be making a similar solution for Safari web pages soon and will post that.
Code:using terms from application "Mail" # Set the name of the list where to create the reminder set InboxName to "Inbox" # Set the color of the message (used to mark the message after being linked to Reminders) set MessageColor to green # set the default reminder due date set ReminderDueDate to 0 # set the default remind me date set ReminderReminderMeDate to 0 # set the prefix to be prepended to the reminders' name set ReminderPrefix to "" # Find the selected mail message set selectedMessages to selection if (count of selectedMessages) is greater than 0 then set theMessage to item 1 of selectedMessages # Get the message properties set theSubject to my trimText(subject of theMessage) set theSender to sender of theMessage set theMessageId to my replaceText("%", "%25", message id of theMessage) set theTags to "Mail" # if we have a message with no ID then we give up, since we can't create a link # based on an empty id if theMessageId is "" then display dialog "Can't link this message to Reminders" return end if # build the reminder properties set message_url to "message:%3C" & theMessageId & "%3E" set todo_name to my replaceText(return, "", ReminderPrefix & theSubject & "(" & theSender & ")") tell application "System Events" to set frontmost of process "Reminders" to true tell application "Reminders" # Search for the proper list where to create the reminder repeat with listIndex from 0 to (count of list) set oneList to list listIndex set listId to id of oneList if (name of oneList) is equal to InboxName then # create the reminder based on the selected mail # set mailReminder to make new reminder with properties {name:todo_name, body:message_url, container:oneList, due date:((current date) + (ReminderDueDate * days))} set mailReminder to make new reminder with properties {name:todo_name, body:message_url, container:oneList} oneList show end if end repeat end tell # finally mark the message set the background color of theMessage to MessageColor end if end using terms from # Trims the unnecessary whitespace from someText on trimText(someText) set theseCharacters to {" ", tab, ASCII character 10, ASCII character 13, ASCII character 0} repeat until first character of someText is not in theseCharacters set someText to text 2 thru -1 of someText end repeat repeat until last character of someText is not in theseCharacters set someText to text 1 thru -2 of someText end repeat return someText end trimText on replaceText(find, replace, subject) set previousDelimiters to text item delimiters of AppleScript set text item delimiters of AppleScript to find set subject to text items of subject set text item delimiters of AppleScript to replace set subject to "" & subject set text item delimiters of AppleScript to previousDelimiters return subject end replaceText
Definitely true, that was worth mentioning. However I found that was not working well for me. I always seem to grab the entire message thread and then it does not work. Also I still have to return the mail program and file the message. I am too lazy for that I want the computer to do it fast and save me the work.
Ok here's the Safari script. You will either need to know how to turn on scripting; or use something like the free FastScripts from red sweater software; to trigger it. I use FastScript and assign it to "Control+Shift+A"
This version will ask you if it is and action or a project. You can configure it to have actions go directly to your inbox; or prompt you for which action list to put it on.
-Enjoy
Code:tell application "Safari" set SafariURL to URL of document 1 # Set the name of the list where to create the action reminder set InboxName to "_Inbox" # Set the name of the list where to create project reminders set ProjectListName to "Projects" # Turn on or off the prompting for which Action List set PlaceActionsInInbox to false # Set the names of your Actions Lists set AvailableLists to {"_Inbox", "@Agendas", "@Afterhours", "@Calls", "@Computer", "@Desk", "@Errands", "@Home", "@WaitingFor"} # set the default reminder due date set ReminderDueDate to 0 # set the default remind me date set ReminderReminderMeDate to 0 # set the prefix to be prepended to the reminders' name set ReminderPrefix to "" # Get the Action statement or Project description from user set prompt1 to display dialog "Enter Action Statement or Project Description" default answer "" buttons {"Action", "Project", "Cancel"} default button "Action" set theSubject to the text returned of prompt1 if theSubject is not "" then set theSubject to my trimText(the text returned of prompt1) set theList to the button returned of prompt1 #react to button pushed if theList is equal to "Project" then set targetList to ProjectListName else if theList is equal to "Action" then #Put in Inbox or ask for Action List based on mode if PlaceActionsInInbox then set targetList to InboxName else set myChoice to (choose from list AvailableLists with title "Action Lists" with prompt "Put in List") set targetList to item 1 of myChoice end if else set targetList to "Cancel" end if if theList is equal to "Cancel" or theSubject is "" then end run set todo_name to my replaceText(return, "", ReminderPrefix & theSubject) tell application "System Events" to set frontmost of process "Reminders" to true tell application "Reminders" # Search for the proper list where to create the reminder repeat with listIndex from 0 to (count of list) set oneList to list listIndex set listId to id of oneList if (name of oneList) is equal to targetList then # create the reminder based on the URL if ReminderReminderMeDate is equal to 0 then set mailReminder to make new reminder with properties {name:todo_name, body:SafariURL, container:oneList} else set mailReminder to make new reminder with properties {name:todo_name, body:SafariURL, container:oneList, due date:((current date) + (ReminderDueDate * days))} end if oneList show end if end repeat end tell end tell # Trims the unnecessary whitespace from someText on trimText(someText) set theseCharacters to {" ", tab, ASCII character 10, ASCII character 13, ASCII character 0} repeat until first character of someText is not in theseCharacters set someText to text 2 thru -1 of someText end repeat repeat until last character of someText is not in theseCharacters set someText to text 1 thru -2 of someText end repeat return someText end trimText on replaceText(find, replace, subject) set previousDelimiters to text item delimiters of AppleScript set text item delimiters of AppleScript to find set subject to text items of subject set text item delimiters of AppleScript to replace set subject to "" & subject set text item delimiters of AppleScript to previousDelimiters return subject end replaceText
Ok not to turn this into "scripts today" but there was a conflict in Mail-ActOn that messes with the reliability of that script if you try to auto file the message. so here's the "improved one" This one assume you know a little bit more about your mail server. In This version the script does the filing, which is less flexible but more reliable.
To use this version You will need to program the line Set FileBox to point at your reference email folder in your mail account. Notice in the sample code that it's set for a Subfolder of Inbox as "Inbox/@Reference" if yours is in the root folder (common if not on an exchange server) you might just have "Reference" as the folder name. Also change NameOfMailMailAccountInMailAppDisplay to be the DESCRIPTION you gave your mail account in your settings.
The rest of the stuff to configure should be obvious.
This script is for mail act on. If you want to use it with FastScripts instead to save some funds, then change the first line of the code to be:and the line that says "end using terms from" to beCode:tell application "Mail"it's about 1/5 of the way from the end of the code.Code:end tell
Code:using terms from application "Mail" # Set the name of the list where to create the reminder set InboxName to "_Inbox" # Set the color of the message (used to mark the message after being linked to Reminders) set MessageColor to green # Set the Folder to file the Message in after creating action set Filebox to mailbox "Inbox/@Reference" of account "NameOfMailMailAccountInMailAppDisplay" # Set the name of the list where to create project reminders set ProjectListName to "Projects" # Turn on or off the prompting for which Action List set PlaceActionsInInbox to false # Set the names of your Actions Lists in the Reminders App set AvailableLists to {"_Inbox", "@Agendas", "@Afterhours", "@Calls", "@Computer", "@Desk", "@Errands", "@Home", "@WaitingFor", "SomeDay/Maybe"} # set the default reminder due date set ReminderDueDate to 0 # Turn Reminder on or off set RemindMeOn to 0 # set the prefix to be prepended to the reminders' name set ReminderPrefix to "" #### END of Configuration #### # Find the selected mail message set selectedMessages to selection if (count of selectedMessages) is greater than 0 then set theMessage to item 1 of selectedMessages # Get the message properties set theSubject to my trimText(subject of theMessage) set theSender to sender of theMessage set theMessageId to my replaceText("%", "%25", message id of theMessage) set theTags to "Mail" # if we have a message with no ID then we give up, since we can't create a link # based on an empty id if theMessageId is "" then display dialog "Can't link this message to Reminders" return end if # build the reminder properties set message_url to "message:%3C" & theMessageId & "%3E" set suggestedSubject to my replaceText(return, "", ReminderPrefix & theSubject & "(" & theSender & ")") display dialog suggestedSubject # Get the Action statement or Project description from user set prompt1 to display dialog "Enter Action Statement or Project Description" default answer suggestedSubject buttons {"Action", "Project", "Cancel"} default button "Action" set finalSubject to the text returned of prompt1 if finalSubject is not "" then set todo_name to my trimText(the text returned of prompt1) set theList to the button returned of prompt1 #react to button pushed if theList is equal to "Project" then set targetList to ProjectListName else if theList is equal to "Action" then #Put in Inbox or ask for Action List based on mode if PlaceActionsInInbox then set targetList to InboxName else set myChoice to (choose from list AvailableLists with title "Action Lists" with prompt "Put in List") set targetList to item 1 of myChoice end if else set targetList to "Cancel" end if if theList is equal to "Cancel" or finalSubject is "" then end run tell application "System Events" to set frontmost of process "Reminders" to true tell application "Reminders" # Search for the proper list where to create the reminder repeat with listIndex from 0 to (count of list) set oneList to list listIndex set listId to id of oneList if (name of oneList) is equal to targetList then # create the reminder based on the selected mail if RemindMeOn is equal to 0 then set mailReminder to make new reminder with properties {name:todo_name, body:message_url, container:oneList} else set mailReminder to make new reminder with properties {name:todo_name, body:message_url, container:oneList, due date:((current date) + (ReminderDueDate * days))} end if oneList show end if end repeat end tell # finally mark the message set the background color of theMessage to MessageColor move theMessage to Filebox end if end using terms from # Trims the unnecessary whitespace from someText on trimText(someText) set theseCharacters to {" ", tab, ASCII character 10, ASCII character 13, ASCII character 0} repeat until first character of someText is not in theseCharacters set someText to text 2 thru -1 of someText end repeat repeat until last character of someText is not in theseCharacters set someText to text 1 thru -2 of someText end repeat return someText end trimText on replaceText(find, replace, subject) set previousDelimiters to text item delimiters of AppleScript set text item delimiters of AppleScript to find set subject to text items of subject set text item delimiters of AppleScript to replace set subject to "" & subject set text item delimiters of AppleScript to previousDelimiters return subject end replaceText
Last edited by ratz; 03-05-2013 at 10:20 AM. Reason: Removed bogus line of code the was loosing custom subject user entnered. 3/5/2013
Ok so after having reasonable success with the scripts. I went back and made them much more universal and easier for non programmers to work with.
Attached is a zip file called "Public Scripts.zip" free for the taking. It contains the final versions of the script. Configure your inbox list name, project list name and icloud account name or mail server account name; and your off and running. The scripts will stay updated as you add and remove action lists.
Last edited by ratz; 03-11-2013 at 08:00 PM. Reason: Update Scripts zip file to newest version
Of course, you can set up OmniFocus to sweep everything out of iOS Reminders and drop the items into your OF Inbox. Therefore, you can use Siri with OF.
rdgeorge
Just as Notes can be better-set-up on a Mac before using Notes on iDevices, I recall that it was better/easier to set up multiple color-coded Calendars on a Mac before using them on iDevices.
rdgeorge
Bookmarks