Bu yapılabilir, ancak muhtemelen düşündüğünüz kadar basit değildir. Tek Tip Tip Tanımlayıcıları çok iyi tanımanız gerekir. Wikipedia'nın Tek Tip Tür Tanımlayıcısı sayfasına bakın.
OS X, tercih edilen dosya ilişkilendirmeleri hakkındaki bilgileri adıyla bir tercih dosyasında depolar com.apple.LaunchServices.plist
. Bu dosyayı bulmaya ve değiştirmeye çalışmadan önce, OS X'in varsayılanlar için alan adı hiyerarşisini (diğer adıyla "ayarlar") tanımanızı öneririz. Bununla ilgili iyi bir makale burada bulunabilir . (Feragatname: Bu sitede bir şey satıyorlar gibi görünüyor. Ne olduğunu bilmiyorum ve onlarla hiçbir ilişkim yok, açıklama sadece iyi bir şey.)
Artık varsayılanlar ve UTI'ler hakkında her şeyi bildiğinize göre (tıp türü değil, er), bir komut dosyasından / komut satırından dosya ilişkilendirmeleri ayarlamak hakkında konuşabiliriz.
İlk olarak, ilişkilendirmek istediğiniz dosyaları tanımlamak için doğru yolu bilmeniz gerekir.
İYE'lerin nasıl önemli olduğunu söylediğimi hatırlıyor musunuz? Bir dosyayı tanımlamanın birden çok yolu vardır. Türün sisteminizde resmi olarak bildirilip bildirilmediğine bağlıdır. Örneğin, TextMate veya TextWrangler gibi iyi metin editörleri, bunları sisteminizde kullandığınızda tür hiyerarşisine oldukça az sayıda tür bildirimi ekler. Bununla birlikte, bu uygulamalara sahip değilseniz, bu türleri bildirmemiş olabilirsiniz.
Tamam, yeterli konuşma. Örnekler:
Bir dosya için UTI'yi edinin:
$ mdls myFile.xml
...
kMDItemContentType = "public.xml"
kMDItemContentTypeTree = (
"public.xml",
"public.text",
"public.data",
"public.item",
"public.content"
)
...
Tamam iyi. Kullanabileceğimiz açık bir içerik türü. Bunu bir yere yazın.
$ mdls myFile.myExtn
...
kMDItemContentType = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree = (
"public.data",
"public.item"
)
...
Hata. OS X ".myExtn" dosyalarını bilmiyor. Böylece, hiçbir şey için kullanamayacağımız dinamik bir İYE yarattı. Ve ana türler kullanışlı olamayacak kadar genel.
Şimdi dosyalarımızın ne olduğunu bildiğimize göre, LaunchServices.plist dosyasına bakalım ve neler yapabileceğimize bakalım:
$defaults read com.apple.LaunchServices
{
...
LSHandlers = (
{
LSHandlerContentType = "public.html";
LSHandlerRoleAll = "com.apple.safari";
LSHandlerRoleViewer = "com.google.chrome";
},
...
{
LSHandlerContentTag = myExtn;
LSHandlerContentTagClass = "public.filename-extension";
LSHandlerRoleAll = "com.macromates.textmate";
},
...
);
...
}
Bu nedenle, kullanılacak "iyi" bir içerik türünüz olduğunda, ilk yapı daha iyidir. Aksi takdirde diğer yapı. Not: Bu dosyada başka yapılar da var, ancak sorduğunuz şeyle alakalı değiller. Sadece çıktıya baktığınızda orada olduklarını bilin.
Gördüğünüz gibi, kullanmak istediğiniz uygulama için UTI'yi bulmanız gerekir. Safar ve TextMate için UTI'ler yukarıdaki örneğimde, ancak bir uygulama için UTI'yi genel olarak bulmak için:
$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
...
Not: LSHandlerRoleAll ve LSHandlerRoleViewer arasındaki farkı oluşturan hiçbir fikrim yok . Bu konuda hiçbir yerde belge bulamıyorum. Ne yapmak görmem olduğunu LSHandlerRoleAll olduğu zaman% 99 sadece bir set (yani hiçbir LSHandlerRoleViewer tüm altındadır) ve bunu birlikte türünü ilişkilendirmek için arzu söz konusu uygulamanın İYE ayarlanmış olduğunu.
Sizi bu kadar ileri götürdükten sonra, okuyucu için bir egzersiz olarak istediğiniz değerleri NASIL ayarlayacağım. Bunlarla uğraşmak biraz tehlikeli olabilir. Bir dosyayı bozmanız ve dosya ilişkilendirmelerinizin HERHANGİ BİRİNİ çalışmamanız tamamen mümkündür. Sonra dosyayı atmanız ve baştan başlamanız gerekiyor.
Bazı ipuçları:
- Okuma
defaults write
ve sözdizimi
- Bir göz atın
PlistBuddy
. man PlistBuddy
ve/usr/libexec/PlistBuddy -h
- Tüm bu saçmalığı tamamen atlayın ve RCDefaultApp kullanın