Уроки 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 в нижнем колонтитуле, чтобы увидеть дополнительный вывод из ваших скриптов.

  1. Используйте комментарий в конце строки, чтобы отключить диалог
  2. Показать журнал, щелкнув показанный значок
  3. Запустите скрипт, и результаты отобразятся на нескольких панелях, в примере я переключился на вкладку сообщений.

🔥 Совет. У Apple есть очень читаемая статья Знакомство с редактором скриптов.

В будущих статьях мы будем поднимать якоря, открывать элементы пользовательского интерфейса и делать записи в журнале по мере того, как мы будем углубляться в воды AppleScript.

¹ См. статью Руководство по написанию сценариев для автоматизации MacНавигация по словарю сценариев — если вас интересует структура и терминология Словаря.