¿Hay alguna manera de definir la aplicación predeterminada para una extensión de archivo a través de un script de Apple, un comando de línea de comandos (como defaults write [...]
).
Sé que puede cambiarlo manualmente a través del panel de información o usando RCDefaultApp , pero como tengo que configurar muchas máquinas y cuentas de usuario, me gustaría encontrar una manera de automatizar el proceso.
duti es una utilidad de shell que permite usar un archivo de texto para configurar las aplicaciones predeterminadas para tipos de archivos y esquemas de URL.
Por ejemplo, guarde un archivo como este como ~/.duti
:
com.gnu.Emacs public.plain-text all
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all
Entonces corre duti ~/.duti
.
Puede instalar duti con brew install duti
o ejecutando wget https://github.com/fitterhappier/duti/archive/duti-1.5.2.tar.gz;tar -xf duti-1.5.2.tar.gz;cd duti-duti-1.5.2;./configure;make;sudo make install
.
Launch Services es responsable de las asociaciones de archivos predeterminadas.
Digamos que quisiera cambiar todos los archivos de texto para abrirlos en Sublime Text 2.
Primero necesito el kMDItemCFBundleIdentifier para Sublime Text 2. Puedo usar mdls para obtener esta información:
> mdls /Applications/Sublime\ Text\ 2.app
_kTimeMachineIsCreationMarker = 1
_kTimeMachineNewestSnapshot = 4001-01-01 00:00:00 +0000
_kTimeMachineOldestSnapshot = 2012-02-22 03:49:19 +0000
kMDItemCFBundleIdentifier = "com.sublimetext.2"
....snip....
Puedo averiguar el valor del tipo de contenido para los archivos de texto al inspeccionar uno de ellos con mdls :
> mdls test.txt
kMDItemContentCreationDate = 2012-03-25 04:18:50 +0000
kMDItemContentModificationDate = 2012-03-25 04:18:50 +0000
kMDItemContentType = "public.plain-text"
kMDItemContentTypeTree = (
"public.plain-text",
"public.text",
"public.data",
"public.item",
"public.content"
)
kMDItemDateAdded = 2012-03-25 04:18:50 +0000
kMDItemDisplayName = "test.txt"
kMDItemFSContentChangeDate = 2012-03-25 04:18:50 +0000
kMDItemFSCreationDate = 2012-03-25 04:18:50 +0000
kMDItemFSCreatorCode = ""
kMDItemFSFinderFlags = 0
kMDItemFSHasCustomIcon = 0
kMDItemFSInvisible = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery = 0
kMDItemFSLabel = 0
kMDItemFSName = "test.txt"
kMDItemFSNodeCount = 975
kMDItemFSOwnerGroupID = 20
kMDItemFSOwnerUserID = 501
kMDItemFSSize = 975
kMDItemFSTypeCode = ""
kMDItemKind = "Plain Text"
kMDItemLogicalSize = 975
kMDItemPhysicalSize = 4096
En este caso, cambiaré la aplicación predeterminada para todos los public.plain-text
tipos.
Para hacer esto escribo:
defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'
Si quiero que los cambios surtan efecto, tendré que reiniciar los Servicios de lanzamiento de la siguiente manera:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user
Y para dar crédito donde se debe, aprendí sobre este enfoque de esta pregunta y respuesta de stackoverflow.com: https://stackoverflow.com/questions/9172226/how-to-set-default-application-for-specific-file -tipos-en-mac-os-x
Esta publicación en SuperUser también contiene información útil. Para obtener más información sobre LaunchServices, aquí hay un enlace a la documentación para desarrolladores de Apple. Vaya a la sección titulada LSSetDefaultRoleHandlerForContentType (página 48).
Mathias Bynen
checking which SDK to use... configure: error: darwin12.0.0 is not a supported system
.Lrí
Mathias Bynen
Mathias Bynen
.avi
archivos en Quicktime Player (usando Finder → Obtener información → Abrir con… → _Cambiar todo ), luego corríduti -s org.videolan.vlc public.avi all
para usar VLC en su lugar, luego reinicié LaunchServices , pero parecía no tener ningún efecto. (Consulte la lista de UTI declaradas por el sistema ).Lrí
~/Library/Preferences/com.apple.LaunchServices.plist
, duti convierte la mayoría de las extensiones de nombre de archivo en UTI automáticamente, por lo que generalmente puede especificar los tipos como.avi
en lugar depublic.avi
. Las UTI de algunas extensiones de nombre de archivo dependen de las aplicaciones que estén instaladas.jonathan komar
duti ~/.duti
, obtuverole "all " unrecognized
. Solo para su información, tuve que comentar las dos primeras líneas de su código de muestra y funcionó para VLC.Lrí