AppleScript для абсолютних новачків Скриптинг для Mac OS X: починаємо програмувати на AppleSсriрt AppleScript - що за звір

Відкриваємо, обрізаємо, переводимо в іншу колірну модель, зберігаємо. Відкриваємо, обрізаємо, переводимо в іншу колірну модель, зберігаємо. Аби ще ось: Виділяємо, переносимо в буфер, переключаємося в іншу програму, копіюємо з буфера. Виділяємо, переносимо в буфер, перемикаємось

Не схоже на творчу діяльність, чи не так? Адже практично кожному, хто має справу з комп'ютером, за день доводиться виконувати десятки і сотні повторюваних, однакових по суті своєї операцій. І попрацювавши тижнів три таким "інтелектуальним конвертором", вже не те, що вчити нову версію"Фотошопа" або освоювати InDesign - не хочеться навіть близько підходити до комп'ютера. Одним словом – потрібен помічник. Який і візьме на себе виконання всіх (ну, або хоча б більшості) нудних і рутинних, але, безумовно, - потрібних дій, що повторюються.

AppleScript – що за звір?

І такий помічник ми маємо. Це спеціальна мова для написання скриптів (або, якщо вам завгодно, - сценаріїв) під назвою AppleScript. Вперше ця мова з'явилася в Mac OS 7.5 (тоді ще Macintosh System), і була настільки якісно реалізована, а також мала настільки широкі можливості, що до виходу десятої версії ОС він "дотягнув" лише до версії 1.8. Але, як не дивно, не дивлячись ні на свої величезні потенційні можливості, ні на більш ніж десятирічну історію існування, технологія AppleScript так і не набула широкого поширення серед Мак-юзерів. Що тому виною - міфи про його складність, відсталість користувачів, що звикли виключно до "піктограмно-мишачого" управління своїх Маків, або щось ще, - судити не беруся, але факт є факт: про існування AppleScript знають сотні, а використовують його лише одиниці. Тому не зайвим, як на мене, буде розглянути основні принципи роботи цієї технології.
В основі AppleScript лежить Macintosh Apple Events – служба обробки системних подій, - яка дозволяє обмінюватися керуючими командами, даними та запитами між програмами, операційною системою, мережевими службами та навіть різними комп'ютерами. Обробник сценаріїв (який являє собою звичайне розширення (Extension), розташоване в папці System) перетворює команди сценарію на послідовність подій, і передає їх зазначеному в сценарії додатку, а після їх обробки приймає результат, і пересилає його джерелу сценарію.
Хоча AppleScript і є справжньою мовою програмування (він підтримує змінні, цикли, оператори умов, підпрограми, дозволяє робити складні розрахунки, і навіть має засоби для побудови та обробки діалогових вікон), виконання основних завдань лягає все ж таки на плечі зовнішніх додатків. А AppleScript виступає в ролі своєрідного "клею", який займається пересиланням даних між програмами ("передати файл з Ілюстратора в Фотошоп"), оцінює поточний стан робочого оточення окремих програм, ОС та мережі ("розтеризація файлу вже завершена, чи ще ні?" ), і дозволяє робити дії, засновані на результатах попередніх операцій ("якщо всі файли розтеризовані, то відправити матеріали в спеціальну папку, і запустити скрипт, який відповідає за складання газетної смуги").
Існує кілька рівнів "сценарності" додатків. Так, наприклад, ті програми, які до автоматизації пристосовані найменшою мірою, розуміють тільки основні, найпростіші команди: завантажити додаток, відкрити документ, відправити на друк і закрити додаток (run, open, print і quit). Більш "зговірливі" (такі, наприклад, як Photoshop, Illustrator і FreeHand) мають у своєму арсеналі засоби, яких цілком достатньо для написання програм пакетної обробки файлів та виконання певних послідовностей дій (макрокоманд). А ті, в яких реалізована підтримка практично всіх можливостей технології AppleScript (а сюди входять пакети QuarkXPress, Adobe InDesign і більшість програм компанії Apple) дають можливість контролювати свою роботу на "найглибших" рівнях: встановлювати параметри друку, використовувати буфер обміну, перевіряти та змінювати значення внутрішніх змінних, і т.д.

Основи скриптології

Для введення вихідних текстів та виконання скриптів можна скористатися програмою Script Editor – основним та єдиним засобом для створення сценаріїв у стандартному постачанні Mac OS.
Редактор сценаріїв знаходиться в папці Apple Extras / AppleScript (для локалізованої версії Mac OS - Додатки / AppleScript), і після запуску видає вікно, подібне до того, що зображено на рис. 1.


Рис. 1. Редактор сценаріїв Script Editor

