Лучше всего использовать «готовое редактирование», но тогда вам придется написать свое диалоговое окно в Xcode, используя target-c или AppleScriptObjC.Кажется, это за пределами ваших способностей.
Что-то, что может быть в ваших силах ... вы можете смоделировать свой собственный метод "по окончании редактирования".Вы можете запустить второй appleScriptcript, когда будет запущен ваш первый appleScript, который показывает диалоговое окно.Этот второй яблочный скрипт может периодически проверять текстовое поле диалогового окна.Когда текст перестает изменяться в течение определенного периода времени, он может нажать клавишу возврата.Это немного сложно, потому что вы должны выяснить, как настроить таргетинг на свое диалоговое окно из второго яблочного сценария, но это не будет слишком сложно.Лучше всего дать вашему диалоговому окну заголовок, а затем использовать системные события, чтобы найти окно с таким заголовком.
Причина, по которой вы должны сделать это в отдельном яблочном сценарии, заключается в том, что ваш обычный яблочный скрипт приостанавливает все командыв то время как диалоговое окно открыто.Таким образом, вам нужно запустить отдельный процесс, чтобы проверить текстовое поле, и второй сценарий будет самым простым.Сначала создайте этот скрипт, который готов к редактированию.Он отклонит ваш диалог, когда пользователь перестанет вводить текст.Сохраните его как скрипт onDoneEditing на рабочем столе.
set shortDelay to 0.5
set longDelay to 1
delay longDelay --delay for a moment to let the dialog box from the first script launch
tell application "System Events"
set theProcess to first process whose frontmost is true
tell theProcess
set dialogWindow to first window
-- this repeat loop looks for when the user starts entering text into the dialog box
repeat
-- get the current text field value
set currentValue to value of first text field of dialogWindow
-- if the value has changed we know text is being entered
if currentValue is not "" then exit repeat
delay shortDelay
end repeat
-- this repeat loop looks for when the user stops entering text
-- we know that when the text is the same after 2 checks
delay longDelay
repeat
set newValue to value of first text field of dialogWindow
if newValue is currentValue then
keystroke return
else
set currentValue to newValue
end if
delay longDelay
end repeat
end tell
end tell
Теперь создайте этот скрипт.Этот скрипт запустит вышеуказанный скрипт, используя инструмент командной строки «osascript», чтобы он выполнялся в фоновом процессе.Затем он показывает диалоговое окно для вас.Вы можете прочитать мои комментарии в обоих сценариях, чтобы понять, как работает каждый из них.
-- launch the onDoneEditing script
-- we get the process id (thePID) of the launched process so we can kill it later
set onDoneEditing to (path to desktop as text) & "onDoneEditing.scpt"
set thePID to do shell script "osascript " & quoted form of POSIX path of onDoneEditing & " > /dev/null 2>&1 & echo $!"
-- diaplay the dialog and make sure it will be frontmost
tell me to activate
display dialog "Speak Command:" default answer ""
-- kill the onDoneEditing to make sure it's not still running
try
do shell script "kill " & thePID
end try