Default Application für alle Dateien eines Typs setzen

Ich musste für ein Skript die default Application für XML-Dateien ändern und das beim ersten Aufruf des AppleScripts….
dieser Code

on setDefaultApplication()
  set myApp to " LSHandlerRoleAll = \"com.hubionmac.makemylist\""
  set xml to "public.xml"
  set changed to false
  
  if getDefaultApplicatonFor(xml) does not contain myApp then
    do shell script "defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType = \"public.xml\";LSHandlerRoleAll = \"com.hubionmac.makemylist\";}'"
    set changed to true
  end if
  if changed is true then
    do shell script "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user"
    display alert "XML werden nun automatisch mit MakeMyList zuerst geöffnet."
    quit
  end if
end setDefaultApplication

on getDefaultApplicatonFor(filetype2Search)
  try
    repeat with i from 0 to 5
      set thegrep to do shell script "defaults read com.apple.LaunchServices 'LSHandlers' | grep -A " & i & " '" & filetype2Search & "'"
      if last paragraph of thegrep contains "}" then
        return thegrep
      end if
    end repeat
  end try
  return ""
end getDefaultApplicatonFor

									


funktioniert soweit zwar, hat aber die entsprechende com.apple.LaunchServices.plist etwas unaufgeräumt zurückgelassen. So war nach dem Edit auf einmal für csv-Dateien ein doppelter Eintrag zu finden, das Ergebnis war also ein kleine Chaos, was dem Nutzer selbst nicht unbedingt auffallen muss.
Eine deutlich elegantere Lösung scheint da duti zu sein. Diese kleine Terminal-Programm kann einfach über die Zeile duti -s com.hubionmac.makemylist xml all das selbe erreichen. Und mit duti -x xml gibt es auch gleich Auskunft über die aktuelle Default-Application.
Also defaults write.appe LaunchServices sucks!
duit rocks!

One thought on “Default Application für alle Dateien eines Typs setzen

  1. […] nötigenfalls sich hierfür eintragen. Da das von Hand nur unsauber funktioniert, habe ich hierfür duti. Kurz die Routine sieht so […]

Leave a Reply