Верхнє та нижнє поля введення призначені для опису сценарію та його тексту відповідно, і додаткових коментарів навряд чи потребують. Кнопка Record дозволяє записати макрокоманду, для цього треба після натискання кнопки перейти в потрібну програму, і зробити ряд дій; після чого в нижньому полі введення з'явиться текст скрипта (необхідно помітити, що можливість запису макрокоманд підтримується далеко не будь-якою програмою). Кнопка Check Syntax перевіряє, чи немає в тексті сценарію помилок, а також наводить його в "товарний" вигляд - напівжирним шрифтом та відступами виділяє ключові словата вкладені блоки.
Перший сценарій. Для початку, як і належить, напишемо найпростішу програму, яка виконує кілька елементарних дій: закриває все відкриті вікна, видаляє з носіїв усі змінні диски, впорядковує на екрані іконки, проводить очищення кошика та вимикає комп'ютер. Текст такої програми має такий вигляд:

tell application "Finder"

Close every window
eject every disk
clean up desktop
empty trash
shut down

End tell

Що це все означає? Служба Apple Events ("основа" технології AppleScript) передає дані, запити та повідомлення не просто між програмами, а між елементами програм, які називаються об'єктами, і можуть мати вкладену структуру, яка називається об'єктною моделлю. Так, наприклад, для програми Finder об'єктну модель (точніше, лише одну з гілок цієї моделі) можна представити в наступному вигляді: Finder – Desktop – Folder – File; для текстового редактораця модель набуде вигляду Документ - Сторінка - Абзац - Пропозиція; для Векторної ілюстрації вона виглядатиме як Ілюстрація - Базова фігура - Крива Без'я - Крапка (рис. 2).


Рис. 2. Приклади об'єктних моделей

Кожен об'єкт, як правило, має одну або кілька властивостей (рис. 3), які можна встановлювати ("встановити висоту сторінки в 14 дюймів"), змінювати ("змінити ширину з 8 до 8,5 дюймів), та контролювати ("чому одно праве поле сторінки?").).


Рис. 3. Властивості об'єкту

