Основные принципы 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.

Рисунок 2-1  словарь Средства поиска в Редакторе сценариев (в OS X v10.5)
The Finder dictionary in Script Editor (in OS X v10.5)The Finder dictionary in Script Editor (in OS X v10.5)

Существуют также сторонние редакторы для AppleScript.

AppleScript и объекты

AppleScript является объектно-ориентированным языком. То, когда Вы пишете, скомпилируйте и выполните сценарии, все, с чем Вы работаете, является объектом. Объект является инстанцированием определения класса, которое может включать свойства и действия. AppleScript определяет классы для объектов, Вы обычно работаете с, начиная с верхнего уровня script объект, который является полным сценарием, в котором Вы работаете.

В в a script объект, Вы работаете с другими объектами, включая:

Следующие разделы обеспечивают больше подробности об объектах:

Что находится в объекте сценария

При вводе операторов 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.

Табличные 2-1  приведения Значения по умолчанию поддерживаются AppleScript

Преобразуйте из класса

К классу

Примечания

псевдоним

list (единственный элемент)

text

приложение

list (единственный элемент)

Это - и класс AppleScript и класс приложений.

булевская переменная

integer

list (единственный элемент)

text

класс

list (единственный элемент)

text

постоянный

list (единственный элемент)

text

дата

list (единственный элемент)

text

файл

list (единственный элемент)

text

целое число

list (единственный элемент)

real

text

Принуждение integer к a number не изменяет его класс.

list (единственный элемент)

любой класс, к которому может быть принужден элемент, если это не часть списка

list (многократный элемент)

text, если каждый из элементов в списке может быть принужден к a text объект

число

integer

list (единственный элемент)

real

text

Значения, идентифицированные как значения класса number действительно значения любого класса integer или класс real.

Файл POSIX

посмотрите file

POSIX file псевдокласс, эквивалентный file класс.

реальный

integer

list (единственный элемент)

В принуждении к integer, любая дробная часть округлена.

Принуждение a real к a number не изменяет его класс.

запись

list

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

ссылка

любой класс, к которому может быть принужден ссылочный объект

сценарий

list (единственный элемент)

текст

integer

list (единственный элемент)

real

Может принудить к integer или real только если text объект представляет надлежащее число.

типы модуля

integer

list (единственный элемент)

real

text

Может принудить между типами модуля в той же категории, такой как inches к kilometers (длина) или gallons к liters (жидкий объем).

Сценарии дополнений

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

Многие команды, описанные в этом руководстве, определяются в Стандартных Дополнениях, пишущих сценарий дополнения в 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 объект. Вызвать определяемую пользователем команду за пределами a tell оператор, просто используйте его имя и предоставьте значения для любых параметров, которых он требует. Команда будет использовать текущий сценарий в качестве своей цели.

    Вызвать определяемую пользователем команду внутри 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 объекты и 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.