Script Editor .scpt dosyaları neden düz metin dosyaları olarak kaydedilmiyor?


16

Komut Dosyası Düzenleyicisi (önceden AppleScript Editor, Yosemite 10.10 öncesi) .scptdosyaları düz metin dosyaları olarak değil, ikili dosyalar olarak kaydeder .

Kaynak kodu kontrol sistemlerinde onlarla çalışmayı biraz zahmetli hale getirir.

Bunun neden böyle olduğunu bilen var mı? Bu dosya biçiminin düz metin dosyalarından başka bir şey olmasını gerektiren uzun soluklu bir geçmiş var mı?


Nedenini bilmiyorum ama burada yorumlandığı gibi , bunun yerine metin olarak kaydetmek için bir kısayol tuşu / komut dosyası makro yazabilirsiniz. Bu bir acı ama yapılabilir ...
Vic

2
Kaydet panelinde komut dosyalarını düz metin de dahil olmak üzere birçok farklı biçimde kaydedebilirsiniz.
Chris Sayfa

"Scpt dosyalarından komut dosyası metin olarak alınıyor mu?": Lists.apple.com/archives/applescript-users/2007/Mar/…
pkamb

Yanıtlar:


20

William R. Cook'un makalesi, 1989'da AppleScript ile ilgili olanlardan mükemmel bir geçmiş ve fikir içeriyor.

Ardından eğlenceli ve spekülatif.

Mekanın Korunması ve İşlemesi

AppleScript, her bayt ve bitin değerli olduğu bir zamanda yazılmıştır. OS X'in mülk listesi formatları olarak tembel kodlaması, bu erken geliştiricilerin gözünde boşa gider.

İkili biçim, karmaşık, hataya yatkın ve zaman alan ayrıştırma işleminin diskten her yükte çoğaltılmasını önleyen önceden ayrıştırılmış bir form sağladı. Doğrudan belleğe yüklemek ve çalıştırmak daha iyidir.

Adaptif

İkili bir biçimde kaydetmek, AppleScripts'in uzun biçimli terminoloji sözlüğü yerine temel AppleEvent kodlarına bağlanmasına izin verdi.

Bu, bir uygulamanın bir sürümüne karşı yazılan ve kaydedilen bir AppleScript'in, hedeflenen uygulamaların sürümleri arasındaki terminoloji değişikliklerine otomatik olarak güncellenmesini sağlar.

Bir tamsayı nesnesi kodda 'tamsayı' olarak adlandırılabilir, ancak int ikili gösterimde dört karakter kodu ' ' olarak kaydedilebilir . İşletim sistemi tarafından sağlanan AppleScript sözlüğünden gelen dört karakter kodu.

Gelecekteki bir AppleScript terminolojisi, kullanıcıya bakan tamsayı kelimesini değiştirmeye karar verirse, ikili gösterim daha yeni adla eşlenebilir.

Bugün bunun bir ters tarafını görmek mümkündür. Bir uygulamanın sözlüğüne karşı bir AppleScript yazın. Ardından uygulamayı Mac'inizden tamamen kaldırın. Komut dosyasını açtıktan sonra Komut Dosyası Düzenleyicisi'nde ne görüyorsunuz?

En azından son sürümlerde, AppleScript Editor dört karakter kodunu çevreleyen köşeli çift ayraçlar gösterdi . Kod hatırlandı ve vurgulandı. Kullanıcı terminolojiyle karşı karşıya değildir.

Bu muhtemelen birincil fayda değil, olası bir faydadır.

Modern Önyargı

Metin dokümanları için modern önyargımızı kabul etmeye değer. Deneyim, çoğumuza değerli içeriği ikili biçimde depolamanın risk taşıdığını öğretti. İkili biçimler genellikle kötü belgelenir, son kullanıcıya opaktır ve sahip olan yazılım korunmadığında açılması zordur .

AppleScript ve ikili biçimi oluşturulduğunda, bu önyargı henüz oluşmadı. Depolama ve hesaplama sınırları çok gerçekti ve kaydedilen her kilobayt veya binlerce döngü faydalıydı.