Для того, щоб контролювати той чи інший об'єкт, його необхідно виділити (зазначити) на об'єктній моделі. Для цього служить конструкція tell end tell, і всі команди, що управляють об'єктом, полягають усередину цієї конструкції; якщо об'єкт знаходиться "в глибині" однієї з гілок моделі, то застосовується кілька вкладених один в одного блоків tell end tell. У наступному прикладі скрипт поетапно отримує доступ до робочого столу (це один з елементів об'єктної моделі програми Finder), а потім переміщує папку test, яка знаходиться на робочому столі, в кошик.

tell application "Finder"
tell desktop

Delete folder "test"

End tell
end tell

При написанні скрипта, який управляє будь-якою програмою - неважливо, Finder це, FileMaker, Adobe Acrobatабо щось інше, необхідно знати, які команди мови AppleScript підтримує ця програма, які об'єкти входять до її об'єктної моделі, а також назви та призначення всіх властивостей доступних об'єктів. Всі ці відомості зберігаються у виконуваному файлі тієї чи іншої програми, у так званому словнику додатку (application dictionary). Щоб скористатися цим словником, у програмі Script Editor треба виконати команду File / Open Dictionary (Файл / Відкрити словник), і в вікні вибрати виконуваний файл програми, що цікавить. В результаті на екран буде виведено вікно, подібне до того, що зображено на рис. 4 - у правій частині знаходиться список усіх команд та об'єктів, у лівій частині наведено їх короткі описи.


Рис. 4. Словник програми

Другий сценарій.Перейдемо до вирішення практичних завдань. Тим, хто займається веб-дизайном, часто доводиться перевіряти свої сторінки на сумісність зі старими версіями браузерів. Для цього треба відкривати вікна з папками, шукати там файли програм-в'юверів, завантажувати їх, а потім ще й шукати на дисках папки з веб-сторінками. Загалом, - не найприємніше заняття. Створимо сценарій, який спростить перегляд сторінок: автоматично завантажить декілька різних браузеріві в кожному відкриє потрібний нам документ.

tell application "Finder"

Виділяємо (вказуємо) потрібний файл
select file "index.html" of folder "Current web-site" of desktop
-- змінною myFile привласним шлях до виділеного файлу
set myFile to the selection as string

Завантажуємо Microsoft IE і відкриваємо вибрану сторінку
tell application " Internet Explorer 3.01"
open(alias myFile)
end tell

Ту ж операцію робимо з Netscape Navigator
tell application "Netscape Navigator 3.01"
open (alias myFile)
end tell

У наведеній програмі з'явилося кілька нових конструкцій. Усі рядки, на початку яких стоять символи "--" є коментарями. У мові AppleScript коментарі можна писати як на окремому рядку, так і в кінці рядка, відразу після команди. У будь-якому випадку, всі символи "--" і до початку нового рядка вважаються коментарями і при виконанні сценарію ігноруються.

Команда "select" імітує явне виділення елемента курсором мишки, і її дія частково нагадує застосування конструкції tell end tell, але з тією різницею, що при застосуванні команди selectми можемо надати деякі властивості виділеного об'єкта (наприклад, шлях файлу або папки) змінної.

Оператор setслужить для вказівки значень змінним, що створюються на момент першого звернення. Тобто, не треба описувати попередньо ім'я та тип змінної: написали, наприклад, set myDate to the current date, А AppleScript і змінну створив, і розмір їй потрібний підібрав, і тип. Але це ще не все: за допомогою оператора setможна змінювати всі властивості об'єктів. Робиться це так:

tell application "Finder"
tell desktop
tell file "Прайс-лист"

-- змінюємо властивість comment (коментар) файлу "Прайс-лист"
-- файл знаходиться на робочому столі
set comment to "Цей прайс-лист застарів!"

End tell
end tell
end tell

Або те саме, тільки за допомогою команди select:

tell application "Finder"

Вибрати файл "Прайс-лист" of desktop
set comment of selection to "Цей прайс-лист застарів!"

End tell

Як ви могли помітити, досі всі роботи зі скриптами – набір вихідного текстута виконання, - проводились виключно за допомогою спеціального редактора. Цей спосіб добрий, коли потрібно створити новий скрипт, або переробити старий. Але для повсякденного використання він нікуди не годиться - поки відкриєш Script Editor, поки знайдеш на дисках потрібний сценарій, то мимоволі подумаєш - а чи не швидше ту ж роботу виконати вручну, без будь-якої автоматизації? Розробники AppleScript подбали про це - сценарії можуть зберігатися не тільки у вигляді текстових файлів, а й у відкомпілюваному вигляді, що повністю придатні до автономного виконання. Для того, щоб перевести сценарій у код, що виконується, потрібно в редакторі сценаріїв виконати команду Save As Run-Only (Зберегти як програму). У діалоговому вікні (подібному до того, що можна побачити на мал. 5) у випадаючому списку вибрати Application (Програма); скинути чекбокс Stay Open (Залишити відкритим - якщо не включати цю опцію, то після виконання скрипт автоматично завершить свою роботу, інакше він залишиться в пам'яті комп'ютера), та відзначити чекбокс Newer Show Startup Screen (Не показувати Екран завантаження). Після того, як ви зробили всі описані дії, запуск сценарію не викличе у вас жодних труднощів: просто наведіть на нього курсор мишки і двічі натисніть на кнопку.


Рис. 5. Збереження сценарію у вигляді виконуваної програми

Сценарій третій і останній.Напевно, про користь резервного копіюваннячули багато. А ті, хто хоч раз у житті втратив результати своєї місячної (на крайній випадок - хоча б тижневої) праці, точно знають, що краще витратити щодня 15 хвилин на архівування потрібних файлів, ніж потім рвати на голові волосся і посипати попелом свій монітор . Але, як правило, навіть після втрати важливої ​​інформаціїлюди не змінюють своїх звичок: скажеш, бувало, собі - "Все, з сьогоднішнього дняроблю копії всіх файлів!". А пройде тиждень-другий - і програми на кшталт "не глючать", та й часу вільного немає, - "І навіщо мені резервне копіювання! І так зійде". Щоб трохи спростити життя всім тим, хто хоче бачити свої файли цілими та неушкодженими, але не дуже любить працювати з програмою StuffIt, напишемо скрипт, який щодня архівуватиме всі потрібні дані, і складатиме їх на спеціальному диску. Ось вихідний текст такої програми:

tell application "Finder"

Вказуємо диск та папку, в якій зберігаються всі файли
- для архівації
set myArhiveFolder to the "Mac OS:Сurrent work:"
- вказуємо папку, де зберігаються архіви
set myTargetFolder to the "За arhives:Publish Arhive:"
- призначаємо ім'я майбутнього архіву
-- (як ім'я виступає поточна дата)
set myFile to date string of the (current date) & ".sit"
-- створюємо повне ім'я файлу (шлях + ім'я)
set myArhiveFile to the myTargetFolder & myFile

Якщо файл із таким ім'ям вже існує
-- (тобто резервне копіювання сьогодні проводилося)
- то просто закінчуємо роботу скрипту
if not (exists (file myArhiveFile)) then

Якщо файл із заданим ім'ям ще не існує,
-- то завантажуємо StaffIt Deluxe і проводимо архівування,
- і відразу ж вивантажуємо StuffIt з пам'яті
tell application "StuffIt Deluxeк"

Activate
make new archive with properties (pathname:myArhiveFile)
stuff (alias myArhiveFolder) inarchive 1
close archive 1
quit

Наведений сценарій спрощує процедуру резервного копіювання, але ще не настільки, як хотілося б - для запуску архівування доведеться шукати цей сценарій (на дисках або на робочому столі) і виконувати його. Щоб повністю автоматизувати роботу, потрібно відкомпілювати скрипт і зберегти його в папці System/Shutdown Items (Системна папка/Елементи вимкнення). Тепер при кожному вимкненні комп'ютера автоматично завантажуватиметься архіватор, і зберігатиме все важливі файлина спеціальний диск. Треба зазначити, що архівування буде проводитись лише один раз на добу, незалежно від того, чи працював комп'ютер 20 годин до ряду, чи перезавантажувався через кожні півгодини – за допомогою оператора умови if end ifми перевіряємо, чи варто проводити архівацію, чи краще все ж таки почекати. До наступної доби.

А далі?..

Прочитавши про можливості AppleScript, а також побачивши, що створення сценаріїв - це дуже просто і доступно навіть новачкам, ви, можливо, захочете продовжити знайомство з цим засобом автоматизації. І тут-то на вас і чекає перше розчарування. На жаль, інформації щодо AppleScript російською мовою практично не існує: для того, щоб порахувати всі публікації, пальців однієї руки вистачить з великим надлишком. Тому для вивчення мови скриптування вам знадобляться ще й непогані знання англійської мови.

Існують два основні джерела інформації про технологію AppleScript. Перший – офіційний сайт компанії Apple Computer, точніше розділ сайту, присвячений всьому, що пов'язано зі сценаріями: технічна документація, підручники, приклади, колекції посилань та багато іншого. Адреса цього розділу - http://www.apple.com/applescript/. Наполегливо раджу завантажити собі AppleScript Language Guide - добре ілюстрований підручник, який включає безліч практичних прикладів(книга знаходиться за адресою http://developer.apple.com/techpubs/macosx/Carbon/pdf/AppleScriptLanguageGuide.pdf, розмір файлу - 2,6 Мб). Друге джерело - сайт http://www.scripter.com - містить масу матеріалів як по AppleScript, так і за іншими, альтернативними мовами написання сценаріїв для платформи Макінтош.

Крім того, якщо ви вирішите впритул зайнятися написанням скриптів, то вам знадобиться гарне інструментальне середовище - Script Editor, що поставляється разом з Mac OS, годиться хіба що для простеньких скриптів розміром 20-30 рядків коду. У такому випадку можна порекомендувати Scripter 2.5 від компанії Main Event Software – редактор має режим налагодження та добре продуманий механізм відображення словників додатків. А якщо ви збираєтеся створювати програми AppleScript, які будуть мати власний інтерфейс користувача, то вам не завадить також обзавестися програмою FaceSpan 3.5 від Digital Technology - ця програма скоротить час створення екранних меню і дилогових вікон, і дозволить уникнути тривалої і малоприємної метушні з ескізами на міліметровій паперу.

Замість ув'язнення

Писати скрипти – це цікаво. Писати скрипти – це корисно. Писати скрипти – це навіть приємно. Хоча, звичайно, набагато приємніше віддатися бажаному неробству, у той час, коли "свіжоспечений" скрипт терпляче відпрацьовує всю тижневу рутину.

Не пошкодуйте часу, витратите кілька днів на вивчення мови, напишіть пару-трійку скриптів, що спрощують вашу роботу, і ви самі зрозумієте, що AppleScript - дуже простий, дуже потужний і дуже гнучкий інструмент. Хоча, чи варто було від Apple очікувати чогось іншого?

Це мова програмування, технологія, що належить компанії, найчастіше використовується для автоматизації робочих процесів і уможливлює спілкування програм між собою. Ось як 🙂.

Я не збираюся відкривати цикл статей на тему: Applescript для чайників. Крок за кроком» з однієї простої причини – матеріалу на цю тему в мережі достатньо. І щоб не переписувати буквар на свій лад і не винаходити колесо, я тільки вкажу кілька джерел, які мені здалися найбільш підходящими. По ньому і сам просвічуватимуся.

Практично кожен автор пише, що мова сценаріїв настільки проста, що писати на ній може будь-який користувач, хоч трохи знайомий із традиційною англійською. І не обов'язково володіти всіма аспектами об'єктно-орієнтованого програмування. Частина правди в тому є, оскільки у сценарії

tell application "Finder"

display dialog "Привіт лунатикам!"

важко не зрозуміти, що і від якої програми потрібно. Але щодо ООП не зовсім згоден. Якщо писати такі непотрібні речі як beep або say "Who is the man?" , то так, можна і не знати що таке цикл і клас, та й до ООП з цим ще далеко. таке «Спадкування» та «Інкапсуляція».

З чого почати?

Все просто і просто під руками. Запускаєте Редактор скриптів і насамперед заходьте у довідку. Якщо користуєтеся російськомовною версією – труднощів не має бути взагалі.

Кому книжку?

Якщо стандартного керівництва недостатньо, або написано так, що вам не відразу все ясно, можна звернутися і до книг (електронних або друкованих – вам вирішувати). Дуже часто посилаються на книгу AppleScript Language Guide. Виявляється, саме на неї є посилання на довідку Редактора скриптів.

Не можна не врахувати інших ресурсів, які пропонує нам сама компанія-розробник. Є книга для новачків AppleScript 1-2-3 або можна купити з однойменною назвою.

Більше краще

Чому б не розглянути онлайн-ресурси? Адже тут можна знайти найсвіжіше, та й на відгуки читачів реагують частіше та швидше. Шукаємо літературу доступною мовою.

Крім різних оглядових статей, на просторах інтернету можна знайти . Я б сказав, що їх саме для тих, хто цікавиться applescript. Книга саме для початківців, написана просто, сторінок небагато, натомість прикладів повно. Те що потрібно. Там же можна завантажити і книгу під назвою «».

Російські керівництва - це добре, але без базових знань англійської буде, м'яко кажучи, важко вивчати мову сценаріїв.

Зі статей я б приділив увагу цій. Вона мені сподобалася докладним викладом деяких основних принципів мови сценаріїв, «коротко і ясно».

Не забувайте також про різні форуми, де користувачі обмінюються думками, досвідом та вже готовими сценаріями. У мене, особисто, в закладках цей.

Перед тим, як приступити до пошуку та завантаження матеріалу, рекомендую все-таки визначитися з метою. Для загального розвитку можна ознайомитись із деякими джерелами. Для написання дійсно корисних скриптів доведеться витратити кілька днів/тижень/місяць (залежить від ваших здібностей та вільного часу). Це дуже цікаво та затягує.

Я не можу зараз оцінити шанси людини влаштуватись на роботу applescript-програмістом або тестером. Швидше за все, не дуже великі. Але якщо ви відчуваєте, що це ваше – уперед. Якщо бачите ціль і не бачите перешкод - не важливо, кому це потрібно (як мінімум – вам). Істинний талант оцінять завжди. А у вас є шанс робити улюблену роботу.

  • AppleScript Apple, . AppleScript AppleScript. , -.

    AppleScript.

    0 . . . . . . . . . . . . . . . . . . . . . 6

    1 . . . . . . . . . 7

    2 . . . . . . 10

    3 (І) . . . . . . . . 13

    4 . . . . . . . . . . . . . . . . . . . . . 15

    5 . . . . . . . . . . . . . . . . . . . . . 17

    6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    8 (ІІ) . . . . . . . 30

    9 ? ! . . . . . . . . 32

    10 . . . . . . . . . . . . . . . . . . 34

    11 . . . . . . . . . . . . . . 40

    13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    14 . . . . . . . . . . . . . . . . . . . 53

    16 . . . . . . . . . . . . . . . . 59

    17 . . . . . . . . 60 . . . . . . . . 60

    AppleScript Apple, . , AppleScript:

    AppleScript, AppleScript. , -, .

    AppleScript,. - AppleScript ( Adobe PhotoShop, QuarkXPress, Adobe InDesign). FileMaker Pro. , GraphicConverter, BBEdit, Microsoft Word AppleScript (). , AppleScript. , . . , AppleScript, AppleScript. , - AppleScript.

    . (. 15). - AppleScript. , .

    AppleScript, AppleScript:

    , ; AppleScript, .., AppleScript; (Mac OS X),

    AppleScript; AppleScript; AppleScript (Mac OS X).

    AppleScript. , Java, . AppleScript, 10-, -. .

    5 AppleScript , . - AppleScript Studio (Developer Tools XCode).

    JavaScript , .

    () . , . , . , .

    . , : . - . , . : .

    AppleScript, . . Script Editor (. 2), .

    Copyright (c) 2003 by Bert Altenburg

    : Bert Altenburg, - .

    1. . , -. , AppleScript. AppleScript.

    2. , PC, . - , -. CPU Monitor (Utilities, Applications), - . (Distributed Computing DC), [email protected], . DC-, -. DC-. - , DC-. , . ? DC--. (), - . , - , . DC-- : , . , DC-:

    www.aspenleaf.com/distributed/distrib-projects.html

    3. . , . () , - . - , . - , . - , :

    http://www.macinstruct.com/tutorials/crash/index.html

    AppleScript Mac OS. , -. , .

    , -. , (statement), . , .

    AppleScript,. 1 .

    AppleScript :

    say "This is a spoken sentence."

    Fred, Trinoids, Cellos, Zarvox, Victoria.

    say "This is a spoken sentence." using "Zarvox"

    : AppleScript . , . Victoria Zarvox .

    AppleScript. - , - . : . AppleScript - , . AppleScript,. (Scriptable). , AppleScript (Mac OS X), .

    Finder. , Finder. , . Finder, -,. -, Trash, Finder.

    8, AppleScript.

    Adobe PhotoShop. PhotoShop. , Finder.

    AppleScript,.

    Tell, AppleScript (Mac OS X), Finder. AppleScript (Mac OS X), - end tell. AppleScript Finder Finder, . , :

    tell application "xyz"

    (Tell block). xyz xyz. , AppleScript , - , . , . (, ("). : , AppleScript . . .)

    Finder. , Finder. Finder, Finder.

    tell application "Finder" empty the trash open the startup disk end tell

    Finder. Finder, - , . .

    Finder, AppleScript (Mac OS X) .

    9tell застосування "Finder" empty the trash open the startup disk end tellbeep

    Finder. beep AppleScript. , .

    Beep (AppleScript (Mac OS X)).

    tell application "Finder" empty the trash beep open the startup disk end tell

    Finder beep, AppleScript (Mac OS X) . , . , -, Finder, beep, Finder.

    AppleScript (Mac OS X) . - , Finder, . ().

    tell application "Finder" empty the trash beep end tellopen the startup disk

    AppleScript (Mac OS X) , . () - , .

    tell application "Finder" empty the trashend tell open the startup disksay "I emptied the trash and opened startup disk for you" using "Victoria"

    AppleScript (Mac OS X), Finder. , .

    Script Editor,. Script Editor AppleScript, Applications. , . .

    Compile. , AppleScript, AppleScript. Yo Finder! Dump my garbage (Finder! !) Hey Finder! Clean out the bin (Finder,) Finder. (Compilation) AppleScript (Mac OS X) : - . , . , -. Script Editor.

    AppleScript (Mac OS X) .

    say "Im learning AppleScript the easy way!" using "Zarvox"

    Run, . Script Editor, !

    Enter. Enter - Space () (). Return (Shift). Return.

    Compile. - Run, .

    Run, Command-R. : , -

    , (Compiled script) (application).

    : , - AppleScript,

    Script Editor Run.

    : , AppleScript ,

    Script Editor. , -, (System Preferences). , . - , Script Editor, Open File.

    : Save, - (run-only) , -.

    tell application "Finder" empty the trash end tell

    Script Editor.

    Application :

    Script Editor app application. , xyz. - (-), pqr. - , AppleScript. , AppleScript pqr , tell .

    Script Editor, -. , control . :

    1) Control Script Editor. (.), Tell Blocks. , Tell "Finder".

    2) Finder empty the trash , (), 1. . - .

    2 + 6 = ...... = 3 * 4

    2 + 6 = xy = 3 * 4

    AppleScript. (Variables) , . - (identiers), . - AppleScript, Set.

    set x to 25set y to 4321.234

    AppleScript,. : (-, (bugs)). , x. , pictureWidth .

    set pictureWidth to 8

    , (, -,). , AppleScript, -. , (8).

    AppleScript -. , set, say, to, beep - AppleScript. , pictureWidth, . -, .

    AppleScript,. , .

    set pictureWidth to 8set pictureHeight to 6 set pictureSurfaceArea to pictureWidth * pictureHeight

    , (Operators), - .

    set cubeEdgeLength to 10.0set cubeVolume to cubeEdgeLength ^ 3

    Script Editor, . , . (Result). , 10.0. , 1000.0. , cubeEdgeLength ^ 3 , .

    : . - . (integers) , - , (. 13)

Ви ще не використовуєте AppleScript? Чи не знаєте, що це таке? Вважаєте, ніби вам це ні до чого? Або, можливо, пам'ять про шкільні уроки інформатики викликає у Вас напад алергії при одній згадці слова «програма»? Отже, ви правильно зробили, відкривши цю статтю.

Сподіваюся, вона допоможе розібратися з цим. корисним інструментом, і час, витрачений читання, потім окупиться сторицею.

Нерідко при роботі з тією чи іншою програмою нам доводиться багато разів виконувати однакові дії: натискати на одні й ті ж клавіші, вибирати одну і ту ж команду з меню, вводити одні й ті ж значення в діалогових вікнах& Ось тут-то на допомогу і приходить AppleScript. Описуємо послідовність наших операцій у вигляді програми-«скрипта», запускаємо і - спокійно п'ємо каву, зрідка поглядаючи, чи не закінчилася обробка останнього, три тисячі сімсот вісімдесят дев'ятого файлу. Щось подібне існує як BAT-файлів DOS або скриптів для оболонок (shell) UNIX. Але AppleScript має важливу перевагу: цю мову «розуміють» як Finder, так і велике число прикладних програмі скрипт може звертатися по черзі до них усім.

Мова, якою ми будемо користуватися (він теж називається AppleScript), дуже близька до звичайної англійської мови. Наприклад, скрипт може виглядати так:

tell application «Finder»
make
end tell

Думаю, що всі зрозуміли, що він зробить. Але щоб навчитися писати власні скрипти, доведеться розібратися з деякими поняттями.

Об'єкти, властивості, події...

AppleScript - мова об'єктно-орієнтована. Тобто все, що «існує» у вашому комп'ютері, він вважає об'єктами(objects). Об'єкт може складатися з інших об'єктів, бути включений до іншого об'єкта, ставитись до іншого об'єкта. Наприклад, Finder – це об'єкт. У нього є підлеглі об'єкти - папки, файли, вікна. У редакторі Tex-Edit є об'єкт тексту, що складається зі слів, рядків, абзаців тощо. Знати, як співвідносяться об'єкти (їхню ієрархію) дуже важливо, оскільки команда передається «по ланцюжку». Діє така собі «вертикаль влади»: ми віддаємо наказ Finderу, він - папці, та - вкладеної в неї папці і так далі, поки не дійде до потрібного файлу. І «рапорт про виконання» знову-таки піде тим же ланцюжком - у зворотний бік.

Однотипні об'єкти (наприклад, усі папки) утворюють клас(class). Кожен об'єкт має деякий набір властивостей(properties), що відрізняє його від іншого. Наприклад, кожен файл має ім'я, мітку, тип, дату створення, версію і ще більше десятка характеристик. Частина їх скрипт може змінювати, деякі - лише прочитати.

Один клас (так званий «нащадок») може успадковувати властивості іншого класу ( «предка»). Наприклад, і папки, і файли мають спільний предок - елемент (item).

Тепер розглянемо наш приклад, трохи доповнивши його:

- будь-який текст, записаний після «двох мінусів»,
- вважається коментарем;
- на нього комп'ютер не звертає уваги
tell application «Finder»
- словом tell починається група команд,
- що відносяться до одного об'єкту
make New folder at desktop with properties (name:"Моя!", label index:2)
end tell - а так завершується група команд
tell application «Finder» to tell item «Моя!»
open
set its name to"Тільки для мене"
end tell

Ми спочатку наказуємо програмі Finder створити новий об'єкт класу папка, розташований на Столі. Частина властивостей задано в команді (ім'я папки та її кольорова позначка), решта буде призначено комп'ютером за замовчуванням. Потім говоримо Finder'у, щоб він скомандував своїй папці (так і тільки так: "Васал мого васала - не мій васал") відкритися і змінити ім'я.

