Esto es posible, pero probablemente no es tan sencillo como se podría pensar. Usted necesitará conseguir muy familiarizado con el Tipo de Uniforme Identificadores. Buscar en la Wikipedia del Identificador de Tipo Uniforme de la página.
OS X se almacena la información en la preferida de las asociaciones de archivos en un archivo de preferencias con el nombre com.apple.LaunchServices.plist
. Antes de ir a tratar de encontrar y modificar ese archivo, te sugerimos que se familiarice con OS X del dominio de la jerarquía por defecto (un.k.a. "configuración"). Un decente artículo sobre esto se puede encontrar aquí. (Descargo de responsabilidad: ellos parecen estar vendiendo algo en ese sitio. No sé lo que es y no tienen ninguna relación con ellos, la explicación es sólo una buena alternativa).
Ahora que sabes todo acerca de los incumplimientos y las infecciones urinarias (er, no el médico de la especie), ahora podemos hablar acerca de la configuración de las asociaciones de archivos a partir de una secuencia de comandos de línea de comandos.
En primer lugar, usted tendrá que saber la forma correcta de identificar los archivos que desea hacer una asociación.
Recuerdo cómo me dijo Iu eran importantes? Hay varias formas de identificar a un archivo. Depende de si el tipo ha sido formalmente declarado en su sistema o no. Por ejemplo, digno de los editores de texto como TextMate o TextWrangler va a añadir un par de declaraciones de tipo para el tipo de jerarquía cuando se utilizan en su sistema. Sin embargo, si usted no tiene las aplicaciones, puede que no tenga los tipos declarados.
OK, basta de charla. Ejemplos:
Obtener la UTI de un archivo:
$ mdls myFile.xml
...
kMDItemContentType = "public.xml"
kMDItemContentTypeTree = (
"public.xml",
"public.text",
"public.data",
"public.item",
"public.content"
)
...
Ok, genial. Una explícita el tipo de contenido que se pueden utilizar. Escríbelo en algún lugar.
$ mdls myFile.myExtn
...
kMDItemContentType = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree = (
"public.data",
"public.item"
)
...
Oops. OS X que no se conoce ".myExtn de archivos". Así, se crea una dinámica de la infección urinaria por la que no podamos usar para cualquier cosa. Y el padre tipos son demasiado genérico como para ser útil.
Ahora que sabemos lo que nuestros archivos, veamos el caso de la LaunchServices.plist archivo y ver lo que podemos hacer:
$defaults read com.apple.LaunchServices
{
...
LSHandlers = (
{
LSHandlerContentType = "public.html";
LSHandlerRoleAll = "com.apple.safari";
LSHandlerRoleViewer = "com.google.chrome";
},
...
{
LSHandlerContentTag = myExtn;
LSHandlerContentTagClass = "public.filename-extension";
LSHandlerRoleAll = "com.macromates.textmate";
},
...
);
...
}
Así que, cuando usted tiene un "buen" tipo de contenido a utilizar, la primera construcción es mejor. De lo contrario, el otro constructo. Tenga en cuenta que hay otras construcciones en ese archivo, pero que no son relevantes para lo que usted pidió. Sólo sé que están ahí cuando se mira a través de la salida.
Como usted puede ver, usted tendrá que encontrar la UTI para la aplicación que desea utilizar. La Itu para Safar y TextMate están en mi ejemplo anterior, pero de forma genérica encontrar la UTI para una aplicación:
$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
...
NOTA: no tengo ninguna idea de lo que constituye la diferencia entre LSHandlerRollAll y LSHandlerRollViewer. No puedo encontrar documentación sobre los que en cualquier lugar. Lo que quiero hacer ver es que el 99% del tiempo LSHandlerRollAll es el único conjunto (es decir, no hay LSHandlerRollViewer en todos) y que se establece en la UTI de la aplicación que se desea asociar el tipo con.
Después de haber traído hasta este punto, voy a dejar de CÓMO establecer los valores que se quieren como ejercicio para el lector. Jugar con estas cosas puede ser un poco peligroso. Es totalmente posible que el tornillo de seguridad de un archivo y no tiene NINGUNA de sus asociaciones de archivos de trabajo. Entonces usted tiene que tirar el archivo y empezar de nuevo.
Algunos consejos:
- Leer en
defaults write
y su sintaxis
- Echa un vistazo a
PlistBuddy
. man PlistBuddy
y /usr/libexec/PlistBuddy -h
- Omitir todo este disparate total y el uso RCDefaultApp