статьи
форум
VIP-акции
практика
о компании
прайс-лист
доставка
контакты
работаем без выходных
Ваш город: Санкт-Петербург изменить
Москва
Ставрополь

Гарантийные сервисные центры в регионах
 
главная > статьи > Макинтош > AppleScript — это совсем не страшно  

← Отдел электроники Отдел силовой техники →

Станьте нашим клиентом, нажмите, чтобы получить скидку 15% на ремонт

количество просмотров: 7021
дата публикации: 25:08:2006

Страницы: 1 2 3

 

Словари, словари, словари…

«Ну, хорошо,»— вероятно, думаете, Вы,— «редактором пользоваться проще простого, прочесть готовые скрипты — тоже не сложно. Но писать-то их как? Откуда взять все эти классы, команды, свойства?» Ответ прост: нужно посмотреть в словаре. Каждая, поддерживающая работу с AppleScript, программа, а также ScriptingAddition (о «дополнениях» разговор еще впереди) содержит краткое описание всех своих объектов и распознаваемых команд. Посмотреть этот словарь можно непосредственно из редактора скриптов — выбрав «Open Dictionary» из меню «File» либо натащив нужную программу на картинку редактора.

Программы Макинтоша могут поддерживать AppleScript на трех разных уровнях.
Scriptable — программа может выполнять команды, описанные в виде скрипта.
Recordable — возможна запись команд, выполняемых в программе. Создадим новый скрипт, запускаем запись (кнопкой «Record»), выполняем, например, в Finder вручную необходимые действия, останавливаем запись («Stop»). Вот и все. Таким образом очень удобно делать заготовки скриптов.
Attachable — скрипт может выполняться непосредственно из программы, будучи «присоединенным» к меню или какому-либо объекту в окне. Примеры таких программ: AppleWorks, Tex-Edit, FileMaker Pro.

Откроем, например, словарь программы Finder.


Слева Вы видите список всех определенных в программе «терминов». Обратите внимание: часть из них набрана курсивом. Это — объекты. Все остальные — команды. Щелкнув на нужное слово, можно прочесть краткую справку.

Что, например, можно узнать про «Container»? Во-первых, мы видим: «Сlass container: An item that contains other items». То есть это — некий элемент, содержащий другие элементы. А если просмотреть описания нескольких следующих классов, станет ясно, что «контейнер» — понятие, включающее в себя и диски, и папки, и Стол (Desktop), и Корзину (Trash). Он обладает общими свойствами этих, во многом схожих, объектов. И в «родословном древе» — иерархии классов — является их предком.

Читаем дальше. «Plural form: containers». Форма множественного числа? Мы разве грамматику английского языка изучаем? И да, и нет. Я ведь уже упоминал, что AppleScript максимально приближен к естественному языку. И если мы хотим обработать все объекты данного класса, то записать это, как и полагается в английском языке, можно либо «every container», либо «containers».


Как Вы уже знаете, объект может содержать в себе другие объекты. Какие именно и чем отличаются друг от друга, описано в следующем разделе словаря — «Элементы» (Elements). Контейнер, как видите, может содержать объекты полутора десятков различных классов, например, другие контейнеры, папки, файлы документов и программ и т. д. А указать конкретный элемент какого-либо класса можно либо именем (by name), либо порядковым номером (by numeric index).


Ну, и наконец, последний раздел — «Свойства» (Properties). Тут мы, во-первых, видим, что класс «Контейнер» — наследник класса «Элемент» ( item [r/o]), то есть обладает всеми его свойствами. Но есть у этого класса и несколько своих собственных. Обратите внимание: часть из них помечена «[r/o]» (read only — только для чтения), эти свойства поменять командой AppleScript невозможно.


Теперь посмотрим, как описаны в словаре команды. Для примера возьмем уже знакомую Вам по примерам скриптов «Make» (создать). В верхней части страницы — назначение команды (создать новый элемент). Затем — как она записывается (синтаксис) и какие имеет параметры. Заметьте: некоторые параметры заключены в квадратные скобки. Так в словаре обозначают необязательные параметры. Составляя скрипт, мы можем без них обойтись, если же будем использовать, никакие скобки ставить не нужно. Завершает справку по команде указание ее результата (Result). В нашем примере им будет «ссылка» (reference) на созданный объект.