Але пора б від теоретичних міркувань перейти до чогось більшого. Саме час запустити Script Editor.

Редактор скриптів

Для роботи з AppleScript створено кілька програм, серед яких є досконалі засоби розробки. Згодом Ви, мабуть, матимете один з них. Але для початкового знайомства нам цілком вистачить редактора, що входить до складу Mac OS.

Вікно Script Editor розділено на дві частини: у верхній записується коментар (він виводиться на екран перед виконанням скрипта), а в нижній – програма. Спробуємо набрати наш приклад (без моїх коментарів, звісно, ​​можна обійтися). Потім натисніть кнопку "Check syntax". Якщо Ви припустилися будь-якої помилки, з'явиться вікно з поясненням. Але, швидше за все, все буде нормально – і після невеликої паузи текст дещо змінить свій вигляд. Яким шрифтом будуть виділені різні елементи скрипта, можна налаштувати, скориставшись командою «AppleScript Formatting» меню «Edit». Тепер можна натиснути кнопку Run. Спрацювало?

Написаний скрипт можна зберегти по-різному: або тільки початковий текст(Text), або вже скомпільований скрипт(Compiled Script) – готовий до виконання редактором скриптів або деякими іншими програмами, нарешті – у вигляді самостійної (виноска: звичайно, не зовсім – без встановленого AppleScript вона нічого не зробить) програми-аплета(Application). Можна зробити скрипт "тільки для виконання" (Run-only). Тільки не забудьте в цьому випадку зберегти – для себе – і оригінальний файл. Інакше дістатися його вихідного тексту не зможуть не тільки конкуренти, які прагнуть порушити ваші авторські права, але й Ви самі.

