Apakah ada cara yang lebih cepat untuk mengubah aplikasi default yang terkait dengan jenis file pada OS X?


13

Apakah ada yang lebih nyaman daripada menggunakan RCDefaultApp atau Magic Launch , atau hanya berulang kali menekan tombol Ubah Semua di panel informasi Finder?

Saya berpikir tentang menulis skrip shell yang akan mengubah array CFBundleDocumentTypes dalam file Info.plist. Tetapi setiap aplikasi memiliki beberapa tombol (terkadang ikon) yang perlu diubah.

lsregister tidak dapat digunakan untuk membuat modifikasi spesifik ke basis data Layanan Peluncuran.

$ `locate lsregister` -h
lsregister: [OPTIONS] [ <path>... ]
                      [ -apps <domain>[,domain]... ]
                      [ -libs <domain>[,domain]... ]
                      [ -all  <domain>[,domain]... ]

Paths are searched for applications to register with the Launch Service database.
Valid domains are "system", "local", "network" and "user". Domains can also
be specified using only the first letter.

  -kill     Reset the Launch Services database before doing anything else
  -seed     If database isn't seeded, scan default locations for applications and libraries to register
  -lint     Print information about plist errors while registering bundles
  -convert  Register apps found in older LS database files
  -lazy n   Sleep for n seconds before registering/scanning
  -r        Recursive directory scan, do not recurse into packages or invisible directories
  -R        Recursive directory scan, descending into packages and invisible directories
  -f        force-update registration even if mod date is unchanged
  -u        unregister instead of register
  -v        Display progress information
  -dump     Display full database contents after registration
  -h        Display this help

Kerja yang luar biasa Lauri, internet penuh dengan orang-orang yang menyarankan Cmd-i, Change All. Saya akan memberikan dutipusaran waktu berikutnya saya mencoba Aplikasi lain yang mendaftar ulang lusinan jenis file.
ocodo

Jawaban:


12

duti

  1. Unduh penginstal pkg atau kompilasi dari sumber
  2. Simpan file seperti ini di suatu tempat:

    com.macromates.textmate public.shell-script all
    com.macromates.textmate public.unix-executable all
    com.macromates.textmate com.apple.property-list all
    org.videolan.vlc .avi all
    org.videolan.vlc .mkv all
    # ...
    
  3. duti $file.duti

Menemukan pengidentifikasi bundel atau ISK:

bundleid() {
  osascript -e "id of app \"$*\""
}

getuti() {
  local f="/tmp/me.lri.getuti.${1##*.}"
  touch "$f"
  mdimport "$f"
  mdls -name kMDItemContentTypeTree "$f"
  rm "$f"
}

lsapps

Saya menulis skrip Ruby sangat mirip duti sebelum saya mengetahuinya. Ini membutuhkan restart OS untuk menerapkan perubahan. Ini juga menimpa perubahan eksternal com.apple.LaunchServices.plist.

#!/usr/bin/env ruby

datafile = "#{ENV['HOME']}/Notes/lsapps.txt"
cachedir = "#{ENV['HOME']}/Library/Caches/me.lri.scripts"
cachefile = cachedir + "/lsapps"
`mkdir -p #{cachedir}; touch #{cachefile}`
cachetext = IO.read(cachefile)

a = []
IO.readlines(datafile).each do |line|
  line.strip!
  next unless line =~ /^([^#].*): (.+)/
  z = $1, $2

  bid = cachetext.scan(/#{z[0]}  (.*)/)[0]
  unless bid
    bid = `osascript -e 'id of app "#{z[0]}"'`.chomp
    next unless bid
    File.open(cachefile, "a") { |f| f.puts(z[0] + "  " + bid) }
  end

  z[1].strip.split(" ").each do |e|
    if e =~ /(.+):\/\/$/
      a << "{LSHandlerURLScheme='#{$1}';LSHandlerRoleAll='#{bid}';}"
    elsif e.include?(".")
      a << "{LSHandlerContentType='#{e}';LSHandlerRoleAll='#{bid}';}"
    else
      a << "{LSHandlerContentTag='#{e}';LSHandlerContentTagClass=\
'public.filename-extension';LSHandlerRoleAll='#{bid}';}"
    end
  end
end

system("defaults", "write", "com.apple.LaunchServices", "LSHandlers",
"(" + a.join(",") + ")")

`defaults write com.apple.LaunchServices LSQuarantine -bool false`

lsapps.txt

NetNewsWire Lite: feed:// public.rss
iCal: icaltodo icalevent
Google Chrome: chrome://
Safari: public.html
TextEdit: txt text md markdown csv
TextMate: public.shell-script public.unix-executable public.script ssh:// xml plist dict css rst tex sh pl py rb gemspec php js java c h m conf bash opml as cfm cfml class coffee ctp erb rhtml haml less msass scss yaml rd
VLC: avi mpg flv mkv mp4 flac 3gp
The Unarchiver: rar
Skim: pdf
iChm: chm
AppleScript Editor: scpt
Sequential: png jpg


Dikomentari oleh @kopischke ... dalam beberapa kasus, restart sistem operasi tidak diperlukan setelah penggunaan duti.
Graham Perrin

2
@ GrahamPerrin yang saya maksudkan adalah skrip Ruby saya sendiri (bukan duti) memerlukan restart. Saya benar-benar beralih ke duti terutama karena tidak memerlukan restart atau menimpa daftar.
Lri

1

Anda dapat mengubah aplikasi apa yang membuka semua AVI dengan mudah, tidak perlu skrip. Temukan file AVI, dan lakukan Dapatkan Info di dalamnya. Ini akan menunjukkan kepada Anda informasi file. Pilih program yang ingin Anda buka file, lalu klik tombol "Ubah Semua ...". Itu akan meminta Anda untuk mengubah asosiasi default. masukkan deskripsi gambar di sini

Sama seperti poin kecil, garpu sumber daya tidak dihapus secara bertahap, tetapi kode pembuatnya. Dengan demikian, sistem Mac OS yang lebih baru memiliki sistem yang lebih fleksibel untuk mengetahui cara membuka file. Aplikasi seharusnya berfungsi pada file yang tidak memiliki garpu sumber daya, tetapi beberapa aplikasi masih menggunakannya.


1
Mengubah aplikasi default dari dialog informasi membutuhkan sekitar 10 aksi mouse atau keyboard. Itu menjadi sangat menjengkelkan setelah beberapa ratus kali pertama.
Lri

Dalam hal ini, lihat jawaban ini di tempat lain di situs, itu akan menunjukkan kepada Anda bagaimana melakukan perubahan kumpulan baris perintah.
mauvedeity

(Jawaban yang ditautkan adalah tentang mengubah aplikasi default dari satu file dari garpu sumber dayanya.) Bahkan jika saya memodifikasi garpu sumber daya dari semua file saya yang ada, itu tidak akan mengubah aplikasi default file yang akan saya miliki di masa depan.
Lri
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.