Я пытаюсь создать команду оболочки на основе Applescript, которая сообщает приложению Preview из Mac OS X закрыть определенное окно.
#!/bin/sh
osascript <<EOF
tell application "Preview"
close "$1"
end tell
EOF
Но это не работает: я получаю сообщение об ошибке
25:52: execution error: Preview got an error: "musixdoc.pdf" doesn’t understand the close message. (-1708)
Смежный вопрос: Как закрыть приложение OS X из командной строки, используя псевдоним, определенный в моем .bash_profile?
macos
shell-script
applescript
Эван Деланой
источник
источник
Ответы:
Получение Preview.app для принятия команд AppleScript
По умолчанию предварительный просмотр AppleScripting не работает, поскольку в предварительном просмотре отсутствует необходимый словарь. Чтобы это исправить, проверьте ответ Лаури здесь , который объясняет настройку
NSAppleScriptEnabled
Preview.app.Выйдите из Preview.app, затем откройте терминал и введите:
Закрытие окна из приложения
1) По индексу окна или названию окна
Команда для закрытия окна любого именованного приложения будет выглядеть примерно так:
... или если вы хотите закрыть именованное окно документа, например
foo.jpg
:Итак, в вашем сценарии оболочки это будет:
Здесь первый аргумент, передаваемый скрипту, - это имя окна, которое вы хотите закрыть, например
./quit.sh foo.jpg
. Обратите внимание, что если ваш файл содержит пробелы, вы должны указать имя файла, например./quit.sh "foo bar.jpg"
.Или, если вы хотите закрыть произвольные окна из любого приложения, используйте это:
Вот, вы бы использовали,
./quit.sh Preview foo.jpg
например.2) По имени файла
Если вы хотите закрыть окно, принадлежащее определенному документу, но указав имя файла, вам нужно что-то еще. Это связано с тем, что многостраничный PDF-файл может отображаться как
foo.pdf (Page 1 of 42)
, но вы просто хотите перейтиfoo.pdf
к AppleScript.Здесь мы перебираем окна и сравниваем имена файлов с аргументом, переданным скрипту:
Теперь вы можете просто позвонить
./quit.sh foo.pdf
. В общем случае для всех приложений с именованными окнами документов это будет:Предостережение: автоматическое закрытие Preview.app
Preview.app - одно из этих приложений, которое автоматически закрывается после закрытия последнего окна документа. Это делается для того, чтобы сохранить память и «очистить». Чтобы отключить это поведение, выполните следующее:
Конечно, чтобы отменить это, измените
TRUE
наFALSE
.Использование функций вместо скриптов
Наконец, я бы предложил поместить ваши скрипты в функцию, которая всегда доступна в вашей оболочке. Для этого добавьте скрипты к себе
~/.bash_profile
. Создайте этот файл, если он не существует.После сохранения профиля bash и перезапуска оболочки вы можете звонить
cw Preview foo.pdf
откуда угодно .источник
tell application "Preview" to windows
, это даст вам какие-либо результаты? Какой точный сценарий вы используете?Ответ от slhck выглядит хорошо и тщательно. Осторожно, выполняя третью строку кода :
«Кажется» вызывало аварийное завершение Preview при каждом запуске:
Согласно руководству по
-f
кодовому обозначению , это означает, что «кодовый знак заменяет существующую подпись», и это-s
означает «подписать код по указанному пути»… в этом случае-
По всей видимости, Preview теперь неправильно подписан и непригоден для использования. :(
источник