Interoperability: Omni Automation and Alfred
DISCLAIMER: Mention of third-party websites and products is for informational purposes only and constitutes neither an endorsement nor a recommendation. OMNI-AUTOMATION.COM assumes no responsibility with regard to the selection, performance or use of information or products found at third-party websites. OMNI-AUTOMATION.COM provides this only as a convenience to our users. OMNI-AUTOMATION.COM has not tested the information found on these sites and makes no representations regarding its accuracy or reliability. There are risks inherent in the use of any information or products found on the Internet, and OMNI-AUTOMATION.COM assumes no responsibility in this regard. Please understand that a third-party site is independent from OMNI-AUTOMATION.COM and that OMNI-AUTOMATION.COM has no control over the content on that website. Please contact the vendor for additional information.
Alfred is an integrated service for macOS that boosts your efficiency with hotkeys, keywords, text expansion and more. With Alfred, you can search your Mac and the web, and be more productive with custom actions to control your Mac.
With Alfred's workflows, you can extend Alfred and get things done in a customized way. Replace repetitive tasks with workflows, and boost your productivity. And since Alfred workflows support the execution of URLs, Omni Automation Script URLs can easily be turned into actions to be added to Alfred workflows.
The following documentation details the process of turning Omni Automation scripts into an Alfred workflows, available at any time from within the Alfred interface.
(The OmniFocus Collection in the Alfred Gallery)
The OmniFocus Collection Alfred Workflow
The OmniFocus Collection Alfred Workflow (see below) contains four example Alfred actions that are used to demonstrate the following automation scenarios:
- Alfred is used to launch an Omni Automation script that requires no user input to perform a procedure in OmniFocus. (DOCUMENTED ON THIS PAGE)
- Alfred is used to launch an Omni Automation script that requires user input within Alfred in order to perform a procedure in OmniFocus. (LINK TO PAGE)
- Alfred is used to launch an Omni Automation script that requires no user input to perform a procedure in OmniFocus whose linked results are then displayed in the Alfred interface. (LINK TO PAGE)
- Alfred is used to launch an Omni Automation script that requires user input within Alfred to perform a procedure in OmniFocus whose linked results are then displayed in the Alfred interface. (LINK TO PAGE)
In addition, two specialized Alfred actions are included in the Alfred workflow. They are constructed using Apple Events (JXA) but have been included in this collection because of their usefulness.
- Alfred displays a linked list of the names of all OmniFocus Projects that can be filtered by name. (LINK TO PAGE)
- Alfred displays a linked list of the names of all OmniFocus Tags that can be filtered by name. (LINK TO PAGE)
Each of these example scenarios are detailed in this section of the website.
Before reviewing the examples, š³ļø DOWNLOAD and install the OmniFocus Collection Alfred Workflow, which will appear like this within the Alfred Preferences application:
The Alfred Workflow
Here is the Alfred workflow and its contents: (click image to view full size)
Scenario 1: Self-Contained Omni Automation Script
This overview begins with an examination of the first automation scenario:
- Alfred is used to launch an Omni Automation script that requires no user input to perform a procedure in OmniFocus.
Nearly any Omni Automation script, targeting any of the Omni applications, can be converted into a Script URL, which can be included in an Alfred workflow. When the workflow is triggered, the Script URL will be opened and its encoded Omni Automation script will be sent to the target Omni app to be run.
For purposes of example, the following Omni Automation script targets the OmniFocus application, and will bring the application to the foreground, switch to the Inbox view, and select the first inbox item. This script will be summoned and executed from the Alfred interface.
Using the Omni Automation Script URL Constructor webpage, scripts can be constructed, tested, and transformed into Script URLs. You can even paste your favorite script into the editing pane, tap the āEncode Scriptā button and the URL encoding is instantly done for you!
Hereās the example Omni Automation script:
OmniFocus: Select First Inbox Item
(async () => {
try {
function createUtterance(textToSpeak){
AlexID = (
(app.platformName === "macOS") ?
"com.apple.speech.synthesis.voice.Alex" :
"com.apple.speech.voice.Alex"
)
voiceObj = Speech.Voice.withIdentifier(AlexID)
voiceRate = 0.4
utterance = new Speech.Utterance(textToSpeak)
utterance.voice = voiceObj
utterance.rate = voiceRate
return utterance
}
var synthesizer = new Speech.Synthesizer()
document.show()
var win = document.windows[0]
win.perspective = Perspective.BuiltIn.Inbox
tree = win.content
tree.select([])
tree.rootNode.children.forEach(node => {
node.collapse(true)
})
firstTask = tree.rootNode.children[0]
if(firstTask){
tree.select([firstTask])
firstTask.expand(true)
firstTask.expandNote()
firstTask.children.forEach(node => {
node.expandNote(true)
})
}
utterance = createUtterance("Ready!")
synthesizer.speakUtterance(utterance)
}
catch(err){
utterance = createUtterance(err.message)
synthesizer.speakUtterance(utterance)
//new Alert(err.name, err.message).show()
}
})();
Here is the example script encoded into a Script URL, ready for use with Alfred:
Encoded Script URL
omnifocus://localhost/omnijs-run?script=%28async%20%28%29%20%3D%3E%20%7B%0A%09try%20%7B%0A%09%09function%20createUtterance%28textToSpeak%29%7B%0A%09%09%09AlexID%20%3D%20%28%0A%09%09%09%09%28app%2EplatformName%20%3D%3D%3D%20%22macOS%22%29%20%3F%20%0A%09%09%09%09%22com%2Eapple%2Espeech%2Esynthesis%2Evoice%2EAlex%22%20%3A%20%0A%09%09%09%09%22com%2Eapple%2Espeech%2Evoice%2EAlex%22%0A%09%09%09%29%0A%09%09%09voiceObj%20%3D%20Speech%2EVoice%2EwithIdentifier%28AlexID%29%0A%09%09%09voiceRate%20%3D%200%2E4%0A%09%09%09utterance%20%3D%20new%20Speech%2EUtterance%28textToSpeak%29%0A%09%09%09utterance%2Evoice%20%3D%20voiceObj%0A%09%09%09utterance%2Erate%20%3D%20voiceRate%0A%09%09%09return%20utterance%0A%09%09%7D%0A%09%09var%20synthesizer%20%3D%20new%20Speech%2ESynthesizer%28%29%0A%0A%09%09document%2Eshow%28%29%0A%09%09var%20win%20%3D%20document%2Ewindows%5B0%5D%0A%09%09win%2Eperspective%20%3D%20Perspective%2EBuiltIn%2EInbox%0A%09%09tree%20%3D%20win%2Econtent%0A%09%09tree%2Eselect%28%5B%5D%29%0A%09%09tree%2ErootNode%2Echildren%2EforEach%28node%20%3D%3E%20%7B%0A%09%09%09node%2Ecollapse%28true%29%0A%09%09%7D%29%0A%09%09firstTask%20%3D%20tree%2ErootNode%2Echildren%5B0%5D%0A%09%09if%28firstTask%29%7B%0A%09%09%09tree%2Eselect%28%5BfirstTask%5D%29%0A%09%09%09firstTask%2Eexpand%28true%29%0A%09%09%09firstTask%2EexpandNote%28%29%0A%09%09%09firstTask%2Echildren%2EforEach%28node%20%3D%3E%20%7B%0A%09%09%09%09node%2EexpandNote%28true%29%0A%09%09%09%7D%29%0A%09%09%7D%0A%09%0A%09%09utterance%20%3D%20createUtterance%28%22Ready%21%22%29%0A%09%09synthesizer%2EspeakUtterance%28utterance%29%0A%09%7D%0A%09catch%28err%29%7B%0A%09%09utterance%20%3D%20createUtterance%28err%2Emessage%29%0A%09%09synthesizer%2EspeakUtterance%28utterance%29%0A%09%09%2F%2Fnew%20Alert%28err%2Ename%2C%20err%2Emessage%29%2Eshow%28%29%0A%09%7D%0A%7D%29%28%29%3B
Creating the Alfred Action
The first example Alfred action is comprised of two steps: (see below)
Double-click the second step to summon its preferences window: (see below)
The Alfred action is ready for use.
Executing the Script URL
Once the Alfred bundle is installed, your will be able to summon it from within any application. Open the Alfred input and enter the keyword “ib” (or your customized keyword) in the input field. Arrow-key down to the “Select First Inbox Item” workflow, and press the Return key.
The OmniFocus application will switch to the foreground, display the Inbox perspective view, select the first item, and say “Ready!”
First Run Approval
For security, the first time an Omni Automation script URL is run by an external application or link, it must be viewed and approved by the user.
In addition, the user must have previously activated the security setting in the “Security” tab of the “Automation Configuration” dialog (“Automation” menu > “Configureā¦”) for allowing the execution of external scripts.
Once approved, the first time an external script, like the Alfred script, is run, a security dialog like the following will be displayed:
The full code of the script to be executed will be displayed 01 in the security window and must be completely scrolled 02 to enable the “Run Script” button 03
IMPORTANT: Select the checkbox 04 to indicate that you approve subsequent executions of this script to be done without need for re-approval.
Next Example
In the NEXT EXAMPLE, Alfred is used to launch an Omni Automation script that requires user input within Alfred in order to perform a procedure in OmniFocus.