Dies ist machbar, aber wahrscheinlich nicht so einfach, wie Sie vielleicht denken. Sie müssen sich mit Uniform Type Identifiers vertraut machen. Schauen Sie sich die Wikipedia Uniform Type Identifier- Seite an.
OS X speichert Informationen zu bevorzugten Dateizuordnungen in einer Voreinstellungsdatei mit dem Namen com.apple.LaunchServices.plist
. Bevor Sie versuchen, diese Datei zu finden und zu ändern, sollten Sie sich mit der Domänenhierarchie von OS X für Standardeinstellungen (auch als "Einstellungen" bezeichnet) vertraut machen. Einen anständigen Artikel dazu finden Sie hier . (Haftungsausschluss: Sie scheinen etwas auf dieser Website zu verkaufen. Ich weiß nicht, was es ist und habe keine Verbindung zu ihnen, die Erklärung ist nur eine gute.)
Jetzt, da Sie alles über Standardeinstellungen und UTIs wissen (ähm, nicht die medizinische Art), können wir jetzt über das Festlegen von Dateizuordnungen über eine Skript- / Befehlszeile sprechen.
Zunächst müssen Sie wissen, wie Sie die Dateien identifizieren können, für die Sie eine Zuordnung vornehmen möchten.
Erinnern Sie sich, wie ich sagte, dass Harnwegsinfekte wichtig waren? Es gibt mehrere Möglichkeiten, eine Datei zu identifizieren. Dies hängt davon ab, ob der Typ auf Ihrem System offiziell deklariert wurde oder nicht. Beispielsweise fügen anständige Texteditoren wie TextMate oder TextWrangler der Typhierarchie einige Typdeklarationen hinzu, wenn Sie sie auf Ihrem System verwenden. Wenn Sie diese Anwendungen jedoch nicht haben, sind diese Typen möglicherweise nicht deklariert.
OK, genug geredet. Beispiele:
Holen Sie sich die UTI für eine Datei:
$ mdls myFile.xml
...
kMDItemContentType = "public.xml"
kMDItemContentTypeTree = (
"public.xml",
"public.text",
"public.data",
"public.item",
"public.content"
)
...
OK Cool. Ein expliziter Inhaltstyp, den wir verwenden können. Schreiben Sie das irgendwo auf.
$ mdls myFile.myExtn
...
kMDItemContentType = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree = (
"public.data",
"public.item"
)
...
Hoppla. OS X kennt ".myExtn" -Dateien nicht. Es wurde also eine dynamische UTI erstellt, die wir für nichts verwenden können. Und die übergeordneten Typen sind zu allgemein, um nützlich zu sein.
Nachdem wir nun wissen, was unsere Dateien sind, schauen wir uns die Datei LaunchServices.plist an und sehen, was wir tun können:
$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";
},
...
);
...
}
Wenn Sie also einen "guten" Inhaltstyp verwenden möchten, ist das erste Konstrukt besser. Ansonsten das andere Konstrukt. Beachten Sie, dass diese Datei andere Konstrukte enthält, die jedoch für Ihre Fragen nicht relevant sind. Sie müssen nur wissen, dass sie vorhanden sind, wenn Sie die Ausgabe durchsehen.
Wie Sie sehen, müssen Sie die UTI für die Anwendung finden, die Sie verwenden möchten. Die UTIs für Safar und TextMate befinden sich in meinem obigen Beispiel, aber um die UTI für eine Anwendung generisch zu finden:
$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
...
HINWEIS: Ich habe keine Ahnung, was den Unterschied zwischen LSHandlerRoleAll und LSHandlerRoleViewer ausmacht. Ich kann nirgendwo eine Dokumentation dazu finden. Was ich tun sehe ist , dass 99% der Zeit LSHandlerRoleAll ist der einzige Satz (dh es gibt keine LSHandlerRoleViewer überhaupt) , und dass es für die Anwendung der UTI festgelegt , dass Sie den Typ mit verbinden wollen.
Nachdem ich Sie so weit gebracht habe, werde ich WIE verlassen, um die gewünschten Werte als Übung für den Leser festzulegen. Das Herumspielen mit diesen Dingen kann etwas gefährlich sein. Es ist durchaus möglich, dass Sie eine Datei vermasseln und keine Ihrer Dateizuordnungen funktionieren. Dann müssen Sie die Datei wegwerfen und von vorne beginnen.
Einige Hinweise:
- Lesen Sie weiter
defaults write
und seine Syntax
- Schau es dir an
PlistBuddy
. man PlistBuddy
und/usr/libexec/PlistBuddy -h
- Überspringen Sie diesen ganzen Unsinn und verwenden Sie RCDefaultApp