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
LSHandlerRoleViewer
ich mich frage, ob es sich möglicherweise um die Standardeinstellung für die Anzeige im Gegensatz zur Bearbeitung handelt ( apple.stackexchange.com/a/49998/206073 hat mich in diese Zeilen gebracht). Ich weiß jedoch nicht, in welchen Kontexten man bestimmen kann, ob man zum Anzeigen oder Bearbeiten öffnet ... (Off-Topic,CFBundleTypeRole
sieht so aus, als würde es ähnliche Werte akzeptieren)com.apple.LaunchServices/com.apple.launchservices.secure
auch die Domäne in späteren MacOS-Systemen zu sein ...Eine Option ist zu bearbeiten
~/Library/Preferences/.GlobalPreferences.plist
:defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType=com.adobe.pdf;LSHandlerRoleAll=net.sourceforge.skim-app.skim;}'
Sie können PlistBuddy verwenden, um zu überprüfen, ob bereits Einträge vorhanden sind. Ich habe jedoch keine Möglichkeit gefunden, Änderungen zu übernehmen, ohne die Launch Services-Datenbank neu zu starten oder neu zu erstellen .
Mit duti können Sie
duti ~/.duti
nach dem Speichern Folgendes ausführen~/.duti
:quelle
Es beantwortet Ihre Frage nicht wirklich, könnte aber eine Lösung sein.
Der Inspektor im Finder zeigt Informationen für die aktuell ausgewählte Datei oder Dateien an:
⌘+ ⌥+I
Das Fenster " Zusammenfassungsinformationen" des Finders ist nützlich, wenn mehrere Dateien ausgewählt sind:
^+ ⌘+I
Wenn Sie mehrere Dateien desselben Typs auswählen, können Sie mit beiden oben genannten Methoden die Eigenschaft Öffnen mit: für diese Dateien problemlos ändern .
quelle
Keine Antwort auf Ihre genaue Frage, sondern eine andere mögliche Lösung. Sie können ein Dokument mit einer bestimmten Anwendung über die Befehlszeile mit dem zu öffnenden Argument -a öffnen.
Öffnen Sie beispielsweise alle HTML-Dateien im aktuellen Verzeichnis.
Öffnen Sie index.html und die Javascript-Controller-Dateien im Atom-Texteditor:
Abhängig von Ihren Anforderungen können Sie dies als Automator-Dienst ändern, dem eine Tastenkombination zugewiesen werden kann, wobei die ausgewählten Dateipfade als Argument verwendet werden.
Hier ist ein Beispiel für Automator AppleScript, das Dateien als Eingabe empfängt und die ausgewählten Dateien in Chrome öffnet:
Lauf beenden
Natürlich können Sie den App-Namen "Sublime" als Texteditor ändern, als anderen Dienst speichern und beide Tastenkombinationen zuweisen.
quelle