Apakah mungkin untuk meminta database layanan peluncuran untuk aplikasi yang akan membuka file sewenang-wenang atau jenis UTI?

11

Saya dapat menggunakan mdl untuk menunjukkan Uniform Type Identifier (UTI) untuk file yang sewenang-wenang serta hierarki jenis yang merupakan superset dari UTI tertentu.

mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType     = "public.ksh-script"
kMDItemContentTypeTree = (
    "public.ksh-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType     = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
    "com.apple.terminal.shell-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

Apakah ada alat yang dapat menunjukkan Aplikasi mana yang telah terdaftar untuk ISK tertentu selain coba-coba?

Jelas dari pemeriksaan bahwa foo.commandfile tersebut akan dibuka oleh Terminal.app, tetapi sama sekali tidak jelas bahwa foo.ksh saat ini milik TextEdit.app.

Saya ingin dapat membaca basis data Layanan Peluncuran Mac OS X secara langsung tanpa harus menggunakan openuntuk melihat aplikasi mana yang dipilih berdasarkan UTI. Ini seperti memiliki --preview --verbosesaklar untuk terbuka untuk memberi tahu saya apa yang akan dilakukan daripada melakukannya.

Bahkan yang lebih baik adalah cara untuk membuat daftar semua aplikasi yang dapat membuka ISK itu, bahkan jika mereka bukan aplikasi yang disukai.

Untuk mendapatkan informasi sekunder ini, saya harus membuat atau menemukan file untuk setiap jenis minat dan menggunakan Finder untuk secara manual menunjukkan aplikasi mana yang dapat membuka UTI itu.

masukkan deskripsi gambar di sini

Saya benar-benar ingin dapat mengakses data ini secara programatik dari terminal.

bmike
sumber
Penyelesaian zsh tampaknya menarik, tapi saya tidak melihat bagaimana mendapatkannya sebagai stdout. Saya akan melihat ke dalam kode sumber AppApplications dan melihat apakah biner berfungsi pada Lion atau saya dapat mengkompilasinya. Ini adalah pasangan yang luar biasa - terima kasih!
bmike

Jawaban:

6

Duti Andrew Mortensen adalah CLI yang akan mencantumkan penangan ISK:

  • -d <uti> daftar penangan default;
  • -l <uti> daftar semua penangan terdaftar.

Lihat halaman manual untuk duti .

EDIT: seperti yang ditunjukkan Lri dalam jawaban ini , duti tampaknya tidak mencantumkan semua aplikasi yang mungkin (mungkin karena tidak memperhitungkan warisan UTI? Itu akan menjadi masalah untuk penyelidikan lebih lanjut). Solusi yang direkomendasikannya, AllApllications jelas akan menjadi jawaban yang lebih baik.

kopischke
sumber
Ada beberapa aplikasi yang hilang yang akan ditampilkan di menu terbuka dengan.
Lri
Sangat aneh. Bisakah Anda memberi tahu saya mana yang tidak ada?
kopischke
Saya mengedit jawaban saya di pertanyaan lain untuk memasukkan contoh output dari duti.
Lri
Meskipun duti ditulis dengan baik, sekarang menggunakan API yang sudah tidak digunakan lagi. Saya merekomendasikan untuk melihat developer.apple.com/library/prerelease/mac/documentation/Carbon/…
Mugen
OK - menginstal ini dengan homebrew mengetuk home run. Terima kasih banyak!
bmike
11

Anda dapat menggunakan perintah ini untuk memeriksa basis data layanan peluncuran. Opsi -dump memberi Anda seluruh basis data, maka Anda dapat menyalurkannya ke grep dan mencari apa pun yang Anda suka.

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'

Chris
sumber
Saya mungkin perlu mengajukan pertanyaan tentang cara memproses dump ini untuk meludah bundel aplikasi atau lokasi file mdimporter tertentu yang mem-parsing kMDItemContentType spesifik - tetapi ini sangat membantu. Terima kasih
bmike