Changer l'application par défaut (pour une extension de fichier) via un script / ligne de commande?

11

Existe-t-il un moyen de définir l'application par défaut pour une extension de fichier via un script Apple, une commande en ligne de commande (comme defaults write [...]).

Je sais que vous pouvez le modifier manuellement via le panneau d'informations ou en utilisant RCDefaultApp mais comme je dois configurer de nombreuses machines et comptes d'utilisateurs, je voudrais trouver un moyen d'automatiser le processus.

oschrenk
la source

Réponses:

6

duti est un utilitaire shell qui permet d'utiliser un fichier texte pour configurer les applications par défaut pour les types de fichiers et les schémas d'URL.

Par exemple, enregistrez un fichier comme celui-ci sous ~/.duti:

com.gnu.Emacs public.plain-text all 
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all

Exécutez ensuite duti ~/.duti.

Vous pouvez installer duti avec brew install dutiou en exécutant wget https://github.com/fitterhappier/duti/archive/duti-1.5.2.tar.gz;tar -xf duti-1.5.2.tar.gz;cd duti-duti-1.5.2;./configure;make;sudo make install.

Lri
la source
Cela semble prometteur, bien que je ne peux pas sembler le compiler sur Mac OS X 10.7.x ou 10.8.x: checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens
Le binaire dans le programme d'installation de pkg fonctionne toujours pour moi sur 10.8.
Lri
Je vois. Pour référence future, voici le lien vers ce téléchargement: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/…
Mathias Bynens
Est-ce que cela fonctionne sur 10.8? J'ai défini l'application par défaut pour ouvrir des .avifichiers sur Quicktime Player (en utilisant Finder → Obtenir des informationsOuvrir avec… → _Changer tout ), puis j'ai couru duti -s org.videolan.vlc public.avi allpour utiliser VLC à la place, puis redémarré LaunchServices - mais cela ne semblait pas avoir d'effet. (Voir la liste des UTI déclarées par le système .)
Mathias Bynens
1
Cela fonctionne au moins pour moi. Cela ne devrait pas nécessiter la reconstruction de la base de données Launch Services ou le redémarrage ou quoi que ce soit. Si vous regardez ~/Library/Preferences/com.apple.LaunchServices.plist, duti convertit automatiquement la plupart des extensions de nom de fichier en UTI, vous pouvez donc généralement spécifier les types comme .aviau lieu de public.avi. Les UTI de certaines extensions de nom de fichier dépendent des applications installées.
Lri
12

Launch Services est responsable des associations de fichiers par défaut.

Disons que je voulais changer tous les fichiers texte pour les ouvrir dans Sublime Text 2.

J'ai d'abord besoin du kMDItemCFBundleIdentifier pour Sublime Text 2. Je peux utiliser mdls pour obtenir ces informations:

> mdls /Applications/Sublime\ Text\ 2.app 
_kTimeMachineIsCreationMarker  = 1
_kTimeMachineNewestSnapshot    = 4001-01-01 00:00:00 +0000
_kTimeMachineOldestSnapshot    = 2012-02-22 03:49:19 +0000
kMDItemCFBundleIdentifier      = "com.sublimetext.2"
....snip....

Je peux trouver la valeur du type de contenu pour les fichiers texte en inspectant l'un d'eux avec mdls :

> mdls test.txt 
kMDItemContentCreationDate     = 2012-03-25 04:18:50 +0000
kMDItemContentModificationDate = 2012-03-25 04:18:50 +0000
kMDItemContentType             = "public.plain-text"
kMDItemContentTypeTree         = (
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-03-25 04:18:50 +0000
kMDItemDisplayName             = "test.txt"
kMDItemFSContentChangeDate     = 2012-03-25 04:18:50 +0000
kMDItemFSCreationDate          = 2012-03-25 04:18:50 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "test.txt"
kMDItemFSNodeCount             = 975
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 975
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Plain Text"
kMDItemLogicalSize             = 975
kMDItemPhysicalSize            = 4096

Dans ce cas, je changerai l'application par défaut pour tous les public.plain-texttypes.

Pour ce faire, je tape:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'

Si je veux que les modifications prennent effet, je devrai redémarrer Launch Services comme suit:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

Et pour donner du crédit là où le crédit est dû, j'ai appris cette approche à partir de cette question et réponse stackoverflow.com: /programming/9172226/how-to-set-default-application-for-specific-file -types-dans-mac-os-x

Ian C.
la source
0

Ce message sur SuperUser contient également des informations utiles. Pour en savoir plus sur LaunchServices, voici un lien vers la documentation des développeurs Apple à ce sujet. Accédez à la section intitulée LSSetDefaultRoleHandlerForContentType (page 48).

John Rygielski
la source