Знакомство с AppleScript и VoiceOver

Дата публикации:20.12.2010
Поделиться в Twitter Поделиться в F******k Поделиться в VKontakte Поделиться в Telegram Поделиться в Mastodon

Введение

AppleScript - это язык программирования пользовательских сценариев, изначально встроенный во все операционные системы Mac, начиная с Mac OS 8. Благодаря ему можно оптимизировать выполнение многих задач, автоматизировав повторяющиеся действия или получив доступ к специфическим функциям конкретного приложения.

AppleScript является динамическим объектно-ориентированным языком программирования. Он автоматически определяет, какие объекты и команды программа распознаёт, основываясь на информации хранимой в каждом скриптуемом приложении. Помимо непосредственного написания программного кода Mac OS предоставляет и возможность записи последовательности действий в скрипт подобно тому, как это реализовано, например, в макросах MS Office. Это не требует от пользователя никаких знаний по программированию.

Поскольку VoiceOver является встроенной функцией операционных систем Mac, то AppleScript также способен с ним взаимодействовать. То есть в отличие от многих программ экранного доступа под OS MS Windows пользователю не придётся учить отдельный язык для написания программных расширений. Он сразу получает универсальный инструмент взаимодействия со всей системой, включая и экранный доступ.

Среда программирования

Встроенной средой разработки скриптов для Mac OS является приложение Script Editor (Редактор сценариев).

В верхней части его окна располагается поле редактирования, предназначенное для ввода программного кода. Вводимый код до компиляции, запускаемой кнопкой "Compile", отображается оранжевым цветом, а после - становится разноцветным. Различные элементы программы (служебные слова, операторы, константы и т. д.) отображаются разными цветами, а каждая строка получает отступ, соответствующий её структурному уровню. Цветовую схему можно настроить в меню Script Editor (пункт "AppleScript Formatting"). Запустить скрипт на выполнение можно кнопкой "Run". Если в коде содержится синтаксическая ошибка, то Script Editor выведет окно с соответствующей информацией. Можно сразу нажимать кнопку "Run" или аналогичную ей горячую клавишу Command-R. В любом случае, перед запуском скрипта будет осуществлена его компиляция.

Даже если код содержал ошибки, его можно сохранить в виде обычного текста для дальнейшей доработки. Если же код корректен, то после компиляции он может быть сохранён либо как компилированный скрипт (compiled script), либо как программа (application).

Разница между этими вариантами заключается в том, что компилированный скрипт возможно просмотреть перед запуском, так как он открывается в окне Script Editor откуда его надо запускать вручную посредством Command-R, а программа сразу идёт на выполнение заданных действий. Чтобы просмотреть код программы следует открыть её через Script Editor (меню "File" > "Open"). Если требуется скрыть исходный код скрипта для просмотра, то при его сохранении следует установить соответствующий флажок (Run Only).

Программный код в Script Editor можно вводить и в сокращённом виде, что может ускорить работу. Например, если мы обращаемся к VoiceOver, то в полном виде в AppleScript это задаётся следующей строкой:

tell application "VoiceOver"

Тем не менее мы можем написать это более кратко:

tell app "xxx"

При компиляции Script Editor автоматически преобразует "app" в "application", а столкнувшись с непонятным названием приложения выведет дополнительный диалог, из которого можно будет выбрать любую программу, установленную на данной машине.

Script Editor также предоставляет возможность осуществления отладки скрипта. Для этого применяются диалоги "Event Log" и "Result", которые вызываются из меню или горячими клавишами Command-L и Command-E соответственно.

В окне "Event Log" отображаются команды языка или программ, вызываемые скриптом во время выполнения, и результат их действия. Для отображения значения переменных в ходе выполнения скрипта используется оператор log.

В окне "Result" отображается результат последней команды скрипта или значение, возвращаемое оператором return, который прекращает работу скрипта.

Помимо Script Editor существуют и сторонние среды разработки, например, коммерческое решение от фирмы "LateNightSoftware" под названием Script Debugger. Данное приложение предоставляет большие возможности по оптимизации процесса написания и отладки скрипта, в том числе и пошаговой. Однако из-за ориентированности на визуализацию процесса разработки и склонности к всплывающим окнам Script Debugger может вызвать некоторые проблемы при использовании совместно с VoiceOver.

Существуют и другие сторонние приложения, предназначенные для разработки скриптов для Mac OS, однако их обзор не входит в задачу данной статьи, к тому же многие из них мало доступны пользователям VoiceOver, так как изначально ориентированы на графические интерфейсы.

Взаимодействие с приложениями

Программы, которые предоставляют возможность взаимодействовать с ними посредством AppleScript, называются "скриптуемыми" (scriptable). Разумеется, программы имеют различающиеся API. Однако получить справку по интересующему API можно прямо из окна Script Editor, выбрав соответствующий "словарь" (Dictionary) через пункт "Open Dictionary". Словарь содержит имена команд, объектов и их свойств.

Визуально в Script Editor словарь отображается в виде двух панелей. Слева располагается список ключевых слов из команд, объектов и классов.

Ключевые слова разделены на группы (suits), названия которых выделяются жирным шрифтом. В самом начале в большинстве случаев располагается Required Suite и Standart Suite. Required Suite часто указывают и оставляют пустым. Все приложения без исключения поддерживают команды Run, Open, Quit, Print, поэтому их описание не приводится в словарях. Например, команду Quit удобно использовать для завершения даже тех приложений, которые не поддерживают AppleScript. Если эти команды переопределены, то они сгруппированы в Standart Suite. В зависимости от программы и структуры словаря можно встретить группы: Text Suite, Internet Suite и другие.

Среди команд объекты и классы выделяются курсивом. При выборе ключевого слова в левой панели справа отображается его описание. Для команды описываются параметры, которые с ней передаются и возвращаемый результат. Параметры, заключённые в квадратные скобки, являются необязательными.

Скриптуемые программы можно условно разделить на три группы по поддержке команд AppleScript:

  1. Минимальная - поддерживают только команды Do Script или Required Suite).
  2. Функциональная - поддерживают Core Suite для сохранения, печати, и так далее.
  3. Полная - поддержка полной объектной модели и особенностей программы.

Настройка VoiceOver

Для того чтобы стало возможным взаимодействие AppleScript с VoiceOver следует произвести некоторые настройки:

  1. Нажать Control+Option+F8 или fn+Control+Option+F8 (для сокращённых клавиатур), чтобы запустить VoiceOver Utility.
  2. В главном меню выбрать категорию настроек "Основные".
  3. Здесь установить флажок "Разрешить управление VoiceOver с помощью AppleScript" и сохранить изменение.

После этого станет возможным расширять функционал VoiceOver при помощи AppleScript.

Несколько примеров

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

Отдадим дань традиции:

say "Hello, world!"

Данный несложный скрипт произнесёт бессмертную фразу, используя синтезатор речи, установленный по умолчанию.

AppleScript использует динамическую типизацию данных, то есть интерпретатор способен автоматически распознать тип переменной:

set Phrase to "Hello, world!"
say Phrase

В данном скрипте переменная Phrase автоматически будет распознана как строковый тип (String), исходя из её значение "Hello, world!".

Разумеется, можно явно преобразовывать тип переменных:

set x to 123
x as String

После этого переменная x, вместо числового значения 123, получит строковое значение.

Код скриптов можно сопровождать многострочными или однострочными комментариями:

(* Это комментарий к коду,
располагающийся на двух строках. *)
-- Это комментарий в одну строку.

Ссылки для подробного изучения



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024