Programlı / Komut Dosyası ile varsayılan Birlikte Aç ayarını değiştirme


8

Hangi uygulamanın dosya türünü programlı olarak / komut dosyasıyla açtığını değiştirmenin bir yolu var mı?

Temel olarak, bazen bir web sitesinde çalışıyorum ve tüm web dosyalarını bir metin düzenleyicisiyle (* .php, * .html, * .htm, vb ...) açılacak şekilde ayarlamak istiyorum.

Ancak, diğer zamanlarda, sadece dosyaları görüntülemek istiyorum, bu yüzden bir tarayıcı ile açmak istiyorum.

Şu anda, özellikle sadece klavyeyle çok sayıda dosyaya baktığımda öğeleri çalışan dock simgelerine sürükliyorum.

Temel olarak, istediğim küçük bir applecript / ne olursa olsun tüm açık ayarları değiştirir.
Bu şekilde, her açık program için bir komut dosyası alabilir ve ileri geri değiştirebilirsiniz.

Teşekkürler.

Yanıtlar:


10

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 writeve sözdizimi
  • Bir göz atın PlistBuddy. man PlistBuddyve/usr/libexec/PlistBuddy -h
  • Tüm bu saçmalığı tamamen atlayın ve RCDefaultApp kullanın

RCDefault yazılabilir mi? Sitelerine baktım ve öyle görünmüyor.
Sahte Adı

Boşver, ilgilendiğim tüm dosya türleri için tür bildirimleri var.
Sahte Adı

Harika bir yazı. Bildiğim kadarıyla LSHandlerRoleViewer, düzenlemenin aksine görüntüleme için varsayılan olmakla ilgili olup olmadığını merak ediyorum ( apple.stackexchange.com/a/49998/206073 beni bu satırlara getirdi ). Bir kişinin görüntüleme veya düzenleme için açılıp açılmadığını hangi bağlamlarda belirleyebileceğini bilmiyorum, ancak ... (konu dışı, CFBundleTypeRolebenzer değerleri kabul ediyor gibi görünüyor)
Brett Zamir

Ayrıca, com.apple.LaunchServices/com.apple.launchservices.securedaha sonraki MacOS sistemlerinde alan adı olabilir ...
Brett Zamir

2

Seçeneklerden biri aşağıdakileri düzenlemektir ~/Library/Preferences/.GlobalPreferences.plist:

defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType=com.adobe.pdf;LSHandlerRoleAll=net.sourceforge.skim-app.skim;}'

Sen edebilirsiniz girdileri zaten var olmadığını kontrol etmek PlistBuddy kullanmak , ancak yeniden başlatmadan veya Başlat Hizmetleri veritabanını yeniden olmadan değişiklikleri uygulamak için herhangi bir yol bulmuş değil.

Duti'yi kullanarak , bunu duti ~/.dutikaydettikten sonra çalıştırabilirsiniz ~/.duti:

net.sourceforge.skim-app.skim .pdf all

1

Sorunuza gerçekten cevap vermiyor, ancak bir çözüm olabilir.

Müfettiş Finder bilgileri sunar seçili dosya veya dosyaları:

+ +I

Özet Bilgi zaman Finder penceresi yararlıdır birden fazla dosya seçilir:

^+ +I

Aynı türden birden fazla dosya seçerseniz, yukarıdaki yöntemlerden herhangi biri bu dosyalar için Birlikte aç: özelliğini kolayca değiştirmenize olanak tanır .


0

Tam sorunuza bir cevap değil, başka bir olası çözüm. Açmak için -a argümanıyla komut satırından belirli bir uygulamayla bir belge açabilirsiniz.

Örneğin, geçerli dizindeki tüm html dosyalarını açın.

> open -a 'Google Chrome' *.html

Dizin.html ve javascript denetleyicisi dosyalarını Atom metin düzenleyicisinde açın:

> open -a 'atom' index.html js/controllers/*.js

Gereksinimlerinize bağlı olarak, bunu seçilen dosya yollarını bağımsız değişken olarak alarak bir kısayol tuşu atanabilecek bir Automator hizmeti olarak değiştirebilirsiniz.

Aşağıda, dosyaları girdi olarak alan ve seçilen dosyaları Chrome'da açan bir örnek Automator AppleScript:

on run {input, parameters}
set openFiles to "open -a 'Google Chrome' " --note the trailing space
set filePaths to {}

--covert the filePaths to posix style
repeat with i from 1 to count of input
    set aFile to input's item i as alias
    set aFile to quoted form of POSIX path of aFile
    set filePaths's end to aFile
end repeat

--convert filePaths list to a string delimited by spaces
set tid to text item delimiters
set text item delimiters to " "
set filePaths to filePaths as text
set text item delimiters to tid

--Open files via commandline
do shell script openFiles & filePaths
return input

bitiş koşusu

Açıkçası, uygulama adını "Sublime" metin düzenleyicisini değiştirebilir, başka bir hizmet olarak kaydedebilir ve her iki kısayol tuşunu da atayabilirsiniz.

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.