Почему файлы Script Editor Script Editor не сохраняются в виде текстовых файлов?


16

Редактор скриптов (ранее AppleScript Editor до Yosemite 10.10) сохраняет .scptфайлы в виде двоичных файлов, а не текстовых файлов.

Это делает работу с ними в системах управления исходным кодом несколько громоздкой.

Кто-нибудь знает, почему это так? Есть ли давняя история, которая требовала, чтобы этот формат файла был чем-то иным, чем обычными текстовыми файлами?


Я не знаю, почему это так, но, как прокомментировано здесь , вы могли бы написать макрос горячей клавиши / скрипта, чтобы вместо этого сохранить текст. Это боль, но выполнимо ...
Вик

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

«Получить сценарий как текст из SCPT файлов?»: Lists.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, система скомпилирует его с последней версией языка applecript. Например, сценарий, написанный для более старой версии OS X, может не работать в новой версии, поскольку некоторые функции устарели. С .scptпомощью системы / приложения можно определить, для какой версии applecipt она предназначена.

С 10.10 javascript может быть сохранен .scptи выполнен правильно.


Получил `errOSASourceNotAvailable (-1756) .` Что это значит?
TCB13

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

Просто чтобы добавить к этому, есть также asprintдоступный от < hasseg.org/asprint >, который позволит вам «красиво печатать» файлы .scpt. Единственным недостатком является то, что он не работает с файлами .scpt JavaScript, только с файлами AppleScript.
TJ Luoma

1

После просмотра команды декомпиляции, которой поделился Fartheraway, я обнаружил решение. Если вы хотите, чтобы файл applecript (.scpt) не был двоичным.

@fartheraway также упоминает об этом в нижней части своего ответа.

просто сделайте всю разработку с расширением .applescript.

Редактор сценариев сможет запускать код и не будет сохранять его в скомпилированном формате.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.