- Applescript: язык автоматизации для macOS
- Диалоги с пользователем
- Диалоги с софтом
- Командная строка
- Do you speak AppleScript?
- Немного терминологии
- Комментарии
- Данные
- Использование AppleScript для автоматизации задач в iWork для Mac
- Дополнительная информация
- Основы AppleScript
- Приложение Script Editor
- AppleScript и объекты
- Что включено в script объект
- Свойства
- Элементы
- Объект спецификаторов
- Что внутри объекта спецификатора
- Контейнеры
- Абсолютные и относительные спецификаторы объекта
- Объект Спецификаторов в ссылочных объектах
- Приведение (преобразование объекта)
- Сценарии дополнений
- Обзор команд
- Типы команд
- Прямой параметр
- Параметры, определяющие расположение
- AppleScript Обработка ошибок
- Глобальные константы в AppleScript
- result
- Текстовые константы
- text item delimiters
- version
- current application
- missing value
- true, false
- Ключевые слова it и me
- Псевдонимы и файлы
- Указание путей
- Работа с псевдонимами
- Работа с файлами
- Удаленные приложения
- Включение удаленного приложения
- eppc-стиль спецификаторов
- Таргетинг удаленного приложения
- Отладка сценариев AppleScript
- Обратная связь от ваших сценариев
- Логинг
Applescript: язык автоматизации для macOS
AppleScript — скриптовый язык, который используется для управления системой, приложениями и файлами в Mac OS X. Наиболее общий принцип применения следующий: открыть приложение и передать ему набор инструкций для выполнения. Причем это не обязательно приложения из стандартного комплекта поставки операционки, многие сторонние приложения также предоставляют API для обращения к ним через AppleScript.
Для редактирования и запуска скриптов есть небольшой редактор, который находится в Application > Utilites > AppleScript Edtior. Редактор довольно минималистичный и не имеет богатых возможностей, но для написания небольших скриптов его обычно оказывается вполне достаточно. Условно его можно разделить на две части: в первой пишется непосредственно сам код, а в нижней части, показывается результат выполнения твоих трудов. Если вдруг возникнет необходимость сделать более или менее серьезный проект, то удобнее будет воспользоваться какой-нибудь сторонней разработкой, например Script Debugger.
Applescript имеет очень простой синтаксис, который был максимально приближен к обычному английскому языку, давай быстро пробежимся по основным операторам, чтобы понимать, как нам выполнять самые базовые вещи.
Чтобы задать переменную нужно воспользоваться оператором set. Делается это так:
Имя переменной не должно совпадать с зарезервированными словами (beep, say и т.д.), а также нельзя начинать имя переменной с цифры.
Условия задаются при помощи оператора if, как и в других языках:
Оператор say произносит переданный ему текст. Вместо «is» можно писать привычный знак равенства.
Задать цикл можно оператором repeat. В самом простом случае достаточно написать:
Этот цикл 2 раза воспроизведет стандартный системный звук. Если нужны итерационные циклы, то их можно задать используя until или while, например:
Арифметический цикл можно задать при помощи with таким образом:
Я думаю, понятно, что этот код будет произносить числа от 1 до 20 с шагом 2. Сейчас я быстро прошелся по основным «школьным» азам, чтобы было понятно что это за язык и с чем его едят. Как видишь, разработчики старались делать его таким, чтобы пользователи с разным уровнем подготовки могли «говорить» с компьютером практически человеческим языком. Я не буду подробно останавливаться на всех особенностях синтаксиса, если возникнут вопросы, ты всегда сможешь найти ответы в документации на сайте Apple.
Диалоги с пользователем
AppleScript не был бы так интересен, если бы не возможность легко создавать различные диалоговые окна, что дает нам возможность сделать наши скрипты более user-friendly.
Давай начнем с вызова стандартного системного диалога выбора файла. Делается это при помощи команды choose file.
В данном примере, будет вызван диалог выбора файла в котором включена фильтрация по типу (pdf или mobi) и разрешен выбор нескольких файлов. Если ты выполнишь этот код, то заметишь, что путь к файлу запишется, как alias:
Такой формат понимают стандартные приложения в Mac OS, но часто требуется использовать привычный нам POSIX-вид, делается это легко:
В переменную posixFilePath путь запишется в виде: /Users/UserName/file.pdf.
Аналогичным способом выбирается папка при помощи choose folder. Чтобы показать свое, кастомное сообщение пользователю, нужно воспользоваться командой:
Если не было передано никаких параметров, то будет выведен стандартный диалог с кнопками «ОК» и «Cancel». Тут стоит отметить, что после вывода диалога скрипт приостановит выполнение, и продолжит выполняться после нажатия «ОК», а вот после «Cancel» выполнение скрипта будет прервано с соответствующей ошибкой «User canceled.». Если такое поведение в твои планы не входит, то самое простое, — воспользоваться обработчиком ошибок:
Естественно, может такое случиться, что потребуются другие кнопки, кроме «Cancel» и «OK», и ты конечно же волен добавить любые, которые захочешь (но не больше трех). Делается это следующим образом:
А как быть, если требуется дать пользователю выбрать что-нибудь из списка? Легко:
В случае если нужно будет просто ввести какие-либо данные воспользуйся такой строчкой:
Диалоги с софтом
Как я отметил в начале, главным козырем AppleScript является возможность автоматизации действий в различных приложениях, что дает практически безграничные возможности по его применению. Для того чтобы передать команду приложением нужно воспользоваться блоком tell .
Например, очистим корзину:
Чтобы узнать какие действия доступны для того или иного приложения, в AppleScript имеется средство, которое называется Dictionary, оно доступно в меню File > Open dictionary.
Также имеется возможность передачи команд на удаленный компьютер. Для начала, нужно включить опцию Remote Apple Events на машине, где требуется выполнить какие-либо действия в System Preferences > Sharing. Теперь, чтобы выполнить код на другой машине, нужно использовать следующую конструкцию:
Будь готов, что для выполнения действия на удаленной машине скрипт запросит логин и пароль, так что если ты потираешь руки, чтобы творить беспредел, придется придумать что-то еще :).
Командная строка
После прочтения предыдущих двух разделов у тебя наверняка должна была зародиться мысль о том, что неплохо было бы соединить удобство AppleScript с мощью shell-скриптов. Первое, что приходит в голову, — воспользоваться знаниями из предыдущего раздела и скормить необходимые команды приложению Terminal.
Такой способ имеет право на существование и в отдельных случаях он может быть даже предпочтительнее, но есть другой вариант: воспользоваться командой do shell script, при помощи которой можно также выполнять консольные команды, что гораздо более удобно, так как дает возможность записать результат выполнения команды в переменную и оперировать с ней дальше средствами AppleScript.
Источник
Do you speak AppleScript?
Это — вторая статья цикла. Вы уже немного знакомы с тем, как пишутся скрипты, а может быть — и я на это надеюсь — попробовали что-то писать самостоятельно. Но те несколько конструкций языка, что были использованы в нашем первом занятии,- лишь малая его часть. Сегодня мы расширим наш инструментарий. Конечно, журнальная статья не сможет заменить четырехсотстраничный справочник по языку (AppleScript Language Guide). Так что воспринимайте ее как карманный словарик-разговорник.
Немного терминологии
Прежде всего договоримся об используемых терминах. Как Вы уже знаете, основное назначение AppleScript — управление объектами (object) в прикладных программах (окнами, элементами данных и т. п.). Объект может включать другие объекты — его элементы (element). Например, текст состоит из абзацев, слов и символов. Любой объект является представителем («экземпляром») какого-либо класса объектов (class). Все экземпляры класса имеют один и тот же набор свойств (property), состоят из однотипных элементов, для всех их определена реакция на одинаковые команды (в объектно-ориентированных языках их обычно называют методами; будем и мы использовать этот термин).
Таблица 1. Собственные методы AppleScript
Имя | Описание | Пример |
---|---|---|
Copy&to& | Копирование значения выражения в переменную (переменные) | copy «Article» to myWork |
Count&in& | Подсчет количества элементов | count integers in <«Yes», 2, 10, 3.5>дает результат 2 |
Get& | Вычисление значения выражения. Слово Get можно опускать | get 2*2 дает результат 4 |
Run& | Исполняет объект, не являющийся выражением | |
Set&to& | Присваивает переменной (переменным) значение выражения | set width to 158 |
В AppleScript существует механизм «общих данных» (Data Sharing). Т. е. несколько переменных (списков, записей или объектов скрипта) обращаются фактически к одной и той же области памяти. Например, записав
set SecondList to FirstList
мы создаем не новый список, а только второе имя для уже существующего. Соответственно, любое изменение в FirstList будет отражаться на SecondList и наоборот. Если мы хотим создать на самом деле новый список, только вначале совпадающий с другим, необходимо использовать метод Copy.
Для простых переменных методы Copy и Set взаимозаменяемы.
Однако, для написания скрипта только объектов и их методов недостаточно. Нужно связать эти слова в «предложения», определяющие ход выполнения программы,- операторы. Они бывают простыми — однострочными или составными — занимающими несколько строк и содержащими другие операторы (вспомните, например, «tell&end tell» или «if&then&end if»).
Классы и методы прикладной программы — это ее словарь. Все слова из него, а также из стандартного набора операторов AppleScript называют зарезервированными. Когда мы создаем собственные свойства, методы или переменные в скрипте, называть их именами, совпадающими с резервированными словами, нельзя. А вообще имена, как и во многих других языках, могут состоять из латинских букв, цифр и символа подчеркивания (_), причем первым символом обязательно должна быть буква. Различать здесь заглавные и строчные буквы AppleScript не умеет.
Комментарии
Чтобы человеку (например, Вам самим) было легче разобраться с программой, не помешает вставить в нее пояснения — комментарии. В AppleScript это можно сделать двумя способами:
- Блочный комментарий. Занимает несколько строк. Заключается в символы (* и *).
- Комментарий в конце строки. Начинается с символа — (два минуса).
(* Очень-очень
длинный
комментарий *)
set width to 100 — а это комментарий к строке
Данные
AppleScript может работать с данными различных типов, как простыми, так и структурированными. Набор простых данных довольно обширен.
Таблица 2. Некоторые типы данных AppleScript
Имя | Описание | Пример |
---|---|---|
Boolean | Логическое значение | false, true |
Date | Дата (строка, включающая день недели, число, месяц, год и время) | «Среда, 9 января 2002 23:20:59» |
Integer | Целое | 3 |
Real | Вещественное число | 3.0 |
Reference | Ссылка на объект | window «Неименованный» |
String | Строка (Последовательность символов) | «Величина» |
Styled Text | Стилизованный текст (содержащий информацию о шрифте) | |
Text | синоним класса string |
Значения можно преобразовывать из одного типа в другой, используя операцию «as». Например, «123» as integer превратит исходную строку в число 123. Зачем? — Хоть бы для того, чтобы произвести с ним какие-либо вычисления. Если же мы захотим вставить результат расчетов в текст — придется наоборот преобразовать число в строку.
Структурированные переменные хранят сразу несколько значений. В AppleScript это данные типа список (list) и запись (record).
Список записывается как заключенная в фигурные скобки последовательность значений любых типов, перечисленных через запятую. Например: set MyList to <25, 324, «документ», 13>. Конкретный элемент может быть получен по своему порядковому номеру. В нашем случае, item 2 of MyList даст число 324.
Элементы записи — поля (field) — также записываются в фигурных скобках, но их порядок роли не играет, зато каждый имеет собственную уникальную метку. По этой-то метке мы и будем к нему обращаться. Например, задать всю запись целиком можно вот так: set MyData to
Значение величины может быть либо задано в явном виде в самом скрипте<сноска: последовательность знаков, явно указывающую значение, называют литералом>, как в использованных выше примерах, либо получено как результат метода, либо — вычислено путем выполнения тех или иных операций над уже имеющимися значениями. Многие операции в AppleScript могут записываться несколькими разными способами, в таблице приведено по одному (обычно, наиболее короткому) варианту.
Источник
Использование AppleScript для автоматизации задач в iWork для Mac
AppleScript используется для автоматизации часто выполняемых задач в программах iWork для Mac с целью повышения производительности и сокращения количества ошибок.
В программах iWork для Mac улучшена поддержка AppleScript для Numbers 3.1 и более поздних версий, Pages 5.2 и более поздних версий и Keynote 6.2 и более поздних версий.
Словарь AppleScript содержит доступные команды AppleScript для программ Pages, Numbers и Keynote. Чтобы просмотреть словарь, выполните следующие действия:
- 
	
