Ok, so I am writing an applescript to do some voice control actions for me.
I am using Dragon Dictate 2.0 for mac for my voice control and mainly applescript for my coding. I have everything pretty much squared away except for once small issue. When expecting a voice command, I have applescript display a dialog for the text to be dictated into.
eg.
set cmd1 to the text returned of (display dialog "Speak Command:" default answer "")
This displays a dialog box with an empty text field, and the buttons “cancel” and “ok”
My problem is how I can press ok without having to speak an additional phrase.
Currently I have a voice command that listens for me to speak “go” and then runs an applescript that presses the “return” key. This works, but I don’t want to have to have to say “go”.
I know I can add
giving up after 10
to automatically close the dialog box and accept the input after a certain time period, but there has to be a better way.
I have done some research and found that I could have an event handler for “on done editing” to execute a return keystroke. But I have no idea how to do this. If anyone has any input or ideas that would be great. Thanks!
The “on done editing” is the best way but then you would have to write your dialog box in Xcode using objective-c or AppleScriptObjC. It seems that is beyond your abilities.
Something that might be within your abilities… you could simulate your own “on done editing” method. You could have a second applescript launch when your first applescript which shows the dialog box is run. This second applescript could check the text field of the dialog box periodically. When the text stops changing for a certain length of time then it could press the return key. It’s a little complicated because you have to figure out how to target your dialog box from the second applescript, but it wouldn’t be too hard. It might be best to give your dialog box a title, and then use system events to find the window with that title.
The reason you have to do this in a separate applescript is because your normal applescript pauses all commands while the dialog box is open. So you need a separate process running to check the text field and a second script would be the easiest way.
EDIT: Here’s how to do it with applescript. First create this script which is your on done editing script. It will dismiss your dialog when the user stops entering text. Save it as a script called onDoneEditing to your desktop.
Now create this script. This script will launch the above script using the command line tool “osascript” so that it runs in a background process. Then it shows the dialog box for you. You can read my comments in both scripts to understand how each works.