Основные принципы AppleScript
В этой главе описываются фундаментальные понятия, лежащие в основе терминологии и правил, покрытых остальной частью этого руководства.
Приложение редактора сценариев
Приложение Редактора сценариев расположено в /Applications/Utilities
. Это предоставляет возможность, чтобы отредактировать, скомпилировать, и выполнить сценарии, вывести на экран приложение, пишущее сценарий терминологии и сохранить сценарии во множестве форматов, таких как скомпилированные сценарии, приложения и простой текст.
Редактор сценариев может вывести на экран результат выполнения сценария AppleScript и может вывести на экран журнал событий Apple, отправляющихся во время выполнения сценария. В Предпочтениях Редактора сценариев можно также принять решение сохранить историю недавних результатов или журналов событий.
Редактор сценариев имеет текст, форматирующий предпочтения различных типов текста сценария, таких как ключевые слова языка, комментарии, и т.д. Можно также включить или выключить Ассистент Сценария, инструмент завершения кода, который может предложить и заполнить сценарии условий, как Вы вводите. Кроме того, Редактор сценариев обеспечивает контекстное меню для вставки многих типов шаблонных операторов сценария, таких как условные выражения, комментарии и обработчики ошибок.
Словарь является частью scriptable приложения, указывающего условия сценариев, которые это понимает. Можно выбрать File> Open Dictionary in Script Editor для отображения словаря scriptable приложения или дополнения сценариев на компьютере. Или можно перетащить значок приложения к значку Script Editor для отображения его словаря (если он имеет один).
Для отображения списка, включающего просто scriptable приложения и дополнения сценариев, предоставленные OS X выберите Window> Library. Дважды щелкните по элементу в списке для отображения его словаря. Рисунок 2-1 показывает словарь для приложения Средства поиска в OS X v10.5. Словарь маркируется как «Finder.sdef». Формат sdef, вместе с другими форматами терминологии, описан в “Указании Терминологии Сценариев” в Обзоре AppleScript.
Существуют также сторонние редакторы для AppleScript.
AppleScript и объекты
AppleScript является объектно-ориентированным языком. То, когда Вы пишете, скомпилируйте и выполните сценарии, все, с чем Вы работаете, является объектом. Объект является инстанцированием определения класса, которое может включать свойства и действия. AppleScript определяет классы для объектов, Вы обычно работаете с, начиная с верхнего уровня script
объект, который является полным сценарием, в котором Вы работаете.
В в a script
объект, Вы работаете с другими объектами, включая:
Объекты AppleScript:
AppleScript определяет классы для булевых значений, сценариев, текста, чисел и других видов объектов для работы в сценариях; для полного списка посмотрите Ссылку класса.
Объекты OS X:
Части Scriptable OS X и приложений, распределенных с ним, таких как Средство поиска, Системные события и События Базы данных (расположенный в
/System/Library/CoreServices
), определите много полезных классов.Объекты приложения:
Сторонние scriptable приложения определяют классы, поддерживающие большое разнообразие функций.
Следующие разделы обеспечивают больше подробности об объектах:
Что находится в объекте сценария
При вводе операторов AppleScript в окно сценария в Редакторе сценариев Вы работаете на верхнем уровне script
объект. Все script
определения объектов следуют за тем же синтаксисом, за исключением того, что верхний уровень script
объект не имеет операторов, отмечающих его начало и конец.
A script
объект может содержать следующее:
(Дополнительные) определения свойства:
Свойство является маркированным контейнером, в котором можно сохранить значение.
Явное
run
(дополнительный) обработчик:A
run
обработчик содержит операторы AppleScript, выполняется, когда выполняется сценарий. (Для получения дополнительной информации посмотрите выполненные Обработчики.)Неявное
run
(дополнительный) обработчик:Неявное
run
обработчик состоит из любых операторов за пределами любых содержавших обработчиков илиscript
объекты.Дополнительные (дополнительные) обработчики:
Обработчик является эквивалентом подпрограммы. (Для получения дополнительной информации займитесь Обработчиками.)
Дополнительный
script
(дополнительные) объекты:A
script
объект может содержать вложенныйscript
объекты, каждый из которых определяется точно так же, как верхний уровеньscript
объект, за исключением того, что вложенныйscript
объект заключается в скобки с операторами, отмечающими его начало и конец. (Для получения дополнительной информации посмотрите Объекты сценария.)
Вот пример простого сценария с одним свойством, одним обработчиком, одним вложенным script
объект и неявное run
обработчик с двумя операторами:
property defaultClientName : "Mary Smith" |
on greetClient(nameOfClient) |
display dialog ("Hello " & nameOfClient & "!") |
end greetClient |
script testGreet |
greetClient(defaultClientName) |
end script |
run testGreet --result: "Hello Mary Smith!" |
greetClient("Joe Jones") --result: "Hello Joe Jones!" |
Первый оператор в run
обработчик run testGreet
, который выполняет вложенный script
объект testGreet
. Это script
вызовы объектов обработчик greetClient()
, передача свойства defaultClientName
. Обработчик выводит на экран диалоговое окно, приветствуя клиент по умолчанию, Мэри Смит.
Второй оператор в run
вызовы обработчика greetClient()
непосредственно, передача строки "Joe Jones"
.
Свойства
Свойство объекта является характеристикой, имеющей единственное значение и метку, такой как name
свойство окна или month
свойство даты. Определение для любого класса AppleScript включает имя и класс для каждого из его свойств. Имена свойства должны быть уникальными в классе. Значения свойств могут быть чтением-записью или только для чтения.
AppleScript date
класс, например, определяет и чтение-запись и свойства только для чтения. Они включают weekday
свойство, которое только для чтения, и month
, day
, и year
свойства, которые являются чтением-записью. Поэтому значение weekday
свойство зависит от других свойств — Вы не можете установить произвольный рабочий день для фактической даты.
Класс свойства может быть простым классом такой как boolean
или integer
, составной класс, такой как a point
класс (составленный из двух целых чисел) или более сложный класс.
Большинство классов только поддерживает предопределенные свойства. Однако для script
класс, AppleScript позволяет Вам для определения дополнительных свойств. Для получения информации о том, как сделать это, посмотрите Свойства Определения. Можно также определить свойства для record
объекты.
Элементы
Элемент является объектом, содержавшим в другом объекте. Определение для любого класса AppleScript включает типы элемента, которые это может содержать. Объект может обычно содержать нуль или больше каждый из его элементов.
Для данного типа элемента объект может содержать много элементов или ни один, и число элементов, которое он содержит, может изменяться в течение долгого времени. Например, это возможно для a list
объект не содержать элементы (это может быть пустой список). В более позднее время тот же список мог бы содержать много элементов.
Можно ли добавить элементы к или удалить элементы из объекта, зависит от класса и элемента. Например, a text
объект является неизменным — Вы не можете добавить или удалить текст, как только создается объект. Для a list
объект, Вы не можете удалить элементы, но можно использовать set
команда для добавления элемента к началу или концу:
set myList to {1, "what", 3} --result: {1, "what", 3} |
set beginning of myList to 0 |
set end of myList to "four" |
myList --result: {0, 1, "what", 3, "four"} |
Объектные спецификаторы
Объектный спецификатор указывает, что информация должна была найти другой объект с точки зрения объектов, в которых это содержится. Объектный спецификатор может относиться к объекту приложения, такому как окно или файл, или к объекту AppleScript, такому как элемент в списке или свойство в записи.
Объектный спецификатор полностью оценен (или разрешен), только, когда сценарий выполняется, не, когда это компилируется. Сценарий может содержать спецификатор доступного объекта (такой как third document of application "TextEdit"
это вызывает ошибку, когда сценарий выполняется (потому что, например, может быть меньше чем три открытые документа).
Спецификаторы обычно эхо-сигнала приложений в ответ на команды. Например, если Вы просите у Средства поиска окно, оно возвращает информацию, указывающую объект окна Ваш сценарий, который попросили относительно (если оно существует). Контейнер верхнего уровня в объектном спецификаторе обычно является самим приложением.
Вы создаете объектный спецификатор каждый раз, когда Ваш сценарий использует фразу, описывающую путь к объекту или свойству, такой как name of window 1 of application "Finder"
. Когда Вы используете a reference to
оператор, это создает a reference
возразите, что обертывает объектный спецификатор.
Различие между объектным спецификатором и объектом, к которому это относится, походит на различие между адресом здания и самим зданием. Адрес является серией слов и чисел, таких как “2 121 Оук-Стрит, Сан-Франциско, Калифорния”, идентифицирующая расположение (на улице, в городе, в состоянии). Это отлично от самого здания. Если здание в том расположении разъединяется и заменяется новым зданием, адрес остается тем же.
Что находится в объектном спецификаторе
Объектный спецификатор описывает тип объекта, расположение, и как отличить объект от других объектов того же типа в том расположении. Эти три типа информации — тип или класс; расположение или контейнер; и различающая информация или ссылочная форма — позволяет Вам указывать любой объект.
В следующем примере класс объекта paragraph
. Контейнер является фразой of document 1
. Поскольку эта фраза внутри a tell
оператор, tell
оператор обеспечивает контейнер верхнего уровня, of application "TextEdit"
. Различающей информацией (ссылочная форма) является комбинация класса, paragraph
, и индексное значение, 1
, которые вместе указывают первый абзац.
tell application "TextEdit" |
paragraph 1 of document 1 |
end tell |
В дополнение к форме ссылки на указатель можно указать объекты в контейнере по имени, диапазоном, ID, и другими формами, описанными в Ссылочных Формах.
Контейнеры
Контейнер является объектом, содержащим один или несколько объектов или свойства. В объектном спецификаторе контейнер указывает, где найти объект или свойство. Для указания контейнера используйте слово of
или in
, как в следующем утверждении (от Средства поиска tell
блок):
folder "Applications" of startup disk |
Контейнер может быть объектом или серией объектов, перечисленных от самого внутреннего до наиболее удаленного, содержащего объект, как в следующем:
tell application "Finder" |
first item of first folder of first disk |
end tell |
Можно также использовать притяжательную форму ('s
) указать контейнеры. В следующем примере самый внутренний контейнер first window
и объект, который это содержит, является a name
свойство:
tell application "TextEdit" |
first window's name |
end tell |
В этом примере, цели tell
оператор ("TextEdit"
) внешний контейнер для объектного спецификатора.
Абсолютные и относительные объектные спецификаторы
Абсолютный объектный спецификатор имеет достаточно информации для идентификации объекта или объектов уникально. Это может использоваться однозначно где угодно в сценарии. Для ссылки на объект приложения для абсолюта его наиболее удаленный контейнер должен быть самим приложением, как в:
version of application "Finder" --result: "10.5.1" |
Напротив, относительный объектный спецификатор не указывает достаточно информации для идентификации объекта или объектов уникально; например:
name of item 1 of disk 2 |
Когда AppleScript встречается с относительным объектным спецификатором в a tell
оператор, это пытается использовать цель по умолчанию, указанную оператором для завершения объектного спецификатора. Хотя это не обычно необходимо, эта неявная цель может быть указана явно с помощью ключевого слова it
, который описан в этом и мне Ключевые слова.
Цель по умолчанию a tell
оператор является объектом, получающим команды, если не указан никакой другой объект. Например, следующий tell
оператор говорит Средству поиска получать имя с помощью предыдущего относительного объектного спецификатора.
tell application "Finder" |
name of item 1 of disk 2 |
end tell |
Когда AppleScript встречается с относительным объектным спецификатором вне любого tell
оператор, это пытается завершить объектный спецификатор путем поиска цепочки наследования, описанной в Наследовании в Объектах сценария.
Объектные спецификаторы в ссылочных объектах
Когда можно создать a reference
объект с a reference to
оператор, это содержит объектный спецификатор. Например:
tell application "TextEdit" |
set docRef to a reference to the first document |
--result: document 1 of application "TextEdit" |
-- an object specifier |
name of docRef --result: "New Report.rtf" |
-- name of the specified object |
end tell |
В этом сценарии, переменной docRef
ссылка, объектный спецификатор которой отсылает к первому документу приложения TextEdit — который, оказывается, называют “Новым Report.rtf” в этом случае. Однако объект это docRef
относится к, может измениться. При открытии второго документа TextEdit, вызванного “Второй Report.rtf” так, чтобы его окно было перед предыдущим документом, то выполненный этот сценарий снова, это возвратит имя теперь-frontmost документ, “Второй Report.rtf”.
Вы могли вместо этого создать ссылку со спецификатором более конкретного объекта:
tell application "TextEdit" |
set docRef to a reference to document "New Report.rtf" |
--result: document "New Report.rtf" of application "TextEdit" |
name of docRef --result: "New Report.rtf" |
end tell |
При выполнении этого сценария после открытия второго документа это все еще возвратит имя оригинала документа, “Новый Report.rtf”, если будет существовать документ.
После создания a reference
объект с a reference to
оператор, можно использовать contents
свойство для получения значения объекта, к которому это относится. Т.е. использование contents
свойство заставляет объектный спецификатор ссылки быть оцененным. В следующем сценарии, например, содержании переменной myWindow
сама ссылка окна.
set myWindow to a ref to window "Q1.rtf" of application "TextEdit" |
myWindow |
-- result: window "Q1.rtf" of application "TextEdit" (object specifier) |
contents of myWindow |
--result: window id 283 of application "TextEdit" (an evaluated window) |
get myWindow |
-- result: window "Q1.rtf" of application "TextEdit" (object specifier) |
Обратите внимание на то, что результат get
команда должна возвратить объектный спецификатор ссылки, для не разрешения спецификатора к объекту, который это указывает.
Когда это может, AppleScript неявно разыменовать ссылочный объект (без использования contents
свойство), как в следующем примере:
set myWindow to a ref to window 1 of application "TextEdit" |
name of myWindow --result: "Q1.rtf" (if that is the first window's name) |
Для соответствующей информации посмотрите раздел Discussion для reference
класс.
Приведение (преобразование объекта)
Приведение (также известный как преобразование объекта) является процессом преобразования объектов от одного класса до другого. AppleScript преобразовывает объект в различный класс при любом из этих обстоятельств:
автоматически, когда объект имеет различный класс, чем ожидалось для определенной команды или работы
Не все классы могут быть принуждены ко всем другим типам классов. Таблица 2-1 суммирует приведения, которые AppleScript поддерживает для обычно используемых классов. Для получения дополнительной информации о каждом приведении, посмотрите соответствующее определение класса в Ссылке класса.
AppleScript обеспечивает много приведений, или как встроенная часть языка или посредством Стандартных Дополнений, пишущих сценарий дополнения. Можно использовать эти приведения за пределами a tell
блокируйте в своем сценарии. Однако приведение типов класса приложений может зависеть от приложения и потребовать a tell
блок, предназначающийся для приложения.
as
оператор указывает определенное приведение. Например, следующее утверждение принуждает целое число 2
в текст "2"
прежде, чем сохранить его в переменной myText
:
set myText to 2 as text |
При обеспечении параметра команды или операнда неправильного класса AppleScript автоматически принуждает операнд или параметр к ожидаемому классу, если это возможно. Если преобразование не может быть выполнено, AppleScript сообщает об ошибке.
При принуждении text
строки к значениям класса integer
, number
, или real
, или наоборот, AppleScript использует текущие настройки Numbers в области Formats в Международных предпочтениях для определения что разделители использовать в строке. При принуждении строк к значениям класса date
или наоборот, AppleScript использует настройки текущих дат в области Formats.
Преобразуйте из класса | К классу | Примечания |
---|---|---|
| ||
| Это - и класс AppleScript и класс приложений. | |
| ||
| ||
| ||
| ||
| ||
| Принуждение | |
| любой класс, к которому может быть принужден элемент, если это не часть списка | |
|
| |
| Значения, идентифицированные как значения класса | |
посмотрите |
| |
| В принуждении к Принуждение a | |
| Все метки потеряны в приведении, и получающийся список не может быть принужден назад к записи. | |
любой класс, к которому может быть принужден ссылочный объект | ||
| ||
| Может принудить к | |
| Может принудить между типами модуля в той же категории, такой как |
Сценарии дополнений
Дополнение сценариев является файлом, или свяжитесь, который обеспечивает обработчики, которые можно использовать в сценариях для выполнения команд и приведений.
Многие команды, описанные в этом руководстве, определяются в Стандартных Дополнениях, пишущих сценарий дополнения в OS X. Эти команды сохранены в файле StandardAdditions.osax
в /System/Library/ScriptingAdditions
, и доступны любому сценарию. Можно исследовать терминологию на Стандартные Дополнения путем открытия этого файла в Редакторе сценариев.
Сценарии дополнений могут быть встроены в связанных апплетах сценария путем размещения их в названной папке Scripting Additions
(отметьте пространство между «Сценариями» и «Дополнениями») в пакете’ s Contents/Resources/
папка. Обратите внимание на то, что Редактор сценариев не ищет встроенные дополнения сценариев при редактировании связанных апплетов. Во время разработки сценариев любой требуемые сценарии дополнений должны быть должным образом установлены в /System/ScriptingAdditions
, /Library/ScriptingAdditions
, или ~/Library/ScriptingAdditions
так, чтобы Редактор сценариев мог найти их.
Разработчики могут создать свои собственные дополнения сценариев, как описано в Техническом примечании TN1164, Пишущий сценарий Дополнений для Mac OS X. Дополнительные сведения см. в Обзоре AppleScript, особенно раздел «Extending AppleScript with Coercions, Scripting Additions, and Faceless Background Applications» в главе Открывает Scripting Architecture.
Обзор команд
Команда является словом или серией слов, используемых в операторах AppleScript для запроса действия. Каждая команда направлена на цель, которая является объектом, реагирующим на команду. Цель часто является объектом приложения (тот, который сохранен в приложении или его документах и управляется приложением, таким как окно или документ), или объект в OS X. Однако это может также быть a script
возразите или значение в текущем сценарии.
Команды часто возвращают результаты. Например, display dialog
команда возвращает запись, которая может содержать текст, имя кнопки и другую информацию. Ваш сценарий может исследовать эту запись для определения, что сделать затем. Можно присвоить результат команды к переменной, которую Вы определяете или получаете доступ к нему через предопределенный AppleScript result
переменная.
Типы команд
Сценарии могут использовать следующие виды команд:
Команда AppleScript является той, встроенной в язык AppleScript. В настоящее время существует пять таких команд:
get
,set
,count
,copy
, иrun
. За исключениемcopy
, каждая из этих команд может также быть реализована приложениями. Т.е. существует версия AppleScript команды, работающей над объектами AppleScript, но приложение может определить свою собственную версию, работающую над типами объектов, которые это определяет.Дополнительная команда сценариев является той, реализованной через механизм, описанный в Сценариях Дополнений). Несмотря на то, что любой может создать дополнение сценариев (см. Техническое примечание TN1164, Пишущий сценарий Дополнений для Mac OS X), это руководство документы только дополнительные команды сценариев от Стандартных Дополнений, предоставленных Apple как часть OS X. Эти команды доступны всем сценариям.
Определяемая пользователем команда является той, реализованной обработчиком, определенным в a
script
объект. Вызвать определяемую пользователем команду за пределами atell
оператор, просто используйте его имя и предоставьте значения для любых параметров, которых он требует. Команда будет использовать текущий сценарий в качестве своей цели.Вызвать определяемую пользователем команду внутри a
tell
оператор, посмотрите Призывающий Обработчики сказать Оператор.Команда приложения является той, определяющейся scriptable приложением для обеспечения доступа к scriptable функции. Они обычно включаются в a
tell
оператор, предназначающийся для приложения. Можно определить, который управляет поддержкой приложений путем исследования его словаря в Редакторе сценариев.Приложения Scriptable, поставляющие с OS X, таким как Средство поиска и приложения Системных событий (расположенный в
/System/Library/CoreServices
), обеспечьте много полезных команд сценариев.Сторонние scriptable приложения также обеспечивают команды, которые можно использовать в сценариях. Многие поддерживают все или подмножество команд Standard, описанных в Техническом примечании TN2106, Пишущий сценарий Интерфейсных Инструкций. Они включают команды такой как
delete
,duplicate
,exists
, иmove
, а также внедрения приложения команд AppleScript, такой какget
иset
.
Target
Существует два способа явно указать объект как цель команды: путем предоставления его как прямого параметра команды (описанный в следующем разделе) или путем указания его как цель a tell
оператор, содержащий команду. Если сценарий явно не указывает цель с a tell
оператор, и это не обрабатывается обработчиком в сценарии или самим AppleScript, это отправляется в следующий объект в цепочке наследования (см. Цепочку Наследования AppleScript).
В следующем сценарии, цели get
команда является объектным спецификатором name of first window
. Поскольку включение tell
оператор указывает приложение Средства поиска, полный спецификатор name of first window of application "Finder"
, и это - приложение Средства поиска, получающее и возвращающее запрошенную информацию.
tell application "Finder" |
get name of first window |
end tell |
Когда команда предназначается для приложения, результатом может быть объект приложения. Если так, последующие операторы, предназначающиеся для объекта результата, отправляются в приложение.
Сценарий может также неявно указать цель при помощи команды приложения, импортированной с помощью a use
оператор. Например, extract address
команда в следующем сценарии предназначается для Почтового приложения, потому что команда была импортирована из Почты:
use application "Mail" |
extract address from "John Doe <jdoe@example.com>" |
Прямой параметр
Прямой параметр является значением, обычно объектный спецификатор, сразу появляющийся рядом с командой и указывающий цель команды. Не все команды имеют прямой параметр. Если команда может иметь прямой параметр, она отмечена в определении команды.
В следующем утверждении, объектном спецификаторе last file of window 1 of application "Finder"
прямой параметр duplicate
команда:
duplicate last file of window 1 of application "Finder" |
Прямой параметр обычно сразу появляется после команды, но может также сразу появиться перед нею. Это может быть проще считать для некоторых команд, такой как exists
в этом примере:
if file "semaphore" of application "Finder" exists then |
-- continue processing... |
end if |
A tell
оператор указывает цель по умолчанию для всех команд, содержавших в нем, таким образом, прямой параметр является дополнительным. Следующий пример имеет тот же результат как предыдущий пример:
tell last file of window 1 of application "Finder" |
duplicate |
end tell |
Параметры, указывающие расположения
Много команд имеют параметры, указывающие расположения. Расположение может быть или точкой вставки или другим объектом. Точка вставки является расположением, где может быть добавлен объект.
В следующем примере, to
параметр указывает расположение, в которое можно переместить первый абзац. Значение to
параметр duplicate
команда является относительным объектным спецификатором before paragraph 4
, который является точкой вставки. AppleScript завершает спецификатор с целью tell
оператор, front document of application "TextEdit"
.
tell front document of application "TextEdit" |
duplicate paragraph 1 to before paragraph 4 |
end tell |
Фразы paragraph 1
и before paragraph 4
индекс вызываемого абонента и относительные ссылки, соответственно. Для получения дополнительной информации посмотрите Ссылочные Формы.
Обработка ошибок AppleScript
Во время выполнения сценария ошибки могут произойти вследствие взаимодействия с OS X, проблемы, с которыми встречаются в команде сценария приложений или проблемах, вызванных операторами в самом сценарии. Когда ошибка происходит, выполнение остановок AppleScript в текущем расположении, сигнализирует ошибку и ищет цепочку вызова для операторов сценария, которые могут обработать ошибку. Т.е. это ищет самый близкий блок кода обработки ошибок, окружающий расположение, где произошла ошибка.
Сценарии могут обработать ошибки путем включения операторов, которые могут встретиться с ошибкой в a try
оператор. try
оператор включает on error
раздел, вызывающийся, если происходит ошибка. AppleScript передает информацию об ошибке, включая код ошибки и сообщение об ошибке, к on error
раздел. Это позволяет сценариям исследовать код ошибки и отображать информацию об этом.
Если ошибка происходит в обработчике, не обеспечивающем a try
оператор, AppleScript ищет включение try
оператор, где был вызван обработчик. Если ни один из вызовов в цепочке вызовов не содержится в a try
оператор, AppleScript останавливает выполнение сценария и выводит на экран сообщение об ошибке (для любого кода ошибки кроме-128, описанный ниже).
Сценарий может использовать error
оператор для сигнализации ошибки непосредственно. Выполнение так вызывает механизм обработки ошибок AppleScript, ищущий включение try
оператор для обработки ошибки.
Некоторые «ошибки» являются результатом нормального функционирования команды. Например, команды такой как display dialog
и choose file
сигнал error –128
(Пользователь отменил), если пользователь щелкает по Кнопке отмены. Сценарии обычно обрабатывают отмененную ошибку пользователя гарантировать нормальное функционирование. Для примера того, как сделать это, посмотрите раздел Examples для display dialog
команда. Если нет try
оператор в сценарии обрабатывает-128 ошибок, выполнение остановов AppleScript сценария, не выводя на экран сообщения об ошибке.
Для соответствующей информации посмотрите Результаты, ошибочные Операторы, попробуйте Операторы, Коды ошибки и сообщения об ошибках, и Работающий с Ошибками.
Глобальные константы в AppleScript
AppleScript определяет много глобальных констант, которые можно использовать где угодно в сценарии.
Постоянный AppleScript
Глобальная константа AppleScript
обеспечивает доступ к свойствам, которые можно использовать всюду по сценариям.
Можно использовать AppleScript
сам идентификатор для различения свойства AppleScript от свойства текущей цели с тем же именем, как показано в версии раздела.
Следующие разделы описывают дополнительные свойства AppleScript
.
пи
Это mathematical
значение представляет отношение окружности круга к ее диаметру. Это определяется как вещественное число со значением 3.14159265359.
Например, следующее утверждение вычисляет область круга с радиусом 7:
set circleArea to pi * 7 * 7 --result: 153.9380400259 |
результат
Когда оператор выполняется, AppleScript хранит получающееся значение, если таковые имеются, в предопределенном свойстве result
. Значение остается там, пока другой оператор не выполняется, который генерирует значение. Пока оператор, приводящий к результату, не выполняется, значение result
не определено. Можно исследовать результат в Редакторе сценариев путем взгляда в области Result окна сценария.
Текстовые константы
AppleScript определяет текстовые свойства space
, tab
, return
, linefeed
, и quote
. Вы эффективно используете эти свойства в качестве текстовых констант для представления пробела или двойной кавычки ("
) символ. Они описаны в разделе Special String Characters text
класс.
текстовые разделители элемента
AppleScript обеспечивает text item delimiters
свойство для использования в обработке текста. Это свойство состоит из списка строк, используемых в качестве разделителей AppleScript, когда это принуждает список к тексту или получает текстовые элементы от текстовых строк. При получении text items
из текста все строки используются в качестве разделителей. При принуждении списка к тексту первый элемент используется в качестве разделителя.
Поскольку text item delimiters
уважение considering
и ignoring
атрибуты в AppleScript 2.0, разделители нечувствительны к регистру по умолчанию. Раньше, они были всегда чувствительны к регистру. Для осуществления предыдущего поведения добавьте явное considering case
оператор.
Можно получить и установить текущую стоимость text item delimiters
свойство. Обычно, AppleScript не использует разделителей. Например, если текстовые разделители не были явно изменены, оператор
{"bread", "milk", "butter", 10.45} as string |
возвращает следующее:
"breadmilkbutter10.45" |
Для печати или целей дисплея, обычно предпочтительно установить text item delimiters
к чему-то это проще считать. Например, сценарий
set AppleScript's text item delimiters to {", "} |
{"bread", "milk", "butter", 10.45} as string |
возвраты этот результат:
"bread, milk, butter, 10.45" |
text item delimiters
свойство может использоваться для извлечения отдельных имен из пути. Например, сценарий
set AppleScript's text item delimiters to {":"} |
get last text item of "Hard Disk:CD Contents:Release Notes" |
возвращает результат "Release Notes"
.
Если Вы изменяетесь text item delimiters
свойство в Редакторе сценариев, это остается измененным, пока Вы не восстанавливаете его предыдущее значение или пока Вы не выходите из Редактора сценариев и запускаете его снова. Если Вы изменяетесь text item delimiters
в приложении сценария это остается измененным в том приложении, пока Вы не восстанавливаете его предыдущее значение или до выходов приложения сценария; однако, разделители не изменяются в Редакторе сценариев или в других приложениях сценария, которые Вы запускаете.
Сценарии обычно используют обработчик ошибок для сброса text item delimiters
свойство к его прежнему значению, если ошибка происходит (для больше при контакте с ошибками, посмотрите Обработку ошибок AppleScript):
set savedDelimiters to AppleScript's text item delimiters |
try |
set AppleScript's text item delimiters to {"**"} |
--other script statements... |
--now reset the text item delimiters: |
set AppleScript's text item delimiters to savedDelimiters |
on error m number n |
--also reset text item delimiters in case of an error: |
set AppleScript's text item delimiters to savedDelimiters |
--and resignal the error: |
error m number n |
end try |
версия
Это свойство обеспечивает текущую версию AppleScript. Следующий сценарий показывает, как проверить на версию, больше, чем или равный версии 1.9. if
оператор обертывается в a considering numeric strings
оператор так, чтобы версия AppleScript такой как 1.10.6
выдерживает сравнение как больше, чем, скажем, версия 1.9
.
considering numeric strings |
if version of AppleScript as string ≥ "1.9" then |
-- Perform operations that depend on version 1.9 or greater |
else |
-- Handle case where version is not high enough |
end if |
end considering |
Приложения могут иметь свое собственное version
свойство, так для доступа к версии AppleScript явно Вы используете фразу version of AppleScript
. Это будет работать внутри a tell
блок, предназначающийся для другого приложения, такого как следующее:
tell application "Finder" |
version --result: "10.5.1" |
version of AppleScript --result: "2.0" |
end tell |
текущее приложение Констант
current application
постоянный обращается к приложению, выполняющему текущий сценарий AppleScript (например, Редактор сценариев). Поскольку текущее приложение является родителем AppleScript (см. Цепочку Наследования AppleScript), это получает шанс обработать команды, не обрабатывающиеся текущим сценарием или AppleScript.
current application
постоянный объектный спецификатор — если Вы просите у AppleScript его значение, результатом является объектный спецификатор:
get current application --result: current application |
Однако, если Вы просите name of current application
, AppleScript разрешает объектный спецификатор и возвращает имя текущего приложения:
name of current application --result: "Script Editor" |
отсутствующее значение Констант
missing value
постоянный заполнитель для без вести пропавших или деинициализирует информацию.
Например, следующие утверждения используют missing value
постоянный, чтобы определить, изменилась ли переменная:
set myVariable to missing value |
-- perform operations that might change the value of myVariable |
if myVariable is equal to missing value then |
-- the value of the variable never changed |
else |
-- the value of the variable did change |
end if |
истина, ложные Константы
AppleScript определяет булевы константы true
и false
. Эти константы описаны с boolean
класс.
Это и я Ключевые слова
AppleScript определяет ключевое слово me
обращаться к текущему сценарию и ключевому слову it
относиться к текущей цели. (Текущий сценарий является в настоящее время выполняющимся тем; текущая цель является объектом, который является текущей целью по умолчанию для команд.) Это также определяет my
как синоним для of me
и its
как синоним для of it
.
Если сценарий ни для чего не предназначался, it
и me
обратитесь к той же вещи — сценарию — как показано в следующем примере:
-- At the top-level of the script: |
me --result: «script» (the top-level script object) |
it --result: «script» (same as it, since no target set yet) |
A tell
оператор указывает цель по умолчанию. В следующем примере цель по умолчанию является приложением Средства поиска:
-- Within a tell block: |
tell application "Finder" -- sets target |
me --result: «script» (still the top-level script object) |
it --result: application "Finder" (target of the tell statement) |
end tell |
Можно использовать слова of me
или my
указать, что цель команды является текущим сценарием а не целью tell
оператор. В следующем примере, слове my
указывает это minimumValue()
обработчик определяется сценарием, не Средством поиска:
tell application "Finder" |
set fileCount to count files in front window |
set myCount to my minimumValue(fileCount, 100) |
--do something with up to the first 100 files… |
end tell |
Можно также использовать of me
или my
отличать свойства сценария от свойств объектов. Предположим, что существует документ TextEdit, открытый назван «Simple.rtf»:
tell document 1 of application "TextEdit" |
name --result: "Simple.rtf" (implicitly uses target of tell) |
name of it --result: "Simple.rtf" (specifies target of tell) |
me --result: «script» (top-level script object, not target of tell) |
end tell |
Следующий пример показывает, как указать отличающийся version
свойства в Средстве поиска tell
оператор. Средство поиска является целью по умолчанию, но использованием version of me
, my version
, или version of AppleScript
позволяет Вам указывать версию верхнего уровня script
объект. (Верхний уровень script
возразите возвращает версию AppleScript, потому что она наследовалась от AppleScript, как описано в Цепочке Наследования AppleScript.)
tell application "Finder" |
version --result: "10.5.1" (Finder version is the default in tell block) |
its version --result: "10.5.1" (specifically asks for Finder version) |
version of me --result: "2.0" (AppleScript version) |
my version --result: "2.0" (AppleScript version) |
version of AppleScript --result: "2.0" (AppleScript version) |
end tell |
Для получения информации об использовании it
в ссылке фильтра посмотрите раздел Discussion для ссылочной формы Фильтра.
Псевдонимы и файлы
Для обращения к элементам и расположениям в файловой системе OS X Вы используете alias
объекты и file
объекты.
alias
объект является динамической ссылкой на существующий объект файловой системы. Поскольку это динамично, это может поддержать ссылку к своему определяемому объекту файловой системы, даже если тот объект перемещен или переименован.
A file
объект представляет определенный файл в определенном расположении в файловой системе. Это может относиться к элементу, в настоящее время не существующему, такие как название и местоположение для файла, который должен быть создан. A file
даже если различный элемент перемещен в то место, объект не является динамичным, и всегда относится к тому же расположению. POSIX file
псевдокласс примерно синонимичен с файлом: POSIX file
спецификаторы оценивают к a file
объект, но они используют различную семантику для имени, как описано в Указании Путей.
Следующее является рекомендуемым использованием для этих типов:
Используйте
alias
объект относиться к существующим объектам файловой системы.Используйте a
file
объект относиться к еще не существующему файлу.Используйте a
POSIX file
спецификатор, если Вы хотите указать файл с помощью пути POSIX.
Следующие разделы описывают, как указать объекты файловой системы путем и как работать с ними в Ваших сценариях.
Указание путей
Можно создать 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 элемента в Средстве поиска в поле «Where» его окна Get Info. Несмотря на имя, спецификаторы файла POSIX могут относиться к папкам или дискам. Использование "~"
указать корневой каталог не поддерживается.
POSIX соединяет каналом без ведущей наклонной черты, такой как "folder/file"
, разрешены относительно POSIX рабочий каталог. Это поддерживается, но только полезно для сценариев, выполненных от оболочки — рабочий каталог является текущим каталогом в оболочке. Расположение POSIX рабочий каталог для приложений является неуказанным.
Работа с псевдонимами
AppleScript определяет alias
класс для представления псевдонимов. Псевдоним может быть сохранен в переменной и использоваться всюду по сценарию.
Следующий сценарий сначала создает псевдоним к существующему файлу в переменной notesAlias
, тогда использует переменную в a tell
оператор, открывающий файл. Это использует a try
оператор для проверки на существование псевдонима прежде, чем создать его, так, чтобы псевдоним был только создан один раз, даже если сценарий неоднократно выполняется.
try |
notesAlias -- see if we've created the alias yet |
on error |
-- if not, create it in the error branch |
set notesAlias to alias "Hard_Disk:Users:myUser:Feb_Notes.rtf" |
end try |
-- now open the file from the alias: |
tell application "TextEdit" to open notesAlias |
Нахождение объекта, к которому относится псевдоним, вызывают, разрешая псевдоним. AppleScript 2.0 пытается разрешить псевдонимы только при выполнении сценария. Однако в более ранних версиях, AppleScript пытается разрешить псевдонимы во время компиляции.
Как только Вы выполняете предыдущий пример, создавая псевдоним, сценарий будет в состоянии найти исходный файл при выполнении его снова даже если изменяются имя или расположение файла. (Однако при выполнении сценария снова после перекомпиляции его это создаст новый псевдоним.)
Можно получить путь HFS от псевдонима путем принуждения его к тексту:
notesAlias as text --result: "Hard_Disk:Users:myUser:Feb_Notes.rtf" |
Можно использовать POSIX path
свойство для получения пути стиля POSIX к элементу, именуемому псевдонимом:
POSIX path of notesAlias --result: "/Feb_Notes.rtf" |
Если псевдоним не относится к существующему объекту файловой системы тогда, он повреждается. Вы не можете создать псевдоним к объекту, не существующему, такие как файл, который Вы планируете создать. Для этого Вы используете a file
объект, описанный в следующем разделе.
Для демонстрационного сценария, показывающего, как приложение сценария может обработать список псевдонимов, которые оно получает, когда пользователь отбрасывает один или несколько значков файла на нем, посмотрите, открывают Handlers.
Работа с файлами
Использование AppleScript file
объекты представлять файлы в сценариях. A file
объект может храниться в переменной и использоваться всюду по сценарию. Следующий сценарий сначала создает a file
объект для существующего файла в переменной notesFile
, тогда использует переменную в a tell
оператор, открывающий файл:
set notesFile to POSIX file "/Users/myUser/Feb_Meeting_Notes.rtf" |
tell application "TextEdit" to open notesFile |
Можно использовать a file
объект указать название и местоположение для файла, который может не существовать:
set newFile to POSIX file "/Users/myUser/BrandNewFile.rtf" |
Точно так же можно позволить пользователю указать новый файл с choose file name
команда, затем используйте возвращенный file
объект создать файл. В следующем примере, если пользователь отменяет choose file name
диалоговое окно, остальная часть сценария не выполняется. Если пользователь действительно предоставляет имя файла, сценарий открывает файл, создавая его при необходимости, то использование a try
оператор для проверки это закрывает файл, когда это закончено, пишущий в него.
set theFile to choose file name |
set referenceNumber to open for access theFile with write permission |
try |
-- statements to write to the file |
on error |
close access referenceNumber |
end try |
close access referenceNumber |
Как правило, когда Вы передаете a file
возразите против команды, использующей его для работы на новый или существующий элемент в файловой системе, компоненты пути должны существовать для команды для следования.
Удаленные приложения
Сценарий может предназначаться для приложения на удаленном компьютере, если удаленные приложения будут включены на том компьютере, и если сценарий указывает компьютер со спецификатором eppc-стиля.
Включение удаленных приложений
Для сценария для отправки команд в удаленное приложение должны быть удовлетворены следующие условия:
Компьютер, содержащий приложение и компьютер, на котором выполняется сценарий, должен быть подключен друг к другу через сеть.
Удаленные События Apple (набор в Совместном использовании предпочтительной области) должны быть включены на удаленном компьютере, и пользовательский доступ должен быть предоставлен (можно предоставить доступ для всех пользователей или только для указанных пользователей).
Если указанное удаленное приложение не работает, необходимо выполнить его.
Когда Вы компилируете или выполняете сценарий, необходимо аутентифицировать как администратор.
Спецификаторы eppc-стиля
Спецификатор eppc-стиля берет следующий формат:
eppc://[user[:password]@]IP_address |
ip_address
Любой числовой IP-адрес в точечной десятичной форме (четыре числа, от 0 до 255, разделенный периодами; например,
123.23.23.123
) или имя хоста. Имя хоста может быть Добрый день имя.
Следующее является примерами допустимых спецификаторов eppc-стиля. При предоставлении имени пользователя и пароля никакая аутентификация не требуется. Если Вы не предоставляете его, аутентификация может требоваться.
"eppc://myCoolMac.local" -- hostname, no user or pwd |
"eppc://myUserName:pwd@myCoolMac.local" -- user, pwd, and hostname |
"eppc://123.23.23.123" -- IP address, no user or pwd |
"eppc://myUserName:pwd@123.23.23.123" -- user, pwd, and IP address |
"eppc://myUserName@server.company.com" -- server address, user |
Предназначение для удаленных приложений
Можно предназначаться для приложения, работающего на удаленной машине, и можно запустить приложения на в настоящее время не работающих удаленных машинах.
Следующий пример использует спецификатор eppc-стиля для предназначения для Средства поиска на удаленном компьютере. Это включает имя пользователя и пароль, таким образом, не требуется никакая аутентификация.
set remoteMachine to "eppc://userName:pwd@MacName.local" |
tell app "Finder" of machine remoteMachine to close front window |
В некоторых случаях необходимо будет использовать a using terms from
оператор, чтобы сказать AppleScript компилировать против локальной версии приложения. Следующий пример использует тот метод в сообщении удаленного приложения Средства поиска открыть приложение TextEdit:
set remoteFinder to application "Finder" of machine ¬ |
"eppc://myUserName:pwd@123.23.23.123" |
using terms from application "Finder" |
tell remoteFinder |
open application file id "com.apple.TextEdit" |
end tell |
end using terms from |
Если Вы опускаете пароль (pwd
) в предыдущем сценарии необходимо будет аутентифицировать при выполнении сценария.
Отладка сценариев AppleScript
AppleScript не включает встроенный отладчик, но он действительно обеспечивает несколько простых механизмов, чтобы помочь Вам отладить свои сценарии или просто наблюдать, как они работают.
Обратная связь от Вашего сценария
Можно вставить различные операторы в сценарий для указания текущего расположения и другой информации. В самом простом случае можно вставить команду звукового сигнала в расположение интереса:
beep 3 -- three beeps; a very important part of the script! |
A display dialog
команда может вывести на экран информацию о том, что происходит в сценарии и, как точка останова, это останавливает выполнение, пока Вы не отклоняете его (или пока это не испытывает таймаут, в зависимости от параметров, которые Вы передаете). Следующий пример выводит на экран текущее расположение сценария и значение переменной:
display dialog "In factorial routine; x = " & (x as string) |
say
команда может привлечь Ваше внимание путем разговора указанного текста. В следующем примере, currentClient
a text
возразите, что хранит имя клиента:
say "I'm in the clientName handler. The client is " & currentClient |
Журналирование
Редактор сценариев может вывести на экран журнал событий Apple, отправляющихся во время выполнения сценария. В Предпочтениях Редактора сценариев можно также принять решение сохранить историю недавних результатов или журналов событий.
Кроме того, можно вставить log
операторы в сценарий. Вывод журнала показан в конечном счете область Log окна сценария, и также в конечном счете окна Log History, если это открыто.
Следующий простой пример регистрирует текущее слово в a repeat with loopVariable (in list)
оператор:
set wordList to words in "Where is the hammer?" |
repeat with currentWord in wordList |
log currentWord |
if contents of currentWord is equal to "hammer" then |
display dialog "I found the hammer!" |
end if |
end repeat |
Следующее показывает, как слова появляются в журнале, когда выполняется сценарий:
(*Where*) |
(*is*) |
(*the*) |
(*hammer*) |
Сторонние отладчики
При необходимости в полнофункциональных возможностях отладки существуют мощные, сторонние доступные отладчики AppleScript.