- Откройте редактор AppleScript в меню «Программы» > «Утилиты». 
	
- Выберите пункт «Файл» > «Открыть словарь». 
	
- Выберите Pages, Numbers или Keynote и нажмите «Выбрать». Если в системе установлена более ранняя версия программы, выберите нужную версию в списке. 

Дополнительная информация
Дополнительные сведения об использовании AppleScript в программах iWork для Mac можно найти на сторонних веб-сайтах, таких как Mac OS X Automation (Автоматизация Mac OS X) и iWork Automation (Автоматизация iWork).
Сведения об использовании функции «Рассылка писем» с помощью AppleScript в Pages 5.5 и более поздней версии или Numbers 3.5 и более поздней версии см. в разделе, посвященном функции «Рассылка писем», на веб-сайте iWork Automation.
Информация о продуктах, произведенных не компанией Apple, или о независимых веб-сайтах, неподконтрольных и не тестируемых компанией Apple, не носит рекомендательного или одобрительного характера. Компания Apple не несет никакой ответственности за выбор, функциональность и использование веб-сайтов или продукции сторонних производителей. Компания Apple также не несет ответственности за точность или достоверность данных, размещенных на веб-сайтах сторонних производителей. Обратитесь к поставщику за дополнительной информацией.
Источник
Основы AppleScript
Приложение Script Editor
Приложение Script Editor (Редактор сценариев) находится в /Applications/Utilities . Оно предоставляет возможность редактирования, компиляции и выполнения сценариев, отображение скриптинга приложений, и сохранения их в различных форматах, таких как скомпилированные скрипты, приложения и простой текст.
Редактор сценариев может вывести результат выполнения сценария AppleScript и может отобразить журнал событий компании Apple, которые отправляются во время выполнения скрипта. В настройках редактора сценариев, вы можете также выбрать, чтобы сохранять историю последних результатов или журнал событий.
Словарь (dictionary) является частью сценариумных приложений, который определяет условия сценариев, которые оно понимает. Вы можете выбрать File > Open Dictionary в Script Editor для отображения словаря сценариев приложения или скриптового добавления на вашем компьютере. Или вы можете перетащить значок приложения на значок редактора сценариев, чтобы отобразить его словарь (если он есть).
Чтобы отобразить список, который включает только сценарии приложений и сценарии дополнений предоставляемых OS X, выберите Window > Library. Дважды щелкните элемент в списке, чтобы отобразить его словарь. Рисунок ниже показывает словарь для применения в Finder OS X 10.8. Словарь помечен как «Finder.sdef».
Есть также сторонние редакторы для AppleScript.
AppleScript и объекты
AppleScript является объектно-ориентированным языком. Когда вы пишете, компилируете и выполняете скрипты, все, с чем вы работаете является объектами. Объект является экземпляром определения класса, которое может включать в себя свойства и действия. AppleScript определяет классы для объектов, с которыми вы обычно работаете, начиная с верхнего уровня объекта script , который является общим в сценарии в котором вы работаете.
В объекте script , вы работаете с другими объектами, в том числе:
AppleScript определяет классы для логических значений, сценариев, текстов, чисел и других видов объектов для работы в сценарии;
Части OS X и приложений с поддержкой сценариев, распространяемых с ним, такие как Finder, системные события и события баз данных (находится в /System/Library/CoreServices), определяют много полезных классов.
Сторонние приложения с поддержкой сценариев определяют классы, которые поддерживают широкий спектр функций.
Что включено в script объект
При вводе AppleScript заявления в окне сценария в Script Editor, вы работаете в верхнего уровне объекта script . Все определения объекта script имеют тот же синтаксис, за исключением того, что на высшем уровне script объект не имеет маркировки его начала и конца.
Объект script может содержать следующее:
- Определения свойств (необязательно):
Свойство это именованный контейнер, в котором хранится значение.
Явный обработчик run (необязательно):
Обработчик run содержит заявления AppleScript выполняемые при запуске сценария.
Неявный обработчик run (необязательно):
Неявный обработчик run состоит из любых заявлений вне любого содержащегося обработчика или script объекта.
Дополнительные обработчики (необязательно):
Обработчик является эквивалентом подпрограммы.
Дополнительные объекты script (необязательно):
Объект script может содержать вложенные объекты script , каждый из которых определяется так же, как объект script верхнего уровня, кроме того, что вложенный объект script в скобках с заявлениями, которые отмечают начало и конец.
Вот пример простой сценария с одним свойством, один обработчик, один вложенный объект script , и неявный обработчик run с двумя заявлениями:
Первое заявление в обработчике run запускает testGreet , которsq pfgecrftn вложенный script объект testGreet . Этот объект script вызывает обработчик greetClient() , передавая свойство defaultClientName . Обработчик отображает диалог, приветствуя клиента по умолчанию, Mary Smith.
Второе заявление в run обработчике вызывает greetClient() напрямую, с аргументом «Joe Jones».
Свойства
Свойство объекта является характеристикой, которая имеет единственное значение и метку, такую как name свойство окна или month свойство даты. Определение для любого класса AppleScript включает в себя имя и класс для каждого из его свойств. Имена свойств должны быть уникальными в классе. Значений свойств могут быть для чтения/записи или только для чтения.
Класс date AppleScript, например, определяет как свойства для чтения/записи, так и только для чтения. Они включают свойство weekday , которое предназначено только для чтения, и month , day и year свойства, которые доступны для чтение и записи. Это потому, что значение свойства weekday зависит от других свойств, вы не можете установить произвольное weekday на актуальную дату.
Класс свойства может быть простым классом, таким как boolean или integer , композитным классом, таким как класс point (состоит из двух целых чисел), или более сложным классом.
Большинство классов поддерживают только предопределенные свойства. Тем не менее, для script класса, AppleScript позволяет определить дополнительные свойства.
Элементы
Элемент представляет собой объект, содержащийся внутри другого объекта. Определение для любого класса AppleScript включает типы элементов, которые он может содержать. Обычно объект может содержать ноль или болшее количество каждого из его элементов.
Для заданного типа элемента, объект может содержать множество элементов, либо не содержать, а количество элементов, которое он содержит может изменяться с течением времени. Например, можно получить объект list , не содержащий элементов (это может быть пустой список). В более позднее время, тот же список может содержать много элементов.
Можете ли вы добавлять или удалять элементы из объекта зависит от класса и элемента. Например, объект text является неизменным, вы не можете добавить или удалить текст, если объект однажды создан. Для объекта list , вы не можете удалять элементы, но вы можете использовать команду set , чтобы добавить элемент в начало или в конец:
Объект спецификаторов
Объект спецификатор указывает информацию, необходимую, чтобы найти другой объект с точки зрения объектов, в которых он содержится. Объект спецификатор может ссылаться на объекты приложения, такие как окна или файл, или же объект AppleScript, такие как элемент в списке или свойство в записи.
Объект спецификатор получает полную оценку (или разрешение) только тогда, когда скрипт запускается, а не при его компиляции. Сценарий может содержать корректный описатель объекта (например, third document of application «TextEdit» , который вызывает ошибку при выполнении сценария (потому что, например, может быть открыто меньше, чем три документа).
Приложения обычно возвращают объект спецификаторов в ответ на команды. Например, если вы спросите Finder для окна, он возвращает информацию, которая определяет объект окна, который запросил сценарий (если он существует). Контейнер верхнего уровня в объекте спецификаторе обычно само приложение.
Разница между спецификатором объекта и объектом это, как разница между адресом здания и самим зданием. Адрес представляет собой набор слов и цифр, например, «Санкт-Петербург, Коммунистический проспект 16», который идентифицирует расположение (на улице, в городе, в районе). Он отличается от самого здания. Если здание в этом месте рушится и возводится новое здание, адрес остается прежним.
Что внутри объекта спецификатора
Объект спецификатор описывает тип объекта, расположение, и как отличить объект от других объектов того же типа в этом месте. Эти три типа информационного-типа или класс; расположеник или контейнер; отличительная информация или формальная ссылка, позволяющая указать любой объект.
В следующем примере, класс объекта paragraph . Контейнер — фраза of document 1 . Поскольку эта фраза внутри заявления tell , заявление tell предоставляет контейнер верхнего уровня, приложения «TextEdit». Отличительной информацией (ссылкой) является комбинацией класса paragraph , а значение индекса, 1 , которые вместе указывают на первый параграф.
Контейнеры
Контейнер представляет собой объект, содержащий один или несколько объектов или свойств. В спецификаторе контейнер определяет, где найти объект или свойство. Чтобы указать контейнер, используйте слово of или in , как в следующем заявлении (из Finder tell блока):
Контейнер может быть объектом или несколькими объеками, перечисленными от внутреннего к внешнему содержащему объект, как показано ниже:
Вы также можете использовать притяжательные формы (‘ s ), чтобы указать контейнеры. В следующем примере, самый внутренний контейнер является first window и объект, который представляет собой свойство name :
В этом примере, целю заявления tell («TextEdit») является внешний контейнер для объекта спецификатора.
Абсолютные и относительные спецификаторы объекта
Абсолютный спецификатор объекта имеет достаточно информации, чтобы идентифицировать объект или объекты однозначно. Он может быть использован в любом месте в сценарии. Для ссылки на объект приложения, чтобы быть абсолютным, его внешний контейнер должен быть самим приложением, например:
В противоположность, относительной спецификатор объекта не определяет достаточно информации, чтобы идентифицировать объект или объекты однозначно, например:
Когда AppleScript встречает спецификатор относительного объекта в заявлении tell , он пытается использовать цель по умолчанию, указанную в инструкции для завершения объекта спецификатора. Хотя этого обычно не требуется, эта неявная цель может быть задана явно с помощью ключевого слова it .
По умолчанию цель заявления tell является объектом, который получает команды, если никакой другой объект не указан. Например, следующее заявление tell говорит Finder, получить имя с помощью относительного предыдущего спецификатора объекта.
Когда AppleScript встречает относительный спецификатор объекта за пределами любого tell заявления, он пытается завершить объект спецификатор, просматривая по цепочке наследования.
Объект Спецификаторов в ссылочных объектах
Когда можно создать ссылку ( reference ) на объект с оператором a reference to , он содержит объект спецификатор. Например:
В этом скрипте переменная docRef является ссылкой объект спецификатор которой относится к первому документу приложения TextEdit-что приводит, к его названию «New Report.rtf»,Ы в данном случае. Тем не менее, объект, который ссылается на docRef может измениться. Если вы открываете второй документ TextEdit называемый «Second Report.rtf», его окно перекрывает окно предыдущего документа, а затем запустить этот сценарий еще раз, он будет возвращать имя нынешнего документа на переднем плане,»Second Report.rtf» .
Вы могли бы вместо этого создать ссылку с более конкретным объектом спецификатором:
Если вы запустите этот сценарий после открытия второго документа, он все равно будет возвращать имя исходного документа, «New Report.rtf», если документ существует.
После создания ссылки на объект с оператором a reference to , вы можете использовать свойство contents , чтобы получить значение объекта, на который он ссылается. В следующем примере, содержимое переменной myWindow это сама ссылка окна.
Следует отметить, что в результате команды get вернется объект спецификатор ссылки, а не спецификатор к объекту, который он определяет.
Когда он это может, AppleScript неявно разыменовывает ссылки на объект (без использования свойства contents ), как в следующем примере:
Приведение (преобразование объекта)
Приведение (также известный как объект преобразования) представляет собой процесс преобразования объектов из одного класса в другой. AppleScript преобразует объект в другой класс в любом из следующих случаев:
- в ответ на as оператор
- автоматически, если объект другого класса, чем ожидалось для конкретной команды или операции
Не все классы могут быть приведены ко всем другим типам классов. Таблица ниже суммирует приведения, которые поддерживает AppleScript для часто используемых классов.
Оператор as указывает конкретное приведение. Например, следующее заявление приводит целое 2 в текстовое «2» перед его сохранением в переменной myText :
Если вы предоставляете параметру команды или операнда неправильный класс, AppleScript автоматически приводит операнд или параметр к ожидаемому классу, если это возможно. Если преобразование не может быть выполнено, AppleScript сообщает об ошибке.
Поддерживаемые приведения AppleScript по умолчанию:
Преобразование из класса | В класс | Примечания |
---|---|---|
alias | list (один пункт) text | |
application | list (один пункт) | Это одновременно и класс AppleScript и класс приложения. |
boolean | integer list (один пункт) text | |
class | list (один пункт) text | |
constant | list (один пункт) text | |
date | list (один пункт) text | |
file | list (один пункт) text | |
integer | list (один пункт) real text | Приведение integer к number не изменяет класс. |
list (один пункт) | text , если каждый из элементов в списке может быть приведен к объекту text | |
number | integer list (один пункт) real text | Значкеия, которые определены в качестве значений класса number в действительности значения либо integer класса или класса real . |
POSIX file | См. file | POSIX file является псевдо-классом file |
real | integer list (один пункт) | В приведении к integer , дробная часть округляется. Приведение к real не меняет класс. |
record | list | Все метки теряются во время приведения к list , обратное приведение к record невозможно. |
reference | любой класса, к которому указанный объект может быть приведен | |
script | list (один пункт) | |
text | integer list (один пункт) real | Можно привести к integer или real только если объект text представляет соответствующее числовое значение. |
unit types | integer list (один пункт) real text | Может привести между блоками типа в той же категории, например, inches к kilometers (длина) или gallons в liters (объем жидкости). |
Сценарии дополнений
Сценариумное дополнение представляет собой файл или bundle-пакет, который предоставляет обработчики, которые вы можете использовать в сценарии для выполнения команд и приведений.
Многие из команд, описанных в данном руководстве определены в стандартных добавочных сценариях в OS X. Эти команды хранятся в файле StandardAdditions.osax в /System/Library/ScriptingAdditions и доступны любому сценарию. Вы можете изучить терминологию для стандартных дополнений, открыв этот файл в редакторе сценариев.
Сценарии дополнений могут быть внедрены в bundle-пакеты скриптовых апплетов, поместив их в папку с именем Scripting Additions (обратите внимание на пробел между «Scripting» и «Additions») внутри bundle-пакета папки Contents/Resources/ . Обратите внимание, что редактор сценариев не рассматривает встраиваемые дополнения сценариев при редактировании bundle-пакетов апплетов. Во время разработки сценария, все необходимые дополнения сценариев должен быть правильно установлены в /System/ScriptingAdditions , /Library/ScriptingAdditions или
/Library/ScriptingAdditions так, чтобы редактор сценариев мог их найти.
Обзор команд
Команда — это слово или последовательность слов, используемых в заявлениях AppleScript для запроса действия. Каждая команда направлена на цель, которая является объектом, реагирующим на команду. Целью чаще является объект приложения (который сохранен в приложении или его документах и управляет приложением, например окно или документ) или объект в OS X. Тем не менее, он также может быть объектом сценария или значением в текущем сценарии.
Команды часто возвращают результаты. Например, команда display dialog возвращает записи, которые могут содержать текст, название кнопки, и другую информацию. Сценарий может изучить эту запись, чтобы определить, что делать дальше. Вы можете присвоить результат команды переменной, которую вы определяете, или получить доступ к нему через предопределенную переменную result AppleScript.
Типы команд
Сценарии могут использовать следующие виды команд:
- Команды AppleScript это те, которые построены на языке AppleScript. В настоящее время пять таких команд: get , set, count, copy и run . За исключением copy , каждая из этих команд может также быть реализована приложением. То есть, имеется версия команды из AppleScript, которая работает на объектах AppleScript, но в приложении можно определить свою собственную версию, которая работает с типами объектов, которые оно определяет.
- Команды сценариумных дополнений это те, которые реализуются через механизм, описанный в «Сценарии дополнений»).
- Определенной пользователем командой является та, которая реализуется с помощью обработчика определеного в script объекте. Для вызова определенной пользователем команды за пределами tell заявления, просто используйте ее имя и укажите значения для всех требуемых параметров. Команда будет использовать текущий сценарий в качестве своей цели.
- Команда приложения определяется сценариумным приложением, чтобы обеспечить доступ к сценариумной функции. Они, как правило, заключены в заявлении tell . Вы можете определить, какие команды приложение поддерживает проверив его словарь в Script Editor.
Приложения с поддержкой скриптов, которые поставляются с OS X, такие как Finder и System Events (находится в /System/Library/CoreServices ), предоставляют множество полезных скриптовых команд.
Есть два способа указать объект в качестве цели команды: путем подачи его в качестве прямого параметра команды (описан в следующем разделе), либо указав его в качестве цели tell заявления, содержащего команду. Если сценарий явно не определяет цель посредством заявления tell , и она не обрабатывается обработчиком в сценарии AppleScript или самой, он отправляется к следующему объекту в цепочке наследования.
В следующем примере, целью команды get является объекта спецификатор name of first window . Поскольку ограждающая tell инструкция определяет приложение Finder, полный спецификатор name of first window of application «Finder» , и это приложение Finder которое получает и возвращает запрошенную информацию.
Когда цель команды приложение, результатом может быть объект приложения. Если это так, последующие заявления, ориентированны на объект из результа, и отправлятся в приложение.
Прямой параметр
Прямым параметром является значение, как правило, объект спецификатор, который появляется сразу после команды и указывает цель команды. Не все команды имеют прямой параметр. Если команда может иметь прямой параметр, его следует отметить в определении команды.
В следующее заявлении, объект спецификатор last file of window 1 of application «Finder» является прямым параметром команды duplicate :
tell заявление определяет цели по умолчанию для всех команд, содержащихся в нем, так что прямой параметр является необязательным. Следующий пример имеет тот же результат, что и предыдущий пример:
Параметры, определяющие расположение
Многие команды имеют параметры, которые определяют положение. Положение может быть или точкой вставки или другим объектом.Точка вставки находится в месте, где объект может быть добавлен.
В следующем примере, параметр to указывает местоположение в которое нужно переместить первый параграф. Значение to параметра команда duplicate относительного спецификатора объекта before paragraph 4 , которое является точкой вставки. AppleScript завершает спецификатор с целью заявления tell , front document of application «TextEdit» .
Фразы paragraph 1 и before paragraph 4 называют индексом и относительными ссылками, соответственно.
AppleScript Обработка ошибок
В ходе выполнения скрипта могут возникать ошибки из-за взаимодействия с OS X, проблемы, возникающие в командах сценариев приложений или проблем, связанных с заявлениями в самом скрипте. При возникновении ошибки, AppleScript останавливает выполнение в текущем местоположении, сигнализирует об ошибке, и смотрит в вызывающей цепочке операторов скрипта, обработчик который может обрабатывать ошибки. То есть, он ищет ближайший блок кода обработки ошибок, который окружает место, где произошла ошибка.
Сценарии могут обрабатывать ошибки, заключив заявления, в которых могут возникнуть ошибки в try заявление. Заявление try включает в себя on error секцию, которая вызывается в случае ошибки. AppleScript передает информацию об ошибках, в том числе номер ошибки и сообщение об ошибке, в on error секцию. Это позволяет изучить скрипту номер ошибки и отображать информацию о ней.
Если происходит ошибка в обработчике, который не предусматривает заявление try , AppleScript ищет ограждающие try заявление, в котором обработчик был вызван. Если ни один из вызовов в цепочке вызовов не содержит в заявлении try , AppleScript останавливает выполнение скрипта и выводит сообщение об ошибке (ошибки, кроме номер -128, описаны ниже).
Сценарий может использовать заявление error , чтобы сигнализировать об ошибке напрямую. Это вызывает ошибку обработки в AppleScript механизме, который ищет ограждающие заявления try для обработки ошибки.
Некоторые «ошибки» являются результатом нормальной работы команды. Например, такие команды, как display dialog и choose file сигнализируют error –128 (Пользователь отменил), если пользователь нажимает кнопку Отмена. Сценарии регулярно обрабатывают пользовательские ошибки отменены для обеспечения нормальной работы. Если никакие заявления try в сценарии не обрабатывают -128 ошибку, AppleScript останавливает выполнение скрипта без отображения сообщения об ошибке.
Глобальные константы в AppleScript
AppleScript определяет ряд глобальных констант, которые можно использовать в любом месте скрипта.
Глобальная константа AppleScript обеспечивает доступ к свойствам, которые вы можете использовать на протяжении всего скриптаы.
В следующих разделах описываются дополнительные свойства AppleScript.
Математическое значение числа пи = 3.14159265359.
result
Когда заявление выполняется, AppleScript сохраняет полученное значение, если таковое имеются, в заранее определенном свойстве result . Значение остается там, пока еще одно заявление не будет выполнено, которое сгенерирует новое значение. До выполнения какого-либо заявления, выдающего результат, значение result не определено. Вы можете просмотреть результат в Script Editor, посмотрев в области Результат рабочего окна скрипта.
Текстовые константы
AppleScript определяет пространство текстовых свойств space, tab, return, linefeed и quote . Вы можете эффективно использовать эти свойства как текстовые константы для представления пробела или двойных кавычек («).
text item delimiters
AppleScript предоставляет свойство text item delimiters для использования в обработке текста. Это свойство состоит из списка строк, используемых в качестве разделителей на AppleScript, когда приводится список к тексту или получает текстовый элемент из текстовых строк. AppleScript в настоящее время использует только первый разделитель из списка.
Поскольку text item delimiters не нарушает considering и ignoring атрибуты в AppleScript 2.0, разделители не чувствительны к регистру по умолчанию. Ранее, они всегда были чувствительны к регистру. Для исполнения предыдущего поведения, добьте явное заявление considering case .
Вы можете получать и устанавливать текущее значение свойства text item delimiters . Как правило, AppleScript не использует разделители. Например, если текстовые разделители не были явно изменены заявлением.
Для печати и отображения целей, как правило, предпочтительно установить text item delimiters , чтобы легче было читать. Например, сценарий
Свойство text item delimiters может быть использовано для извлечения отдельных имен из файлового пути. Например, сценарий
возвратит «Release Notes» .
Сценарии обычно используют обработчик ошибок, чтобы сбросить свойство text item delimiters до его прежнего значения в случае ошибки
version
Это свойство обеспечивает текущую версию AppleScript. Следующий сценарий показывает, как проверить версию большую или равную версии 1.9. Заявление if , завернуто в considering numeric strings , поэтому версия AppleScript, такая как 1.10.6 сравнивается как большее, чем, скажем, версия 1.9.
Приложения могут иметь свои собственные свойства version , так что для доступа к версии AppleScript явно, используют фразу version of AppleScript . Это будет работать внутри tell блока, предназначенного для других приложений, таких как:
current application
Константа current application относится к приложению, в котором выполняется текущий скрипт AppleScript (например, Script Editor). Поскольку текущее приложение является родителем AppleScrip, оно получает возможность обрабатывать команды, которые не обрабатываются текущим сценарием или AppleScript.
Текущее приложение является постоянным объектом спецификатором -если вы спросите AppleScript его значение, то результатом будет объект заказчик:
Однако, если вы просите name of current application , AppleScript устраняет объект спецификатор и возвращает имя текущего приложения:
missing value
Постоянная missing value является заполнителем для отсутствующей или неинициализированной информации.
Например, следующие заявления используют постоянную missing value для определения, является ли переменная измененной:
true, false
AppleScript определяет булевы константы true и false . Эти константы описаны с boolean классе.
Ключевые слова it и me
AppleScript определяет ключевые слова, me чтобы обратиться к текущему сценарию и ключевое слово it для обозначения текущей цели. (Текущим скриптом является тот, который в настоящее время выполняется; текущей целью является объект, который является текущим выбранным по умолчанию для команд.) Он также определяет my в качестве синонима для of me и its в качестве синонима для of it .
Если сценарий не был чей-то целью, it и me остановятся на одном и том же-сценарии, как показано в следующем примере:
Заявление tell определяет цель по умолчанию. В следующем примере, целью по умолчанию является приложение Finder:
Вы можете использовать слова of me или my , чтобы указать, что целью команды является текущий сценарий, а не цель tell заявления. В следующем примере, слово my указывает, что обработчик minimumValue() определяется сценарием, а не Finder:
Вы также можете использовать of me или my , чтобы отличить свойства сценария от свойств объекта. Пусть имеется документ TextEdit открытый с именем «Simple.rtf»:
В следующем примере показано, как задать различные version свойства в Finder tell заявления. Finder устанавливается по умолчанию, но с использованием version of me , my version или version of AppleScript позволяет указать версию объекта сценария верхнего уровня. (Объект сценария верхнего уровня возвращает версию AppleScript, потому что он наследуется от AppleScript).
Псевдонимы и файлы
Для ссылки на пункты и места в файловой системе OS X, вы используете alias объекты и file объекты.
Объект alias является динамической ссылкой на существующий объект файловой системы. Так как он динамический, он может поддерживать связь с назначенным объектом файловой системы, даже если этот объект будет перемещен или переименован.
Объект file представляет определенный файл в определенном месте файловой системы. Это может относиться к пункту, который в настоящее время не существует, такому как имя и расположение файла, который должен быть создан. Объект file не является динамическим, и всегда ссылается на одно и то же место, даже если другой элемент перемещен в это место. POSIX file псевдо-класс грубый синоним файла: POSIX file оценивает спецификатор объекта file , но они используют различные семантики имени.
Ниже приводится рекомендуемое использование для этих типов:
- Используйте alias объект, чтобы обратиться к существующим объектам файловой системы.
- Используйте объект file для ссылки на файл, который еще не существует.
- Используйте спецификатор POSIX file , если вы хотите указать файл, используя путь POSIX.
Указание путей
Вы можете создать alias объект и file объект, предоставляя имя спецификатор, где имя, это путь к элементу в файловой системе.
Для alias и file спецификаторов, путь это HFS путь, который принимает форму «disk:item:subitem:subsubitem. item» . Например: «Hard_Disk:Applications:Mail.app» , является HFS путем к почтовому приложению, предполагая, загрузочный диск названный «Hard_Disk» .
HFS путь с ведущими двоеточиями, такими как «:folder:file» , определяются относительно HFS рабочего каталога. Однако их использование не рекомендуется, потому что расположение рабочего каталога HFS не задано, и нет никакого способа, управлять им с помощью AppleScript.
Для файлов POSIX спецификаторов, путь это путь POSIX, который принимает форму «/item/subitem/subsubitem/. /item» . Имя диска не требуется для загрузочного диска. Так, например, «/Applications/Mail.app» это POSIX путь к приложению почты. Вы можете увидеть POSIX путь в Finder в поле «Где» его окна свойств. Несмотря на название, POSIX файл спецификатор может относиться к папкам или дискам. Использование «
«, чтобы указать домашний каталог не поддерживается.
POSIX пути без косой черты, такие, как «folder/file» , определяются относительно рабочего каталога POSIX. Это поддерживается, но полезно только для сценариев выполняемых из командной строки,- рабочий каталог текущая директория в оболочке. Расположение рабочего каталога POSIX для приложений, не определено.
Работа с псевдонимами
AppleScript определяет класс alias для представления псевдонимов. alias может быть сохранен в переменной и использоваться во всем сценарии.
Следующий сценарий сначала создает псевдоним для существующего файла в переменной notesAlias , а затем использует переменную в tell заявлении, которое открывает этот файл. Он использует try заявление для проверки существования псевдонима, прежде чем создавать его, так что псевдоним создается только один раз, даже если скрипт запускается повторно.
Как только вы запустите предыдущий пример создастся псевдоним, и сценарий сможет найти исходный файл, когда вы запустите его снова, даже если имя файла или место измененятся. (Однако, если вы запустите скрипт снова после перекомпиляции, это приведет к созданию нового псевдонима.)
Вы можете получить HFS путь из псевдонима путем приведения его к тексту:
Вы можете использовать свойство POSIX path для получения пути в POSIX-стиле к элементу на который ссылается псевдоним:
Если псевдоним не относится к существующему объекту файловой системы, то он сломан. Вы не можете создать псевдоним на объект, который не существует, например, файл, который вы планируете создать. Для этого вам нужно использовать объект file , описанный в следующем разделе.
Работа с файлами
AppleScript использует объект file для представления файлов в скриптах. Объект file может быть сохранен в переменной и использоваться в сценариях. Следующий сценарий сначала создает объект file для существующего файла в переменной notesFile , а затем использует переменную в заявлении tell , которое открывает файл:
Вы можете использовать объект file , чтобы указать имя и расположение файла, который может не существовать:
Точно так же вы можете позволить пользователю указать новый файл командой choose file name , а затем использовать полученный объект file для создания файла. В следующем примере, если пользователь отменяет диалог choose file name , остальной сценарий не выполняется. Если пользователь действительно предоставляет имя файла, сценарий открывает файл, создавая его, если это необходимо, а затем использует заявление try , чтобы убедиться, что он закрывает файл, когда закончил писать в него.
Удаленные приложения
Сценарий может предназначаться для приложения на удаленном компьютере, если удаленные приложения включены на этом компьютере, и если сценарий задает компьютер в стиле eppc спецификатора.
Включение удаленного приложения
Чтобы сценарий мог посылать команды удаленному приложению, должны быть удовлетворены следующие условия:
- Компьютер, который содержит приложение и компьютер, на котором запускается сценарий должны быть соединены друг с другом через сеть.
- Удаленные события Apple, (устанавливаются в панели Системных настроек в разделе Общий доступ) должны быть включены (вы можете разрешить доступ для всех пользователей или для определенных пользователей).
- Если удаленное приложение не работает, вы должны запустить его.
- Вы должны аутентифицироваться в качестве администратора,при компиляции или запуске сценария.
eppc-стиль спецификаторов
Спецификатор в eppc стиле имеет следующий формат:
Ниже приведены примеры правильных спецификаторов в eppc стиле. Если указать имя пользователя и пароль, проверка подлинности не требуется. Если вы их не предоставляете, может потребоваться аутентификация.
Таргетинг удаленного приложения
Можно настроить таргетинг для приложения, которое выполняется на удаленном компьютере, и вы можете запускать приложения на удаленных машинах, которые в данный момент не запущены.
В следующем примере используются спецификатор в eppc стиле c целью Finder на удаленном компьютере. Он включает в себя имя пользователя и пароль, так что проверка подлинности не требуется.
В некоторых случаях, вы должны будете использовать заявление using terms from , чтобы сказать AppleScript при компиляции об отношении локальной версии приложения. Следующий пример использует такой метод, говоря удаленному приложению Finder, открыть приложение TextEdit:
Если опустить пароль ( pwd ) в предыдущем сценарии, вы будете иметь запрос на аутентификацию при запуске сценария.
Отладка сценариев AppleScript
AppleScript не включает в себя встроенный отладчик, но он дает несколько простых механизмов для отладки сценариев или простошо наблюддения, за тем, как они работают.
Обратная связь от ваших сценариев
Вы можете вставлять различные заявления в сценарий, чтобы указать текущее местоположение и другую информацию. В простейшем случае, вы можете вставить команду звукового сигнала интересующем Вас месте:
Команда display dialog может отображать информацию о происходящем в сценарии, и, как точки останова, она останавливает выполнение, пока вы не закроете (или до истечения времени, в зависимости от передаваемых параметров). Следующий пример отображает текущее местоположение сценария и значение переменной:
Команда say может привлечь ваше внимание, говоря заданный текст. В следующем примере, currentClient текстовый объект, который хранит имя клиента:
Логинг
Script Editor может отобразить журнал событий компании Apple, которые отправляются во время выполнения скрипта. В настройках редактора сценариев, вы можете также выбрать, сохранять историю последних результатов или журнал событий.
Кроме того, вы можете вставить операторы log в сценарий. Вывод log показан в окне сценария в панели журнал событий, и в истории окна Журнала событий, если он открыт.
Следующий простой пример записывает текущие слово в repeat with loopVariable (in list) заявление
Ниже показано, как слова появляются в журнале, когда запускается скрипт:
Если вам нужны полнофункциональные возможности отладки, есть мощные, сторонние отладчики AppleScript.
Источник