Словники, словники, словники.

"Ну, добре," - мабуть, думаєте, Ви, - "редактором користуватися простіше простого, прочитати готові скрипти - теж не складно. Але писати їх як? Звідки взяти всі ці класи, команди, властивості? Відповідь проста: потрібно подивитися в словник. Кожна програма, що підтримує роботу з 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). Контейнер, як бачите, може містити об'єкти півтора десятка різних класів, наприклад, інші контейнери, папки, файли документів і програм тощо. numeric index).

Ну, і нарешті, останній розділ – «Властивості» (Properties). Тут ми, перше, бачимо, що клас «Контейнер» - спадкоємець класу «Елемент» ( item ), тобто має всі його властивості. Але є цей клас і кілька своїх власних. Зверніть увагу: частина їх позначена «» (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файл «letter.txt»
set its file type to"TEXT"
set its creator type to"ttxt"
end tell

Або ось так:

tell application «Finder»
set file type ofфайл «letter.txt» to"TEXT"
set creator type ofфайл «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? Все в наших силах!

Пишемо Droplet

Отже, що ми хочемо отримати, і як цього досягти.

  1. Програма має працювати незалежно від редактора скриптів. З цим все ясно, ми вже знаємо, що для цього її потрібно зберегти як аплет.
  2. Мета роботи скрипта – зміна властивостей заданого файлу. Ця частина вже готова.
  3. Оброблятися повинен файл, натягнутий на картинку скрипта. Ось тут і починається найцікавіше. З об'єктами, що «живуть» у нашому комп'ютері, постійно відбуваються різні події. Наприклад, файл може бути переміщений, скопійований або відкритий. Програма – запуститися, виконувати будь-які команди або не робити нічого, нарешті – завершитися. Щоб об'єкт «знав», як йому реагувати на ту чи іншу подію, потрібна спеціальна підпрограма. «обробник»(Handler). Коли аплет «кидають» файли, папки чи диски, Finder передає йому повідомлення-команду «Open» і список «кинутих» об'єктів. Ось для цієї події нам і доведеться написати обробник.

У найпростішому випадку він виглядатиме ось так:

on open FileList - словом "on" починається обробник події
— спочатку скрипт працює сам, не торкаючись жодних програм
set MyFile to item 1 of FileList
tell application «Finder» - Тепер командуємо Finder'ом
set file type of MyFile to"TEXT"
set creator type of MyFile to"ttxt"
end tell
end open — не забуваймо вказати, що обробник закінчився

Для тимчасового зберігання списку ми використовували змінну FileList. Називати змінні можна будь-якими поєднаннями латинських букв, але бажано те щоб ім'я можна було зрозуміти, що це змінна позначає.

Як бачите, обробляється перший елемент із переданого під час запуску скрипта списку. А решта? На них наша програма просто не зважає. Не важко здогадатися, що наступним кроком на шляху до досконалості буде обробка одночасно цілої купи файлів.

Раз, раз, ще раз…

Досі всі команди наших скриптів виконувалися по черзі в тому порядку, як записані. Тепер нам потрібно повторити одні й самі дії кілька разів поспіль. Доведеться організувати спеціальну структуру - цикл. AppleScript має для цього різноманітні керуючі команди. Можна повторити дії наперед задану кількість разів, або виконувати їх поки що дотримується деяка умова. Але такі цикли має практично будь-яку мову програмування. У нашому ж завдання ідеально підійде інший - "повторити для кожного елемента списку". З ним скрипт набуде наступного вигляду:

on open FileList
repeat with MyFile in FileList - Так записують початок циклу
tell application «Finder»
set file type of MyFile to"TEXT"
set creator type of MyFile to"ttxt"
end tell
end repeat - кінець керуючої структуриобов'язково відзначаємо
end open

Чого ще не вистачає нашій програмі, щоб стати професійною? А не вистачає їй «захисту від дурня». Адже «кинути» на картинку скрипта можна і папки, і ярлики, а працювати він має лише зі звичайними файлами.

Кого хочеш, вибирай

Отже, перебираючи елементи списку, потрібно визначати, чим кожен із них є. Тільки якщо попався звичайний файл- Змінювати його властивості. Вибрати, робити чи не робити будь-які операції, дозволяє ще одна керуюча конструкція. умовний оператор If. Визначити, чи об'єкт не є папкою або ярликом, можна, отримавши інформацію про нього командою «info for» з Standard Additions. Результатом її буде об'єкт класу "file information". Ось його властивості - «папка?» (folder) та «ярлик?» (alias) - ми і перевірятимемо. Оскільки нам потрібно, щоб елемент не був папкою Іне був ярликом, дві умови зв'яжемо логічною операцією «and» (коли достатньо виконання будь-якої однієї з умов - АБОпершого, АБОдругого – користуються зв'язкою «or»). Загалом, в результаті наших міркувань вийшов такий скрипт:

on open FileList
repeat with MyFile in FileList
set theInfo to info for MyFile
if(Folder of theInfo is false) and ¬
(alias of theInfo is false) then
tell application «Finder»
set file type of MyFile to"TEXT"
set creator type of MyFile to"ttxt"
end tell
end if
end repeat
end open

Зверніть увагу, що всі умови оператора If повинні бути записані в один рядок. Щоб зробити текст програми більш зручним для читання, буває корисно скласти довгий рядок, як зроблено в цьому прикладі. Для цього потрібно натиснути комбінацію клавіш Option-Return. У тексті з'явиться символ продовження – «¬».

Звичайно, за це невелике заняття я зміг лише трохи познайомити Вас із самими простими прийомамироботи з AppleScript Але, гадаю, Ви переконалися, що у цьому немає нічого складного. Пробуйте! Я сподіваюся продовжити цю тему в наступних статтях.