Уроки AppleScript
Создание инструментов для лучшего понимания AppleScript — часть 1
Зная несколько инструментов и несколько простых скриптов, вы обнаружите, что работа с AppleScript не должна быть разочаровывающей.
Весь код, показанный в этой статье, доступен через связанный репозиторий GitHub.
Изучение AppleScript может разочаровать. Большинство руководств, которые я видел, не объясняют, как исследовать самостоятельно или как найти дополнительную помощь, и это две мои основные цели. Может показаться, что вам нужно знать множество магических строк, ключевых слов и заклинаний, чтобы что-то сделать. Хотя вам действительно нужно много знать, вы можете применить методический подход и обнаружить многое из того, что вам нужно, с небольшими знаниями и несколькими инструментами.
Одним из таких инструментов являетсяРуководство по языку AppleScript. Я щедро разбросал ссылки на этот документ по всей статье. Мое намерение состоит в том, чтобы эта статья была полностью понятна без прочтения каких-либо ссылок, но они должны оказаться полезными, поскольку вы продолжаете учиться самостоятельно.
Редактор сценариев
Начнем наше путешествие с Script Editor
. Он находится в папке Utilities
внутри вашей папки Applications
, но вы можете просто нажать ⌘-пробел и ввести «Редактор сценариев», чтобы запустить его.
Это выглядит как очень минималистичный редактор, но с его помощью мы можем многому научиться.
🔥 Совет. Если вы хотите использовать VS Code для написания скриптов, я настоятельно рекомендую расширение AppleScript
.
Наш первый сценарий
Начнем с полнофункционального скрипта. Введите приведенный ниже код в редактор, и когда вы нажмете кнопку Play
, должно запуститься приложение «Системные настройки», а затем должна отобразиться панель Displays
. Если этого не происходит, проверьте правописание: Displays
во множественном числе. AppleScript накажет вас за мелкие орфографические ошибки.
Этот сценарий направляет команды в контейнер верхнего уровня application “System Preferences”
. Он использует команду activate
для запуска и вывода System Preferences
на передний план. Наконец, он сообщает приложению настроек открыть панель настроек Displays
. Хотя сам по себе этот скрипт не так уж полезен, под капотом происходит много всего, что стоит подробно изучить.
Сначала мы используем зарезервированное ключевое слово tell
в форме составного оператора, чтобы нацелить наши команды на нужный контейнер. Сразу после ключевого слова tell
нам нужно сослаться на объект. В этом случае мы используем встроенную ссылку на класс с именем application
вместе с названием приложения.
Поиск элементов в словаре
Я слышал, вы спрашиваете, откуда вы знаете имя приложения? Хороший вопрос. Один из способов — использовать меню File→Open Dictionary...
редактора сценариев, прокрутить вниз появившееся окно словаря ¹ и выбрать System Preferences
. В этом случае имя, которое вы видите в браузере, и имя, которое вы видите в верхней левой панели навигации словаря, совпадают. Это не всегда так, если вы сомневаетесь, откройте словарь приложения и быстро просмотрите его.
Словарь также может помочь нам открыть больше элементов для сценариев. В этом случае, если вы нажмете на System Preferences
в верхней левой панели навигации, вы перейдете мимо Standard Suite
на панели сведений. Вы сразу увидите под Elements
фразу contains panes
. Это наш ключ, и пока мы устанавливаем панель на довольно интуитивно понятные «Дисплеи», вы часто будете видеть ids
вместо имен. Я пытался сделать это проще, но если вы используете неанглоязычную версию macOS, идентификаторы будут работать лучше для вас, но не планируйте их угадывать.
Поиск элементов с помощью самого AppleScript
Давайте напишем еще один скрипт и воспользуемся для изучения самим AppleScript. Этот сценарий послужит нашим фонарем, который убережет нас от того, чтобы быть съеденным червем, когда мы будем исследовать темные, извилистые, похожие на лабиринт проходы в пещере AppleScript.
Здесь мы используем команду set, чтобы сделать наш скрипт и его вывод немного более понятными. Начнем с установки глобальной константы AppleScript text item delimiters
на перевод строки. Затем мы объявляем и устанавливаем переменную names
для хранения name
каждого pane
.
🔥 Совет. Этот метод извлечения свойства из каждого объекта в коллекции является ценной и многократно используемой концепцией.
Затем мы создаем еще одну переменную message
, которая имеет небольшой текст заголовка (за которым следует другой способ указания перевода строки), и мы используем оператор конкатенации текста &, чтобы добавить список имен панелей, разделенных переводом строки. Затем мы используем команду display dialog
для отображения message
вместе с кнопкой OK
.
При запуске этого скрипта не забудьте закрыть получившийся модальный диалог кнопкой OK
. Кнопка «Стоп» в редакторе скриптов не убьет скрипт за вас.
Еще раз взгляните на словарную запись для панели «Системные настройки». Для панели есть и другие свойства, попробуйте заменить id
на name
в приведенном выше скрипте. Вы также можете попробовать localized name.
Имейте в виду, что когда вы устанавливаете глобальную константу в новое значение, вы действительно меняете ее глобально. Это может удивить другие скрипты. По умолчанию для text item delimiters
установлено значение ""
, поэтому вы можете добавить строку, чтобы восстановить его до этого значения, если вы обеспокоены тем, что это повлияет на другие сценарии.
Изучение редактора сценариев
Наконец, я хочу отметить некоторые приятные особенности Script Editor
. Вы можете переключить кнопку Show or Hide the Log
в нижнем колонтитуле, чтобы увидеть дополнительный вывод из ваших скриптов.
- Используйте комментарий в конце строки, чтобы отключить диалог
- Показать журнал, щелкнув показанный значок
- Запустите скрипт, и результаты отобразятся на нескольких панелях, в примере я переключился на вкладку сообщений.
🔥 Совет. У Apple есть очень читаемая статья Знакомство с редактором скриптов.
В будущих статьях мы будем поднимать якоря, открывать элементы пользовательского интерфейса и делать записи в журнале по мере того, как мы будем углубляться в воды AppleScript.
¹ См. статью Руководство по написанию сценариев для автоматизации Mac — Навигация по словарю сценариев — если вас интересует структура и терминология Словаря.