Gibt es eine schnellere Möglichkeit, Standard-Apps für Dateitypen unter OS X zu ändern?

13

Gibt es etwas Bequemeres, als RCDefaultApp oder Magic Launch zu verwenden oder einfach wiederholt auf die Schaltfläche Alle ändern in den Informationsfenstern von Finder zu klicken ?

Ich dachte darüber nach, ein Shell-Skript zu schreiben, das die CFBundleDocumentTypes-Arrays in Info.plist-Dateien ändert. Jede App verfügt jedoch über mehrere Schlüssel (manchmal ein Symbol), die geändert werden müssten.

lsregister kann nicht verwendet werden, um bestimmte Änderungen an der Launch Services-Datenbank vorzunehmen.

$ `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
Lri
quelle
Fantastische Arbeit Lauri, das Netz ist voll von Leuten, die Cmd-i, Change All vorschlagen. Das dutinächste Mal, wenn ich eine andere App ausprobiere, die Dutzende von Dateitypen neu registriert, werde ich einen Wirbel geben .
ocodo

Antworten:

12

duti

  1. Laden Sie das pkg-Installationsprogramm herunter oder kompilieren Sie es von der Quelle
  2. Speichern Sie eine Datei wie diese irgendwo:

    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

Finden von Bundle-IDs oder UTIs:

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

Ich habe ein Ruby-Skript geschrieben, ähnlich wie duti, bevor ich davon erfuhr. Es erfordert jedoch einen Neustart des Betriebssystems, um die Änderungen zu übernehmen. Es überschreibt auch alle externen Änderungen an 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
Lri
quelle
Kommentiert von @kopischke ... in einigen Fällen ist ein Neustart des Betriebssystems nicht erforderlich Verwendung von Duti folgen.
Graham Perrin
2
@GrahamPerrin Ich meinte, dass mein eigenes Ruby-Skript (nicht duti) neu gestartet werden muss. Eigentlich bin ich zu DUTI gewechselt, weil es keinen Neustart oder Überschreiben der Pliste erfordert.
Lri
1

Sie können ganz einfach ändern, mit welcher Anwendung alle AVIs geöffnet werden, ohne dass ein Skript erforderlich ist. Suchen Sie eine AVI-Datei und rufen Sie sie ab. Dies zeigt Ihnen die Dateiinformationen. Wählen Sie das Programm aus, mit dem Sie die Dateien öffnen möchten, und klicken Sie dann auf die Schaltfläche "Alle ändern ...". Dadurch werden Sie aufgefordert, die Standardzuordnung zu ändern. Bildbeschreibung hier eingeben

Nur als kleiner Punkt, Ressourcengabeln werden nicht aus dem Programm genommen, aber Erstellercodes. Aus diesem Grund verfügen neuere Mac OS-Systeme über ein flexibleres System, um das Öffnen von Dateien zu erarbeiten. Anwendungen sollen auf Dateien funktionieren, die keine Ressourcengabeln haben, aber einige Anwendungen verwenden sie immer noch.

Mauvedeität
quelle
1
Das Ändern der Standard-App in einem Informationsdialog erfordert ungefähr 10 Maus- oder Tastaturaktionen. Das wird nach den ersten paar hundert Malen ziemlich ärgerlich.
Lri
In diesem Fall finden Sie diese Antwort an einer anderen Stelle auf der Website. Dort erfahren Sie, wie Sie eine Befehlszeilen-Stapeländerung vornehmen.
Mauvedeity
(Bei der verknüpften Antwort geht es darum, die Standard-App einer einzelnen Datei von ihrem Ressourcen-Zweig aus zu ändern.) Auch wenn ich die Ressourcen-Zweige aller meiner vorhandenen Dateien geändert hätte, hätte dies keine Auswirkungen auf die Standard-Apps der Dateien in der Zukunft.
Lri