Чому файли .scpt Script Editor не зберігаються як текстові файли?


16

Редактор сценаріїв (раніше AppleScript Editor до Yosemite 10.10) зберігає .scptфайли як бінарні файли, а не текстові файли.

Це робить роботу з ними в системах управління вихідним кодом дещо громіздкою.

Хтось знає, чому це так? Чи є якась давня історія, яка вимагала цього формату файлу, щось інше, ніж звичайні текстові файли?


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

2
На панелі «Зберегти» ви можете зберігати сценарії в декількох різних форматах, включаючи звичайний текст.
Кріс Пейдж

"Отримати скрипт у вигляді тексту з файлів scpt?": List.apple.com/archives/applescript-users/2007/Mar/…
pkamb

Відповіді:


20

Документ Вільяма Р. Кука містить чудову історію та розуміння тих, хто займався AppleScript в 1989 році.

Далі - весело та умоглядно.

Збереження простору та обробка

AppleScript був написаний у той час, коли кожен байт і біт були цінними. Ледаче кодування OS X як формати списку властивостей було б марно на очах у тих ранніх розробників.

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

Адаптивний

Збереження у двійковому форматі дозволило AppleScripts прив’язати до базових кодів AppleEvent, а не їх словник тривалої форми термінології.

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

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

Якщо майбутня терміналогія AppleScript вирішила змінити слово, що стоїть перед користувачем, на ціле число, двійкове представлення може зіставити нове ім’я.

Зворотній бік цього можна побачити сьогодні. Напишіть AppleScript проти словника програми. Потім видаліть програму повністю зі свого Mac. Що ви бачите в редакторі сценаріїв після відкриття сценарію?

Принаймні в останніх версіях AppleScript Editor показав шеврони, що оточують чотири символьний код . Код запам'ятовується та виділяється. Не користувач стикається з термінологією.

Це, мабуть, не первинна вигода, а можлива вигода.

Сучасні упередження

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

Коли було створено AppleScript та його двійковий формат, це зміщення ще не було сформовано. Обмеження для зберігання та обчислення були дуже реальними, і кожен кілобайт або тисяча збережених циклів були варті.

Історія та витоки

Історії походження AppleScript прекрасні, але їх важко відстежити в наші дні. AppleScript намагався бути дружньою, як англійська мова, мовою, і захоплював подих своїм баченням; фактичну реалізацію було складніше отримати правильно!


16

Коротше кажучи, .scptдозволяє зворотна сумісність. Крім того, яблуко / javascript (тощо) можна зберегти з тим же розширенням, враховуючи те, що Script Editorтепер підтримується javascript.

Для декомпіляції .scptв оболонку:

https://github.com/rupa/applescript/blob/master/decompile.sh

Найбільш відповідна частина:

osadecompile

Textmate - сторонній редактор, який може читати .scpt:

https://github.com/textmate/textmate/blob/master/Applications/decompile_as/src/decompile_as.mm

Найбільш відповідна частина:

[[OSAScript alloc] initWithCompiledData:];

Ця функція виходить OSAScript.h, окрім OS X SDK. У OSAScript.hцьому є тривалий коментар:

Надавши URL-адресу, яка визначає скомпільований сценарій, програму сценарію чи джерело сценарію, створіть та поверніть авторизований дескриптор даних сценарію із його вмістом. Ви можете використовувати дескриптор для створення сценарію з - [OSAScript initWithScriptDataDescriptor: ...]. Це дає змогу створити сценарій із певним OSALanguageInstance. Ви можете використовувати + [OSALanguage languageForScriptDataDescriptor:], щоб отримати мову для даних сценарію, яка потім може бути використана для створення або вибору відповідного екземпляра мови для OSAScript. Дані джерела сценарію можуть бути зібрані за допомогою [OSAScript initWithScriptDataDescriptor: ...], або ви можете примусити дескриптор до рядка (використовуючи методи NSAppleEventDescriptor) і явно створити OSAScript із джерелом. + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL:

В принципі, при збереженні .scpt, OSALanguageInstanceдескриптор також зберігається в файлі.

Якщо файл збережено як .applescript/ text, система скомпілює його з останньою версією мови яблучного сценарію. Наприклад, сценарій, написаний для старішої версії OS X, може не працювати на новій версії, оскільки деякі функції застаріли. З .scpt, система / додатки є вибрати, яку версію applescipt вона призначена для.

Починаючи з 10.10, javascript можна зберігати .scptі виконувати правильно.


Отримав `errOSASourceNotAvailable (-1756) .` Що це означає?
TCB13

1
+1 для декомпіляції посилання. @ TCB13, що трапляється, коли ваш .scpt файл не є двійковим, і це має бути так, щоб у редактора виникли проблеми з проблемою, щоб закрити вікно, яке попросить вас зробити копію. Потім копія збереже інформацію, що зберігається у складеному форматі. Однак все це буде вирішено у відповіді, яку я збираюсь опублікувати, про яку я дізнався з цієї віддаленої відповіді, що містить команду декомпіляції.
Майкл Діммітт

Для того, щоб додати до цього, на веб- asprintсайті < hasseg.org/asprint > ви також можете придбати .scpt файли. Єдиний недолік - це те, що він не працює на JavaScript .scpt файли, тільки на AppleScript.
TJ Luoma

1

Побачивши команду декомпіляції, яку поділяв Fartheraway, я знайшов рішення. Якщо ви хочете, щоб файл applescript (.scpt) не був двійковим.

@fartheraway також згадує це у нижній частині своєї відповіді.

просто зробіть усі розробки з розширенням .applescript.

Редактор сценаріїв зможе запустити код, і він не збереже його у складеному форматі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.