Perché i file .scpt di Script Editor non vengono salvati come file di testo normale?


16

Script Editor (precedentemente AppleScript Editor pre-Yosemite 10.10) salva i .scptfile come file binari, non semplici file di testo.

Rende un po 'complicato lavorare con loro nei sistemi di controllo del codice sorgente.

Qualcuno sa perché questo è il caso? Esiste una storia di lunga data che ha reso necessario che questo formato di file fosse diverso dai semplici file di testo?


Non so perché, ma come commentato qui , potresti scrivere una macro hotkey / script per salvare come testo. È un dolore ma fattibile ...
Vic

2
Nel pannello Salva è possibile salvare gli script in diversi formati, incluso il testo normale.
Chris Page

"Ottieni script come testo dai file scpt?": Lists.apple.com/archives/applescript-users/2007/Mar/…
pkamb

Risposte:


20

L'articolo di William R. Cook contiene una storia e un'intuizione eccellenti da parte di coloro che sono stati coinvolti con AppleScript nel 1989.

Quello che segue è divertente e speculativo.

Conservazione dello spazio ed elaborazione

AppleScript è stato scritto in un momento in cui ogni byte e bit era prezioso. La codifica pigra di OS X come formati di elenchi di proprietà sarebbe inutile agli occhi di quei primi sviluppatori.

Il formato binario forniva un modulo pre-analizzato che evitava di duplicare il processo di analisi complesso, soggetto a errori e dispendioso in termini di tempo con ogni carico dal disco. Meglio caricare direttamente in memoria ed eseguire.

adattabile

Il salvataggio in un formato binario ha consentito a AppleScript di essere legato ai codici AppleEvent sottostanti piuttosto che al loro dizionario di terminologia di lunga durata.

Ciò consentirebbe a un AppleScript scritto e salvato su una versione di un'applicazione di aggiornarsi automaticamente alle modifiche terminologiche tra le versioni delle applicazioni target.

Un oggetto intero può essere chiamato 'intero' nello script ma salvato come codice a quattro caratteri ' int ' nella rappresentazione binaria. Il codice di quattro caratteri proveniente dal dizionario AppleScript fornito dal sistema operativo.

Se una futura terminologia AppleScript decidesse di modificare la parola utente per intero, la rappresentazione binaria potrebbe essere mappata al nome più recente.

Un rovescio della medaglia a questo è possibile vedere oggi. Scrivi un AppleScript sul dizionario di un'applicazione. Quindi rimuovere l'applicazione interamente dal tuo Mac. Cosa vedi in Script Editor quando apri lo script?

Almeno nelle versioni recenti, AppleScript Editor ha mostrato chevron che circondano il codice a quattro caratteri . Il codice è stato ricordato ed evidenziato. Non l'utente di fronte alla terminologia.

Questo probabilmente non è il vantaggio principale ma un possibile beneficio.

Distorsione moderna

Vale la pena riconoscere la nostra propensione moderna per i documenti di testo. L'esperienza ha insegnato a molti di noi che l'archiviazione di contenuti di valore in un formato binario comporta rischi. I formati binari sono spesso scarsamente documentati, opachi per l'utente finale e difficili da aprire quando il software proprietario non viene mantenuto.

Quando sono stati creati AppleScript e il suo formato binario, questa distorsione non era ancora formata. I limiti di archiviazione e di calcolo erano molto reali e valeva la pena ogni chilobyte o migliaia di cicli salvati.

Storia e origini

Le storie sull'origine di AppleScript sono meravigliose ma difficili da rintracciare in questi giorni. AppleScript ha cercato di essere una lingua amichevole, come la lingua inglese, ed era mozzafiato nella sua visione; l'implementazione effettiva è stata più difficile da ottenere!


16

In breve, .scptconsente la compatibilità con le versioni precedenti. Inoltre, applecript / javascript (ecc.) Può essere salvato con la stessa estensione, dato che Script Editorora supporta javascript.

Per decompilare .scptin shell:

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

La parte più rilevante:

osadecompile

Textmate è un editor di terze parti in grado di leggere .scpt:

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

La parte più rilevante:

[[OSAScript alloc] initWithCompiledData:];

Questa funzione deriva da OSAScript.hOS X SDK. In OSAScript.h, c'è questo lungo commento:

Dato un URL che individua uno script compilato, un'applicazione di script o una fonte di script, creare e restituire un descrittore di dati di script rilasciato automaticamente con il suo contenuto. È possibile utilizzare il descrittore per creare uno script con - [OSAScript initWithScriptDataDescriptor: ...]. Ciò consente di creare uno script con una specifica OSALanguageInstance. È possibile utilizzare + [OSALanguage languageForScriptDataDescriptor:] per ottenere la lingua per i dati dello script, che può quindi essere utilizzata per creare o selezionare un'istanza di lingua appropriata per un OSAScript. I dati di origine dello script possono essere compilati da - [OSAScript initWithScriptDataDescriptor: ...] oppure è possibile forzare il descrittore in una stringa (utilizzando i metodi NSAppleEventDescriptor) e creare esplicitamente un OSAScript con l'origine. + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL:

Fondamentalmente, quando salvato .scpt, OSALanguageInstanceviene anche salvato un descrittore nel file.

Se un file viene salvato come .applescript/ text, il sistema lo compilerà con l'ultima versione del linguaggio applecript. Uno script, ad esempio, scritto per una versione precedente di OS X potrebbe non funzionare su una nuova versione perché alcune funzioni sono diventate obsolete. Con .scpt, il sistema / l'app ha individuato la versione di applecipt a cui è destinata.

Dal 10.10, javascript può essere salvato .scpted eseguito correttamente.


Got `errOSASourceNotAvailable (-1756) .` cosa significa?
TCB13,

1
+1 per il link di decompilazione. @ TCB13 che succede quando il tuo file .scpt non è binario e dovrebbe essere così l'editor ha problemi a aggirare il problema è quello di chiudere la finestra che ti chiederà di fare una copia. La copia avrà quindi le informazioni salvate in un formato compilato in futuro. Tuttavia, tutto ciò sarà risolto nella risposta che sto per postare, che ho appreso da questa risposta più lontana contenente il comando di decompilazione.
Michael Dimmitt,

Solo per aggiungere a questo, è asprintdisponibile anche da < hasseg.org/asprint > che ti permetterà di "stampare piuttosto" file .scpt. L'unico inconveniente è che non funziona sui file JavaScript .scpt, solo su quelli AppleScript.
TJ Luoma,

1

Dopo aver visto il comando di decompilazione condiviso da Fartheraway ho scoperto la soluzione. Se vuoi che il file applecript (.scpt) non sia binario.

@fartheraway lo menziona anche in fondo alla sua risposta.

fai semplicemente tutto lo sviluppo con l'estensione .applescript.

Lo Script Editor sarà in grado di eseguire il codice e non lo salverà in un formato compilato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.