C'est faisable, mais ce n'est probablement pas aussi simple qu'on pourrait le penser. Vous devrez vous familiariser avec les identificateurs de type uniforme. Regardez la page Uniform Type Identifier de Wikipedia .
OS X stocke des informations sur les associations de fichiers préférées dans un fichier de préférences portant le nom com.apple.LaunchServices.plist
. Avant d'aller chercher et de modifier ce fichier, je vous suggère de vous familiariser avec la hiérarchie de domaine d'OS X pour les valeurs par défaut (alias «paramètres»). Un article décent à ce sujet peut être trouvé ici . (Avertissement: ils semblent vendre quelque chose sur ce site. Je ne sais pas ce que c'est et je n'ai aucun lien avec eux, l'explication est juste bonne.)
Maintenant que vous savez tout sur les valeurs par défaut et les UTI (euh, pas le type médical), nous pouvons maintenant parler de la définition des associations de fichiers à partir d'un script / d'une ligne de commande.
Tout d'abord, vous devez connaître la bonne façon d'identifier les fichiers pour lesquels vous souhaitez créer une association.
Rappelez-vous comment j'ai dit que les IVU étaient importantes? Il existe plusieurs façons d'identifier un fichier. Cela dépend si le type a été officiellement déclaré sur votre système ou non. Par exemple, des éditeurs de texte décents comme TextMate ou TextWrangler ajouteront pas mal de déclarations de type à la hiérarchie de types lorsque vous les utiliserez sur votre système. Cependant, si vous ne disposez pas de ces applications, il se peut que ces types ne soient pas déclarés.
OK, assez parlé. Exemples:
Obtenez l'UTI pour un fichier:
$ mdls myFile.xml
...
kMDItemContentType = "public.xml"
kMDItemContentTypeTree = (
"public.xml",
"public.text",
"public.data",
"public.item",
"public.content"
)
...
OK cool. Un type de contenu explicite que nous pouvons utiliser. Notez cela quelque part.
$ mdls myFile.myExtn
...
kMDItemContentType = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree = (
"public.data",
"public.item"
)
...
Oops. OS X ne connaît pas les fichiers ".myExtn". Ainsi, il a créé une interface utilisateur dynamique que nous ne pouvons utiliser pour rien. Et les types parents sont trop génériques pour être utiles.
Maintenant que nous savons ce que sont nos fichiers, regardons le fichier LaunchServices.plist et voyons ce que nous pouvons faire:
$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";
},
...
);
...
}
Ainsi, lorsque vous avez un "bon" type de contenu à utiliser, la première construction est meilleure. Sinon, l'autre construction. Remarque, il existe d'autres constructions dans ce fichier, mais elles ne sont pas pertinentes pour ce que vous avez demandé. Sachez simplement qu'ils sont là lorsque vous regardez à travers la sortie.
Comme vous pouvez le voir, vous devrez trouver l'UTI de l'application que vous souhaitez utiliser. Les UTI pour Safar et TextMate sont dans mon exemple ci-dessus, mais pour trouver génériquement l'UTI pour une application:
$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
...
REMARQUE: je n'ai aucune idée de ce qui constitue la différence entre LSHandlerRoleAll et LSHandlerRoleViewer. Je ne trouve aucune documentation là-dessus. Ce que je fais voir est que 99% du temps LSHandlerRoleAll est le seul jeu (il n'y a pas du tout LSHandlerRoleViewer) et qu'il est réglé sur l'UTI pour l'application que vous désirez associer le type avec.
Après vous avoir amené jusqu'ici, je vais laisser COMMENT définir les valeurs que vous voulez comme exercice pour le lecteur. Jouer avec ces choses peut être quelque peu dangereux. Il vous est tout à fait possible de bousiller un fichier et de ne faire fonctionner AUCUNE de vos associations de fichiers. Ensuite, vous devez jeter le fichier et recommencer.
Quelques conseils:
- Lisez la suite
defaults write
et sa syntaxe
- Jetez un oeil à
PlistBuddy
. man PlistBuddy
et/usr/libexec/PlistBuddy -h
- Ignorez toutes ces absurdités et utilisez RCDefaultApp
LSHandlerRoleViewer
, je me demande si cela peut être lié à la valeur par défaut pour l'affichage plutôt que pour l'édition ( apple.stackexchange.com/a/49998/206073 m'a mis sur ces lignes). Cependant, je ne sais pas dans quels contextes on peut déterminer si l'on ouvre pour la visualisation ou l'édition ... (hors sujet,CFBundleTypeRole
on dirait qu'il accepte des valeurs similaires)com.apple.LaunchServices/com.apple.launchservices.secure
que ce soit le domaine des systèmes MacOS ultérieurs ...Une option consiste à modifier
~/Library/Preferences/.GlobalPreferences.plist
:defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType=com.adobe.pdf;LSHandlerRoleAll=net.sourceforge.skim-app.skim;}'
Vous pouvez utiliser PlistBuddy pour vérifier si des entrées existent déjà , mais je n'ai trouvé aucun moyen d'appliquer des modifications sans redémarrer ou reconstruire la base de données Launch Services.
En utilisant duti , vous pouvez exécuter
duti ~/.duti
après avoir enregistré ceci sous~/.duti
:la source
Cela ne répond pas vraiment à votre question, mais pourrait être une solution.
L' inspecteur du Finder présente des informations sur le ou les fichiers actuellement sélectionnés :
⌘+ ⌥+I
La fenêtre Informations récapitulatives du Finder est utile lorsque plusieurs fichiers sont sélectionnés:
^+ ⌘+I
Si vous sélectionnez plusieurs fichiers du même type, l'une des méthodes ci-dessus vous permettra de basculer facilement la propriété Ouvrir avec: pour ces fichiers.
la source
Pas une réponse à votre question exacte, mais une autre solution possible. Vous pouvez ouvrir un document avec une application spécifique à partir de la ligne de commande avec l'argument -a à ouvrir.
Par exemple, ouvrez tous les fichiers html dans le répertoire en cours.
Ouvrez index.html et les fichiers du contrôleur javascript dans l'éditeur de texte Atom:
En fonction de vos besoins, vous pouvez le modifier pour qu'il s'agisse d'un service Automator auquel une touche de raccourci peut être affectée, en prenant comme argument les chemins de fichier sélectionnés.
Voici un exemple d'Automator AppleScript qui reçoit des fichiers en entrée et ouvre les fichiers sélectionnés dans Chrome:
moyen détourné
De toute évidence, vous pouvez modifier le nom de l'application "Sublime" éditeur de texte, l'enregistrer en tant que autre service et leur affecter les deux touches de raccourci.
la source