Changer l'association de fichier dans le terminal?


18

Existe-t-il une méthode pour associer des types de fichiers à des applications via un terminal? Je pensais que ~ / Library / Preferences / com.apple.launchservices.plist pourrait le faire, et j'ai également vu: pourquoi un changement de ligne de commande en ~ / Library / Preferences / com.apple.LaunchServices.plist n'est pas effectif immédiatement? mais je n'arrive pas à le faire fonctionner.

Je suppose que je cherche un moyen d'imiter ce que fait l'interface graphique lorsque quelqu'un l'utilise pour changer les types d'association, cela semble fonctionner instantanément là-bas ...

Réponses:


8

Vous pouvez éditer ~/Library/Preferences/com.apple.LaunchServices.plistdans un éditeur de texte après l'avoir converti en XML:

plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices.plist

Ajoutez ensuite des entrées comme celle-ci au LSHandlerstableau:

<dict>
  <key>LSHandlerContentType</key>
  <string>com.adobe.pdf</string>
  <key>LSHandlerRoleAll</key>
  <string>net.sourceforge.skim-app.skim</string>
</dict>
<dict>
  <key>LSHandlerContentTag</key>
  <string>mkv</string>
  <key>LSHandlerContentTagClass</key>
  <string>public.filename-extension</string>
  <key>LSHandlerRoleAll</key>
  <string>org.videolan.vlc</string>
</dict>

Vous pouvez utiliser mdlspour voir les UTI des types de fichiers et quelque chose comme osascript -e 'id of app "AppName"'pour voir les identificateurs de bundle des applications.

Vous pouvez appliquer les modifications à com.apple.LaunchServices.plisten redémarrant. Se déconnecter et se reconnecter ne suffit pas.


REMARQUE : dutin'est plus en développement actif et a été étiqueté par ses responsables comme "non pris en charge". Le projet n'a pas connu de progrès majeur depuis 2012, à l'exception des mises à jour de configuration. Il est passé de Sourceforge à Github. Cette réponse a été mise à jour pour inclure les nouveaux liens.

J'utilise aussi duti cependant. J'ai enregistré un fichier comme celui-ci (avec environ 100 lignes) sous ~/.duti:

org.gnu.Emacs public.plain-text all # .txt, .text, plain text files without an extension
org.gnu.Emacs public.unix-executable all # executable scripts
com.SequentialX.Sequential .jpg all
org.videolan.vlc .mkv all

J'ai un agent launchd qui s'exécute duti ~/.dutiautomatiquement lorsqu'il ~/.dutiest modifié.

Vous pouvez normalement utiliser des extensions de nom de fichier (comme .jpg) au lieu d'un UTI (comme public.jpg) pour spécifier les types de fichiers. duticonvertit les extensions en UTI qui s'appliquent également à d'autres extensions (comme .jpeg). Pour certaines extensions comme .mkvet .tex, l'UTI dépend de l'application qui a enregistré l'extension en premier.

La dernière version de duticomprend uniquement le code source, mais 1.5.0 inclut également un programme d'installation.


5

Découvrez duti :

duti est un outil en ligne de commande écrit par Andrew Mortensen, conçu pour définir des applications par défaut pour les types de documents et les schémas d'URL sur Mac OS X.

Les types de documents sur Mac OS X sont définis par ce qu'Apple appelle les identificateurs de type uniforme ou UTI. Les fichiers HTML, par exemple, ont une UTI de public.html. Les documents Microsoft Word sont décrits par UTI com.microsoft.word.doc. Apple fournit de nombreuses UTI avec Mac OS X, mais les développeurs sont libres de définir les leurs, tant que l'UTI est unique pour ce type de document.

Le nom de duti signifie «par défaut pour UTI».


2
Suggestion obligatoire: utiliser brew install dutipour installerduti
Pier Paolo Ramon

1

Voici un agent launchd pour duti qui fera l'affaire:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.duti.watcher</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/duti</string>
      <string>/Users/joshgummersall/.duti</string>
    </array>
    <key>UserName</key>
    <string>joshgummersall</string>
    <key>KeepAlive</key>
    <false/>
    <key>WatchPaths</key>
    <array>
      <string>/Users/joshgummersall/.duti</string>
    </array>
  </dict>
</plist>

Remplacez évidemment joshgummersallpar votre propre nom d'utilisateur. J'ai placé ce fichier à ~/Library/LaunchAgents/duti.plist, chmmodd à 644 et j'ai couru:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist

0

Réponse courte: L'association d'application d'un fichier est stockée dans la fourchette de ressources du fichier , et Apple fournit deux utilitaires ( Rez et DeRez ) qui permettent la manipulation des fourchettes de ressources., Mais ce n'est pas pour les âmes sensibles .

Pour plus de détails, cette question trouve une réponse très complète chez Super User:

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.