Tarihçe ve Kökenleri

AppleScript'in kökeni hikayeleri harika ama bugünlerde izlenmesi zor. AppleScript, samimi, İngilizce gibi bir dil olmaya çalıştı ve vizyonunu soluyordu; gerçek uygulama doğru almak zordu!


16

Kısacası .scptgeriye dönük uyumluluk sağlar. Ayrıca, el yazması / javascript (vb.), Script EditorArtık javascript'i desteklediğinden , aynı uzantıyla kaydedilebilir .

.scptKabukta koda etmek için :

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

En alakalı kısım:

osadecompile

Textmate, okuyabilen bir üçüncü taraf düzenleyicisidir .scpt:

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

En alakalı kısım:

[[OSAScript alloc] initWithCompiledData:];

Bu işlev OSAScript.hOS X SDK dışında gelir . Gelen OSAScript.hbu açıklama uzun vardır:

Derlenmiş bir komut dosyasını, komut dosyası uygulamasını veya komut dosyası kaynağını bulan bir URL verildiğinde, içeriği ile birlikte otomatik olarak oluşturulmuş bir komut dosyası veri tanımlayıcısı oluşturun ve döndürün. Açıklayıcıyı - [OSAScript initWithScriptDataDescriptor: ...] ile bir komut dosyası oluşturmak için kullanabilirsiniz. Bu, belirli bir OSALanguageInstance ile bir komut dosyası oluşturmanıza olanak tanır. Komut dosyası verilerinin dilini almak için + [OSALanguage languageForScriptDataDescriptor:] kullanabilirsiniz; daha sonra bir OSAScript için uygun bir dil örneği oluşturmak veya seçmek için kullanılabilir. Komut dosyası kaynak verileri - [OSAScript initWithScriptDataDescriptor: ...] tarafından derlenebilir veya tanımlayıcıyı bir dizeye zorlayabilir (NSAppleEventDescriptor yöntemlerini kullanarak) ve açıkça kaynakla bir OSAScript oluşturabilirsiniz. + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL:

Temel olarak, kaydedildiğinde .scpt, OSALanguageInstancedosyaya bir tanımlayıcı da kaydedilir.

Bir dosya .applescript/ metin olarak kaydedilirse , sistem dosyayı elma dilinin en son sürümüyle derler. Örneğin, OS X'in daha eski bir sürümü için yazılmış bir komut dosyası, bazı işlevler artık kullanılmadığından yeni bir sürümde çalışmayabilir. İle .scpt, sistem / uygulama bunun için hangi elma suyunun sürümü seçti var.

10.10'dan itibaren javascript kaydedilebilir .scptve doğru bir şekilde çalıştırılabilir.


`ErrOSASourceNotAvailable (-1756) 'var. Bu ne anlama geliyor?
TCB13

1
Decompile bağlantısı için +1. @ TCB13 .scpt dosyanız ikili olmadığında gerçekleşir ve bu nedenle düzenleyicinin sorunu çözmesi gerekir, bir kopya yapmanızı isteyecek pencereyi kapatmaktır. Bu kopya daha sonra bilgileri derlenmiş bir biçimde kaydedecektir. Ancak tüm bunlar çözülecek komut içeren bu fartheraway cevaptan öğrendiğim cevapta çözülecek.
Michael Dimmitt

Sadece buna eklemek için asprint< hasseg.org/asprint > adresinden de kullanılabilir . Tek dezavantajı JavaScript .scpt dosyalarında değil, sadece AppleScript dosyalarında çalışmasıdır.
TJ Luoma

1

Fartheraway'in paylaştığı kaynak kodunu gördükten sonra çözümü keşfettim. Applescript (.scpt) dosyasının ikili olmamasını istiyorsanız.

@fartheraway de cevabının alt kısmında bahseder.

tüm uygulamaları .applescript uzantısı ile yapın.

Komut Dosyası Düzenleyicisi kodu çalıştırabilir ve derlenmiş bir biçimde kaydetmez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.