#applescript #keyboard-shortcuts
Вопрос:
Я создал AppleScript для последовательности нажатий клавиш копирования и вставки и задержек:
пример кода AppleScript :
tell application "System Events"
keystroke "k" using command down
delay 0.1
keystroke "a" using command down
delay 0.1
keystroke "c" using command down
delay 0.1
tell application "Google Chrome"
if it is running then
quit
else
activate
open location "http://translate.google.com"
delay 1
activate
delay 0.7
end if
end tell
tell application "System Events"
keystroke "v" using command down
delay 0.7
keystroke "c" using control down
end tell
end tell
Я экспортировал его из редактора сценариев в качестве приложения, и он отлично работает, когда я нажимаю на него.
Когда я пытаюсь выполнить его с помощью ярлыка, установленного в системных настройках > Клавиатура >> Сокращения >>> Службы, ничего не происходит; Я просто вижу, как зубчатое колесо ненадолго появляется на верхней панели. Я уже предоставил разрешение для приложения-скрипта в системных настройках > Безопасность и конфиденциальность >> Доступность и уже проверил, нет ли конфликтов горячих клавиш в терминале, набрав: >> defaults find NSServicesStatus
или defaults find '@~$]'
(ярлык, который я пытался использовать, был Command Alt Shift ].
Может быть, у вас есть какие-нибудь предложения о том, где я могу проверить, что я делаю не так?
Комментарии:
1. Такие вещи, как правило, завершаются беззвучно — вы можете попытаться вложить части (или все) сценария в
try
инструкцию, которая отображает диалоговое окно.2. ПРИМЕЧАНИЕ: Я не понимаю, что означает нажатие клавиши «k» с помощью команды в вашем коде. И что означает нажатие клавиши «c» с помощью кнопки управления вниз. Последний получает переведенный текст в буфер обмена в каком-либо приложении?
3. Итак, теперь все ясно. Вы используете расширение. Мне они не нравятся, потому что вместо того, чтобы контролировать их, они контролируют пользователя. Соответственно, я мало разбираюсь в их причудах.
4. Попробуйте добавить «Google Chrome» в раздел «Доступность», чтобы решить вашу проблему с сервисом. Что касается ответа без использования расширения, вы должны в последнем обработчике переместить указатель мыши на кнопку копирования Google Translate, задержка 1, нажмите кнопку. используя инструмент мыши, такой как clicklic.
5. Теперь вы просите меня написать для вас последний обработчик и последнюю услугу. Когда у меня будет время, я это сделаю. Так как это может быть полезно мне самому. Теперь мне нужно идти на работу.
Ответ №1:
Вот вариант, который использует совершенно другой маршрут, не прибегая к использованию сценариев пользовательского интерфейса и не открывая никаких браузеров.
Чтобы иметь возможность использовать мое решение, вам придется установить команду оболочки translate-shell. В Terminal.app я установил его с помощью Homebrew с помощью этой команды… brew install translate-shell
После успешной установки команды оболочки translate-shell ее можно использовать в рабочих процессах AppleScripts и Automator
Следующий код AppleScript возьмет текст, который в данный момент находится в вашем буфере обмена, и переведет его на выбранный вами язык. Затем он установит содержимое вашего буфера обмена на переведенный текст.
Я взял на себя смелость добавить несколько языковых кодов, чтобы вы начали.
property convertLanguage : {"Convert To Belarusian (be)", "Convert To Bulgarian (bg)", ¬
"Convert To Dutch (nl)", "Convert To English (en)", "Convert To Estonian (et)", ¬
"Convert To French (fr)", "Convert To German (de)", "Convert To Greek (el)", ¬
"Convert To Hebrew (he)", "Convert To Hungarian (hu)", "Convert To Italian (it)", ¬
"Convert To Polish (pl)", "Convert To Romanian (ro)", "Convert To Russian (ru)", ¬
"Convert To Spanish (es)", "Convert To Swedish (sv)", "Convert To Ukrainian (uk)"}
activate
set chosenLanguage to word 4 of ((choose from list convertLanguage ¬
with title "Language Translator" with prompt ¬
"Choose A Language To Convert To" OK button name ¬
"Translate" cancel button name "Cancel") as text)
convertToLanguage(chosenLanguage)
on convertToLanguage(twoLetterLanguageCode)
set textToConvert to the clipboard
delay 0.1
set the clipboard to ¬
(do shell script "export PATH="/usr/local/bin:$PATH";/usr/local/bin/trans -b :" amp; ¬
quoted form of twoLetterLanguageCode amp; " " amp; ¬
quoted form of (textToConvert as text))
end convertToLanguage
Следующая анимация демонстрирует преобразование английского текста (уже находящегося в моем буфере обмена) во французский. Затем я вставляю преобразованный текст в документ.
Комментарии:
1. Большое спасибо. Я не знал, что до сих пор существует бесплатный инструмент перевода с помощью Google Translate. Голос за ваш ответ.
2. Браво! это элегантное решение.
Ответ №2:
Вам следует сократить количество сценариев графического интерфейса, чтобы иметь более стабильный код. Обходной путь показан здесь:
my copyTextToClipboard()
set sourceText to (the clipboard) as string
my performGoogleTranslate(sourceText)
my getTranslatedTextToClipboard()
on copyTextToClipboard()
tell application "System Events"
keystroke "k" using command down
delay 0.1
keystroke "a" using command down
delay 0.1
keystroke "c" using command down
delay 0.1
end tell
end copyTextToClipboard
on performGoogleTranslate(sourceText)
-- following translates from English (en) to Russian (ru)
-- you can put other languadges settings
set myURL to "https://translate.google.gr/?
hl=el#view=homeamp;op=translateamp;sl=enamp;tl=ruamp;text=" amp; sourceText
tell application "Google Chrome"
activate
set URL of active tab of window 1 to myURL
end tell
end performGoogleTranslate
on getTranslatedTextToClipboard()
-- HERE you need some mouse tool to move the mouse pointer over
-- the "Copy" button of Google Translate and to click it
end getTranslatedTextToClipboard
Комментарии:
1. Спасибо за оптимизацию кода, Роберт. Cmd K — это ярлык для получения текста в программе, Ctrl C-горячая клавиша для копирования переведенного текста в буфер обмена, это предусмотрено расширением «Сочетания клавиш для Google Translate» — но все равно код работает только при нажатии, а не с клавиатуры… может быть, что-нибудь еще я должен разрешить?
2.Снова: «здесь вам нужна мышка инструмент, чтобы переместить указатель мыши на кнопки «скопировать», переводчик Google и щелкните по нему» — если у пользователя есть разрешить JavaScript от Apple мероприятий проверено с Гугл Хром > вид > разработчик, то это, вероятно, было бы намного лучше, чтобы нажать кнопку , используя Javascript на потом «некоторые мышь средство для перемещения указателя мыши». При тестировании загрузка страницы и перевода должна быть завершена, поэтому необходимо добавить некоторую разумную задержку. При тестировании следующего примера кода AppleScript работал, чтобы нажать кнопку Копировать перевод :
3.
tell application "Google Chrome" to tell active tab of front window to execute javascript "document.getElementsByClassName('VfPpkd-Bz112c-LgbsSe yHy1rc eT1oJ qiN4Vb itOtF IK3GNd')[0].click();"
4. Мне нравится использовать расширение «Сочетания клавиш для Google Translate» — Ctrl C копирует переведенный текст.
5. Роберт, я подозреваю, что в параметрах быстрого действия моего автомата есть что-то, что мешает ему работать должным образом; не могли бы вы рассказать, как мне настроить скрипт там?