Thanks everyone for your comments and suggestions. There was no solution that exactly fit my needs so I created my own AppleScript to perform the functionality. In my own case I'm using FastScript (
http://www.red-sweater.com/fastscripts/) for a hotkey in Mail. This script works on a single or multiple messages and although this does exactly what I need it to, your own mileage may vary.
Please note I have some questions towards the end of this post for Omni and/or the community.
Code:
-- FROM /OmniFocus.app/Contents/PlugIns/BuiltInClippingHandlers.plugin/Contents/Resources/Mail-Leopard.applescript
-- Trims "foo <foo@bar.com>" down to "foo@bar.com"
on trim_address(theAddress)
try
set AppleScript's text item delimiters to "<"
set WithoutPrefix to item 2 of theAddress's text items
set AppleScript's text item delimiters to ">"
set MyResult to item 1 of WithoutPrefix's text items
on error
set MyResult to theAddress
end try
set AppleScript's text item delimiters to {""} --> restore delimiters to default value
return MyResult
end trim_address
-- BASE SCRIPT FROM http://forums.omnigroup.com/showthread.php?t=6182
set messageCount to 0
tell application "Mail"
-- get the currently selected message or messages
set selectedMessages to selection
-- if there are no messages selected, do nothing
if selectedMessages is not {} then
set messageCount to count of selectedMessages
repeat with i from 1 to messageCount
-- parse the email(s)
set theMessage to item (i) of selectedMessages
set theName to subject of theMessage
set theMessageID to (content of header "Message-Id") of theMessage
set theMessageID to my trim_address(theMessageID)
set theMessageURL to ("message:<" & theMessageID & ">")
-- create new task in quick entry
tell application "OmniFocus"
activate
set theTask to theName
set theNote to "Original Message"
tell quick entry
set NewTask to make new inbox task with properties {name:theTask, note:theNote}
set value of attribute "link" of style of note of NewTask to theMessageURL
end tell
end tell
end repeat
end if
end tell
-- Method 1: Use native AppleScript
-- THIS IS SUPPOSSED TO WORK, BUT FAILS
-- tell applicatation "OmniFocus"
-- activate quick entry
-- end tell
-- Method 2: Use your native hotkey
-- You will need to adjust the keystroke to
-- what you have defined in your OF prefs
--tell application "System Events"
-- keystroke space using {control down, option down}
--end tell
-- Method 3: Use the menu via AppleScript GUI Scripting
-- You must have "Enable access for assistive devices"
-- turned on in System Preferences » Universal Access
tell application "System Events"
tell process "OmniFocus"
tell menu bar 1
tell menu bar item "Window"
tell menu "Window"
click menu item "Show Quick Entry"
end tell
end tell
end tell
end tell
end tell
-- SELECT TASK & EXPAND NOTES FOR FINAL MANUAL EDITING
-- Note: Just change the expandNote value to false
-- if you don't care to have the task notes expanded
set expandNote to true
tell application "System Events"
keystroke tab
keystroke (key code 53) -- Escape
-- Note expansion code
if expandNote is true then
keystroke "'" using {command down}
keystroke (key code 53) -- Escape
if messageCount > 1 then
-- Expand all note items
repeat with i from 2 to messageCount
keystroke (key code 125) -- Arrow Down
keystroke "'" using {command down}
keystroke (key code 53) -- Escape
end repeat
-- Cursor up first item
repeat with i from 1 to messageCount
keystroke (key code 126) -- Arrow Up
end repeat
end if
end if
-- Select first task text for manual editing if needed
keystroke tab
end tell
Okay so my questions, some of which may need to be answered by Omni...
- Why does tell applicatation 'OmniFocus' / activate quick entry / end tell fail? Essentially this does nothing even though there is some indication within the community that this works although other folks state it doesn't but should. Is this by chance a bug?
- Is there a less hacky way to expand the notes of each of the tasks in the Quick Entry window? I spent a bit of time trying to get/set "note expanded" but it never quite worked even though I could definitely get/set the boolean.
- Is there any better way to manipulate the task items in the quick entry? For example you see a bunch of AppleScript GUI code to select the task text of the first task in the quick entry list. I'm hoping there's a cleaner way of doing this.