Alterar associação de arquivo no terminal?

18

Existe um método para associar tipos de arquivos a aplicativos via terminal? Eu pensei que ~ / Library / Preferences / com.apple.launchservices.plist poderia fazê-lo e também vi: Por que uma linha de comando é alterada para ~ / Library / Preferences / com.apple.LaunchServices.plist não é eficaz imediatamente? mas não consigo fazê-lo funcionar.

Acho que estou procurando uma maneira de imitar o que a GUI faz quando alguém a usa para alterar os tipos de associação, parece funcionar instantaneamente lá ...

knishka
fonte

Respostas:

8

Você pode editar ~/Library/Preferences/com.apple.LaunchServices.plistem um editor de texto após convertê-lo em XML:

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

Em seguida, adicione entradas como esta à LSHandlersmatriz:

<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>

Você pode usar mdlspara ver as UTIs dos tipos de arquivo e algo parecido osascript -e 'id of app "AppName"'com os identificadores de pacote configurável dos aplicativos.

Você pode aplicar alterações com.apple.LaunchServices.plistreiniciando. Sair e entrar novamente não é suficiente.


NOTA : dutinão está mais em desenvolvimento ativo e foi rotulado por seus mantenedores como "não suportado". O projeto não registrou nenhum grande progresso desde 2012, além das atualizações de configuração. Foi movido do Sourceforge para o Github. Esta resposta foi atualizada para incluir os novos links.

Eu também uso duti . Salvei um arquivo como este (com cerca de 100 linhas) como ~/.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

Eu tenho um agente launchd que é executado duti ~/.dutiautomaticamente quando ~/.dutié alterado.

Normalmente, você pode usar extensões de nome de arquivo (como .jpg) em vez de UTIs (como public.jpg) para especificar os tipos de arquivo. duticonverte as extensões em UTIs que também se aplicam a outras extensões (como .jpeg). Para algumas extensões como .mkve .tex, a UTI depende de qual aplicativo registrou a extensão primeiro.

A versão mais recente do dutiinclui apenas código fonte, mas a 1.5.0 também inclui um instalador.

Lri
fonte
5

Confira holandês :

duti é uma ferramenta de linha de comando criada por Andrew Mortensen, projetada para definir aplicativos padrão para tipos de documentos e esquemas de URL no Mac OS X.

Os tipos de documentos no Mac OS X são definidos pelo que a Apple chama de Uniform Type Identifiers, ou UTIs. Arquivos HTML, por exemplo, têm uma UTI de public.html. Os documentos do Microsoft Word são descritos pela UTI com.microsoft.word.doc. A Apple fornece muitas UTIs com o Mac OS X, mas os desenvolvedores podem definir seus próprios, desde que a UTI seja exclusiva para esse tipo de documento.

O nome do holandês significa "padrão para UTI".

da4
fonte
2
Sugestão obrigatória: use brew install dutipara instalarduti
Pier Paolo Ramon
1

Aqui está um agente launchd para duti que fará o truque:

<?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>

Obviamente, substitua joshgummersallpelo seu próprio nome de usuário. Eu coloquei esse arquivo em ~/Library/LaunchAgents/duti.plist, chmmodd para 644 e executei:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist
Josh Gummersall
fonte
0

Resposta curta: a associação de aplicativos de um arquivo é armazenada na bifurcação de recursos do arquivo , e a Apple fornece dois utilitários ( Rez e DeRez ) que permitem a manipulação de bifurcações de recursos., Mas isso não é para os fracos de coração.

Para mais detalhes, esta pergunta é respondida minuciosamente em Super Usuário:

Nate
fonte