Ну, вот. Вы уже можете попробовать написать какой-нибудь простой скрипт. Итак…

О, создатель!

Думаю, Вы знаете, что каждый файл на Макинтоше обладает двумя признаками — типом и кодом создателя, позволяющими Finder'у решить, как с этим файлом обращаться. Не секрет и то, что нередко — например, после передачи через Интернет — эти атрибуты теряются. Конечно, есть немало программ, умеющих их изменять. Но давайте попытаемся сделать свою собственную утилиту, пользуясь только тем, что уже заложено в Mac OS.

Начнем с простейшего варианта. Пусть нам нужно назначить файлу letter.txt, находящемуся на Столе, назначить тип «TEXT» и код создателя «ttxt» (ПростоТекст).

Выбираем в словаре программы Finder объект file. Находим нужные нам свойства: file type и creator type. Для изменения значения того или иного свойства используется команда «setraquo; (установить). Стало быть весь скрипт должен выглядеть примерно так:

tell application "Finder" to tell file "letter.txt"
set its file type to "TEXT"
set its creator type to "ttxt"
end tell

Или вот так:

tell application "Finder"
set file type of file "letter.txt" to "TEXT"
set creator type of file "letter.txt" to "ttxt"
end tell

Таким образом, как видите, можно либо приказать файлу поменять свои (its) свойства (в данном примере слово «its» можно опустить, т. к. назначение команды однозначно определено и без него), либо — программе Finder поменять свойства подчиненного объекта.

Я не зря задал условие, что файл находится на рабочем столе. В ином случае нам потребовалась более длинная «цепочка» подчиненных объектов (что-то вроде «tell application "Finder" to tell disk "Macintosh HD" to tell folder "lesson" to tell file "letter.txt"»). Или же — для второго варианта скрипта — указание полного пути: «file "Macintosh HD:lesson:letter.txt"» (Напомню: путь в Mac OS записывается через двоеточия).

Что ж, скрипт написан. Он работает. Но… пользы от него, прямо скажем, никакой — ведь для каждого следующего файла нужно изменять текст самого скрипта. Ничего себе, упростили работу! Надо бы нашу программу усовершенствовать. Научим ее спрашивать пользователя, какой файл обрабатывать. Открываем словарь Finder'а, смотрим… Вот те на! Ничего подходящего. Неужто Apple допустила такую промашку? Вовсе нет…

«А у Вас нет такого же, но с перламутровыми пуговицами?»

Открытая архитектура скриптов (OSA — Open Script Architecture) позволяет обзавестись практически любым необходимым элементом языка. Конечно, если кто-то позаботился написать «дополнение» (Scripting Addition или OSAX), описывающее такой объект и соответствующие команды. Размещаются эти дополнения в папке Scripting Additions, находящейся в System Folder (раньше — в Extensions). Использовать же их может любой скрипт, независимо от того, какой программой он в данный момент командует.

Откроем словарь Standard Additions (чтоб быстро попасть в папку Scripting Additions, в диалоге Open Dictionary предусмотрена специальная кнопка). Вот и она — команда «choose file» (выбрать файл). Результатом ее работы будет ссылка на файл, выбранный человеком в стандартном диалоге Open. Эту ссылку мы сохраним в переменной, которую назовем, к примеру, MyFile.


Наш скрипт примет вот такой вид:

tell application "Finder"
set MyFile to choose file
set file type of MyFile to "TEXT"
set creator type of MyFile to "ttxt"
end tell

Вполне работоспособная программка. Но нельзя ли сделать ее более удобной? Зачем отдельно запускать скрипт, потом выбирать в диалоге имя файла — не лучше ли использовать метод Drag'n'Drop? Все в наших силах!

 

1 2 3

 

 

 

Почему мы лучше

Максимум 2 дня до диагностики (при сдаче ноутбука в любом из отделений)

бесплатная диагностика по многим видам техники

10 лет опыта

Работаем без выходных

Полный спектр услуг по ноутбукам и сварочной технике