У меня есть ряд команд AppleScript, которые мне нужно реализовать в одной строке AppleScript. Код ниже.
delay 2
tell application "System Events" to keystroke "foo"
tell application "System Events" to keystroke return
У меня есть ряд команд AppleScript, которые мне нужно реализовать в одной строке AppleScript. Код ниже.
delay 2
tell application "System Events" to keystroke "foo"
tell application "System Events" to keystroke return
Вы можете комбинировать две команды нажатия клавиш в одну, объединяя ваши строки вместе:
tell app "System Events" to keystroke "foo" & return
Но это все равно оставляет вас с одной командой и утверждением (задержка и указание... на...).
Фактически, разделитель операторов AppleScripts - это разрыв строки. В современном AppleScript разрывы строк могут быть либо CR, LF, либо CRLF (соответственно: старый-Mac-, Unix- или DOS-стиль). Нет удобного способа написать строку с несколькими операторами (например, foo; bar; baz;
в C, Perl, Ruby и т.д.).
Для вашего конкретного запроса вы можете комбинировать два в уродливом виде, используя задержку как часть выражения.
tell application "System Events" to keystroke "" & (delay 2) & "foo" & return
Это уродливо, потому что время задержки технически не возвращает никакого значения, но мы можем конкатенировать его с пустой строкой, не вызывая ошибки.
Проблема в том, что такая конструкция не очень "общая цель". Вы не всегда можете превращать любую команду в выражение таким же образом (и вы не можете использовать такие выражения, как tell, как часть выражения 1). Для немного более краткости (и обфускации) вы можете записать последний бит как "foo" & return & (delay 2)
. Он по-прежнему работает в том же порядке (сначала задержка), потому что каждая часть выражения конкатенации должна быть оценена до того, как она может быть встроена в одно значение для команды нажатия клавиши.
<суб > 1 Короче говоря, они помещаются в строку, заданную для запуска script. Даже тогда некоторые утверждения (циклы, try/catch и т.д.) Всегда многолинейны; хотя вы можете обойти это, используя экранированные разрывы строк или конкатенацию и одну из констант разрыва строки (следующим образом). Суб >
Вы можете использовать run script со строковым аргументом и использовать обратную косую черту 2 для представления разрывов строк.
run script "delay 0.1\ntell app \"System Events\" to keystroke \"foo\" & return"
Редактор AppleScript может преобразовать обозначение escape в литерал, если вы не включили "Escape tabs и строку break in string" в настройках редактирования (доступно в 10.5 и более поздних версиях). Вы всегда можете использовать константу return и конкатенацию вместо строки in-string-literal/escape-нотации.
run script "delay 0.1" & return & "tell app \"System Events\" to keystroke \"foo\" & return"
<суб > 2 Если вы собираетесь представлять такие строки внутри строкового литерала Objective C (как может показаться в одном из ваших комментариев), вам придется избегать обратных косых черт и двойных кавычек для Objective C, также (... & \"tell app \\\"System
...).
Суб >
Или, если вы в конечном счете пытаетесь запустить код с помощью osascript, вы можете использовать тот факт, что каждый экземпляр -e
станет отдельной строкой, чтобы поместить все это в одну командную строку оболочки.
osascript -e 'delay 2' -e 'tell app "System Events" to keystroke "foo" & return'