4 votes

Comment faire d'une application particulière le visualiseur/éditeur par défaut pour TOUS les types de fichiers qu'elle prend en charge en même temps ?

Je veux faire une demande, disons VLC , le lecteur par défaut de tous les types de fichiers qu'il prend en charge, sans les passer tous en revue individuellement.

Il se peut que je ne sache même pas quels sont les formats pris en charge (VLC peut lire des centaines de formats) et que je veuille quand même en faire le lecteur par défaut pour tous ces formats.

J'ai pu le faire en utilisant le terminal, avec la procédure indiquée ci-dessous.

Existe-t-il un moyen plus simple de le faire sans que l'utilisateur soit un développeur ?

4voto

demure Points 1301

Tandis que RCDefaultApp est un peu ancien, mais il fonctionne toujours

Vous disposez ainsi d'une interface graphique décente pour contrôler les applications par défaut.

1voto

Tobia Points 181
  1. Recherchez l'adresse de l'application Info.plist et le convertir au format xml si nécessaire.
    Le fichier plist de VLC est déjà au format xml, sinon il faudrait le faire :
    plutil -convert xml1 /Applications/VLC.app/Contents/Info.plist
  2. Effectuez la magie noire nécessaire pour extraire la liste des extensions de fichiers prises en charge, avec votre baguette préférée (ici, awk, mais sed, perl et d'autres fonctionneraient tout aussi bien) :
    awk '/CFBundleTypeExtensions/{t=1} /<\/array>/{t=0} t&&/<string>/{gsub(/\t*<\/?string>/,"");print}' /Applications/VLC.app/Contents/Info.plist
  3. Vérifiez le résultat pour vous assurer que vous avez bien obtenu la liste des extensions et que vous souhaitez réellement associer tous ces types à l'application.
  4. Rappeler le dernier commandement et modifiez-le afin de créer un fichier vide dans votre répertoire actuel pour chaque extension de fichier de la liste :
    for i in $( awk command as before ); do touch dummy.$i; done
  5. Ouvrez votre dossier personnel dans le Finder, sélectionnez tous les fichiers "factices" et ouvrez un inspecteur collectif pour chacun d'entre eux : option + command + i
  6. Définissez l'application dans Ouvrir avec et utilisez le bouton Modifier tout.
  7. Mettez à la poubelle les fichiers fictifs.

1voto

Je ne voudrais pas associer VLC à tous les types qu'il prend en charge (comme mp3, iso, ou utf), mais j'ai ajouté ceci à un fichier duti fichier de configuration :

org.videolan.vlc .avi all
org.videolan.vlc .flac all
org.videolan.vlc .flv all
org.videolan.vlc .mkv all
org.videolan.vlc .mov all
org.videolan.vlc .mp4 all
org.videolan.vlc .mpg all
org.videolan.vlc .wmv all

duti convertit automatiquement les extensions figurant dans les déclarations d'UTI en UTI, de sorte que vous pouvez spécifier les types de la manière suivante .jpg au lieu de public.jpeg . Voir com.apple.LaunchServices.plist. Les UTI de certaines extensions comme .mkv dépendent des applications qui ont été installées en premier.

De nombreuses applications ne listent que les UTI (LSItemContentTypes) et non les extensions (CFBundleTypeExtensions) dans l'Info.plist. Cela permettrait de lister les UTI et d'imprimer les extensions qui leur sont associées :

dump=$(/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump); plutil -convert xml1 /Applications/TextEdit.app/Contents/Info.plist -o - | sed -n '/LSItemContentTypes/,/\/array/p' | sed -En 's|.*string>(.*)</string.*|\1|p' | while read u; do awk "/uti: *$u/,/tags:/" <<< "$dump"; done | sed -En 's/[[:space:]]*tags: *(.+)/\1/p' | sed $'s/, /\\\n/g' | grep '^\.' | sort -u

1voto

Motsel Points 869

Comme indiqué ci-dessus, une méthode consiste à utiliser duti Voici un script que vous pouvez placer dans une crontab afin que lorsqu'une application externe modifie vos extensions, votre script les modifie à nouveau ;

1. installer duti avec HomeBrew :

brew install duti

2. Trouvez toutes les applications avec lesquelles vous avez des identifiants de regroupement :

mdls -name kMDItemCFBundleIdentifier -r /Applications/VLC.app

par exemple, dans ce cas, le résultat sera le suivant : org.videolan.vlc

3. changer l'application par défaut :

duti -s org.videolan.vlc .mp4 all
  • script pour automatiser cela (dans le script changez les apps et les ids de bundle selon vos besoins) - source de script : https://www.chainsawonatireswing.com/2012/09/19/changing-default-applications-on-a-mac-using-the-command-line-then-a-shell-script/

    !/bin/bash

    ========================================================================

    FILE: set_default_apps.sh

    DESCRIPTION: Changes default apps for extensions

    AUTHOR: Scott Granneman (RSG), scott@chainsawonatireswing.com

    COMPANY: Chainsaw on a Tire Swing (http://ChainsawOnATireSwing.com)

    VERSION: 0.1

    CREATED: 09/17/2012 21:44:01 CDT

    REVISION:

    ========================================================================

    { cat <<eof com.macrabbit.Espresso:css com.valloric.Sigil.app:epub cx.c3.theunarchiver:gz com.sublimetext.2:markdown com.sublimetext.2:md com.sublimetext.2:mdwn com.sublimetext.2:mediawiki cx.c3.theunarchiver:rar com.sublimetext.2:sh cx.c3.theunarchiver:tar com.sublimetext.2:text com.sublimetext.2:txt com.sublimetext.2:xml cx.c3.theunarchiver:zip eof } | grep . | while IFS=$':' read bundle_id extension ; do

    Grep to see if Bundle ID exists, sending stdout to /dev/null

    /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep $bundle_id > /dev/null

    Save exit status (0=success & 1=failure)

    status=$?

    If exit status failed, notify me & exit; if not, change default app for extension

    if test $status -eq 1 ; then echo "$bundle_id doesn't exist! Fix the script!"

    exit

    else echo -e "\nChanging $extension so it opens with $bundle_id …\n" duti -s $bundle_id .$extension all echo -e "Here's proof…\n" duti -x $extension echo -e "\n----------" fi done

  • vous pouvez trouver toutes les extensions de vos applications avec ce voodoo de @Lri posté plus haut, et ensuite utiliser/coller le résultat dans le script ci-dessus :

    app="VLC.app" ; \ bundleid=mdls -name kMDItemCFBundleIdentifier -r /Applications/$app ; \ dump=$(/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump); \ plutil -convert xml1 /Applications/$app/Contents/Info.plist -o - | \ sed -n '/LSItemContentTypes/,/\/array/p' | \ sed -En 's|.string>(.)</string.|\1|p' | \ while read u; do \ awk "/uti: $u/,/tags:/" \ <<< "$dump"; done | \ sed -En 's/[[:space:]]tags: (.+)/\1/p' | \ sed $'s/, /\\n/g' | \ grep '^.' | sort -u | \ awk '{print "'$bundleid':" substr($1,2,length($1)) }'

  • puis placer le script dans une crontab qui s'exécute toutes les x minutes/heures

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X