¿Cambiar asociación de archivo en terminal?

18

¿Existe algún método para asociar tipos de archivos con aplicaciones a través de terminal? Pensé que ~ / Library / Preferences / com.apple.launchservices.plist podría hacerlo, y también he visto: ¿Por qué un cambio de línea de comando a ~ / Library / Preferences / com.apple.LaunchServices.plist no es efectivo de inmediato? pero parece que no puedo hacerlo funcionar.

Supongo que estoy buscando una manera de imitar lo que hace la GUI cuando alguien la usa para cambiar los tipos de asociación, parece que funciona instantáneamente allí ...

knishka
fuente

Respuestas:

8

Puede editar ~/Library/Preferences/com.apple.LaunchServices.plisten un editor de texto después de convertirlo a XML:

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

Luego agregue entradas como esta a la 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>

Puede usar mdlspara ver las UTI de los tipos de archivo y algo así como osascript -e 'id of app "AppName"'para ver los identificadores de paquetes de aplicaciones.

Puede aplicar cambios com.apple.LaunchServices.plistreiniciando. Cerrar sesión y volver a iniciarla no es suficiente.


NOTA : dutiya no se encuentra en desarrollo activo y sus mantenedores lo han etiquetado como "no compatible". El proyecto no ha visto ningún progreso importante desde 2012, aparte de las actualizaciones de configuración. Se mudó de Sourceforge a Github. Esta respuesta se ha actualizado para incluir los nuevos enlaces.

Aunque también uso holandés . He guardado un archivo como este (con aproximadamente 100 líneas) 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

Tengo un agente de launchd que se ejecuta duti ~/.dutiautomáticamente cuando ~/.dutise cambia.

Normalmente puede usar extensiones de nombre de archivo (como .jpg) en lugar de una UTI (como public.jpg) para especificar los tipos de archivo. duticonvierte las extensiones en UTI que también se aplican a otras extensiones (como .jpeg). Para algunas extensiones como .mkvy .tex, la UTI depende de qué aplicación haya registrado primero la extensión.

La última versión de dutisolo incluye código fuente, pero 1.5.0 también incluye un instalador.

Lri
fuente
5

Echa un vistazo a duti :

duti es una herramienta de línea de comandos escrita por Andrew Mortensen, diseñada para establecer aplicaciones predeterminadas para tipos de documentos y esquemas de URL en Mac OS X.

Los tipos de documentos en Mac OS X se definen por lo que Apple llama Identificadores de tipo uniformes o UTI. Los archivos HTML, por ejemplo, tienen una UTI de public.html. Los documentos de Microsoft Word se describen en la UTI com.microsoft.word.doc. Apple proporciona muchas UTI con Mac OS X, pero los desarrolladores son libres de definir las suyas, siempre que la UTI sea única para ese tipo de documento.

el nombre de duti significa "predeterminado para UTI".

da4
fuente
2
Sugerencia obligatoria: utilizar brew install dutipara instalarduti
Pier Paolo Ramon
1

Aquí hay un agente de launchd para duti que hará el truco:

<?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 reemplace joshgummersallcon su propio nombre de usuario. Coloqué este archivo en ~/Library/LaunchAgents/duti.plist, chmmodd a 644 y ejecuté:

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

Respuesta corta: la asociación de aplicaciones de un archivo se almacena en la bifurcación de recursos del archivo , y Apple proporciona dos utilidades ( Rez y DeRez ) que permiten la manipulación de las bifurcaciones de recursos, pero esto no es para los débiles de corazón.

Para más detalles, esta pregunta se responde muy a fondo en Super User:

Nate
fuente