Ini bisa dilakukan, tetapi mungkin tidak semudah yang Anda kira. Anda harus terbiasa dengan Pengenal Jenis Seragam. Lihatlah halaman Pengidentifikasi Jenis Seragam Wikipedia .
OS X menyimpan informasi tentang asosiasi file pilihan dalam file preferensi dengan nama com.apple.LaunchServices.plist
. Sebelum Anda mencoba mencari dan memodifikasi file itu, saya sarankan Anda membiasakan diri dengan hierarki domain OS X untuk default (alias "pengaturan"). Artikel yang layak tentang ini dapat ditemukan di sini . (Penafian: mereka sepertinya menjual sesuatu di situs itu. Saya tidak tahu apa itu dan tidak memiliki hubungan dengan mereka, penjelasannya hanya bagus.)
Sekarang setelah Anda mengetahui semua tentang default dan UTI (eh, bukan jenis medis), sekarang kita dapat berbicara tentang pengaturan asosiasi file dari skrip / baris perintah.
Pertama, Anda harus mengetahui cara yang tepat untuk mengidentifikasi file yang ingin Anda hubungkan.
Ingat bagaimana saya mengatakan ISK penting? Ada beberapa cara untuk mengidentifikasi file. Itu tergantung pada apakah jenisnya telah dinyatakan secara resmi di sistem Anda atau tidak. Sebagai contoh, editor teks yang layak seperti TextMate atau TextWrangler akan menambahkan beberapa jenis deklarasi ke hirarki jenis ketika Anda menggunakannya di sistem Anda. Namun, jika Anda tidak memiliki aplikasi-aplikasi itu, Anda mungkin tidak memiliki tipe-tipe yang dideklarasikan.
OK, cukup bicara. Contoh:
Dapatkan UTI untuk file:
$ mdls myFile.xml
...
kMDItemContentType = "public.xml"
kMDItemContentTypeTree = (
"public.xml",
"public.text",
"public.data",
"public.item",
"public.content"
)
...
OK keren. Jenis konten eksplisit yang dapat kita gunakan. Tuliskan itu di suatu tempat.
$ mdls myFile.myExtn
...
kMDItemContentType = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree = (
"public.data",
"public.item"
)
...
Ups. OS X tidak tahu tentang file ".myExtn". Jadi, itu menciptakan UTI dinamis yang tidak bisa kita gunakan untuk apa pun. Dan tipe induknya terlalu generik untuk berguna.
Sekarang kita tahu apa file kita, mari kita lihat file LaunchServices.plist dan lihat apa yang bisa kita lakukan:
$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";
},
...
);
...
}
Jadi, ketika Anda memiliki tipe konten "baik" untuk digunakan, konstruk pertama lebih baik. Kalau tidak, konstruk lainnya. Catatan, ada konstruksi lain di file itu, tetapi mereka tidak relevan dengan apa yang Anda minta. Ketahuilah mereka ada di sana ketika Anda melihat melalui output.
Seperti yang Anda lihat, Anda harus menemukan UTI untuk aplikasi yang ingin Anda gunakan. UTI untuk Safar dan TextMate ada dalam contoh saya di atas, tetapi untuk menemukan UTI secara umum untuk suatu aplikasi:
$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
...
CATATAN: Saya tidak tahu apa yang merupakan perbedaan antara LSHandlerRoleAll dan LSHandlerRoleViewer. Saya tidak dapat menemukan dokumentasi di mana pun itu. Apa yang saya lakukan lihat adalah bahwa 99% dari waktu LSHandlerRoleAll adalah hanya satu set (yaitu tidak ada LSHandlerRoleViewer sama sekali) dan bahwa itu diatur ke ISK untuk aplikasi yang Anda inginkan untuk mengasosiasikan jenis dengan.
Setelah membawa Anda sejauh ini, saya akan meninggalkan BAGAIMANA untuk menetapkan nilai-nilai yang Anda inginkan sebagai latihan untuk pembaca. Bercak dengan hal-hal ini bisa agak berbahaya. Sangat mungkin bagi Anda untuk mengacaukan file dan tidak memiliki APAPUN dari asosiasi file Anda bekerja. Maka Anda harus membuang file dan memulai dari awal.
Beberapa petunjuk:
- Baca terus
defaults write
dan sintaksnya
- Lihatlah
PlistBuddy
. man PlistBuddy
dan/usr/libexec/PlistBuddy -h
- Lewati semua omong kosong ini sama sekali dan gunakan RCDefaultApp
LSHandlerRoleViewer
, saya bertanya-tanya apakah itu mungkin berhubungan dengan menjadi default untuk melihat sebagai lawan mengedit ( apple.stackexchange.com/a/49998/206073 membuat saya mengerti). Namun saya tidak tahu dalam konteks apa seseorang dapat menentukan apakah seseorang membuka untuk melihat atau mengedit, (di luar topik,CFBundleTypeRole
sepertinya ia menerima nilai yang sama)com.apple.LaunchServices/com.apple.launchservices.secure
ini adalah domain dalam sistem MacOS yang lebih baru ...Salah satu opsi adalah mengedit
~/Library/Preferences/.GlobalPreferences.plist
:defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType=com.adobe.pdf;LSHandlerRoleAll=net.sourceforge.skim-app.skim;}'
Anda dapat menggunakan PlistBuddy untuk memeriksa apakah entri sudah ada , tetapi saya belum menemukan cara untuk menerapkan perubahan tanpa memulai ulang atau membangun kembali basis data Layanan Peluncuran.
Menggunakan duti , Anda dapat menjalankan
duti ~/.duti
setelah menyimpan ini sebagai~/.duti
:sumber
Itu tidak benar-benar menjawab pertanyaan Anda, tetapi mungkin menjadi solusi.
The Inspektur di Finder menyajikan informasi untuk saat ini dipilih file, atau file:
⌘+ ⌥+I
Jendela Ringkasan Info Finder berguna ketika beberapa file dipilih:
^+ ⌘+I
Jika Anda memilih beberapa file dengan tipe yang sama, maka metode mana pun di atas akan memungkinkan Anda untuk dengan mudah mengganti properti Open with: untuk file-file itu.
sumber
Bukan jawaban untuk pertanyaan persis Anda, tetapi solusi lain yang mungkin. Anda dapat membuka dokumen dengan aplikasi spesifik dari baris perintah dengan argumen -a untuk dibuka.
Misalnya, buka semua file html di direktori saat ini.
Buka index.html dan file pengontrol javascript di editor teks Atom:
Bergantung pada kebutuhan Anda, Anda dapat memodifikasi ini menjadi layanan Automator yang dapat ditetapkan sebagai tombol pintas, dengan mengambil jalur file yang dipilih sebagai argumen.
Berikut ini contoh Automator AppleScript yang menerima file sebagai input dan membuka file yang dipilih di Chrome:
akhirnya jalankan
Jelas, Anda dapat mengubah nama aplikasi "Sublime" editor teks, menyimpannya sebagai layanan lain, dan menetapkan keduanya tombol pintasan.
sumber