Alterar o aplicativo padrão (para uma extensão de arquivo) via script / linha de comando?

11

Existe uma maneira de definir o aplicativo padrão para uma extensão de arquivo por meio de um script da Apple, comando de linha de comando (como defaults write [...]).

Eu sei que você pode alterá-lo manualmente através do painel de informações ou usando o RCDefaultApp, mas como tenho que configurar muitas máquinas e contas de usuário, gostaria de encontrar uma maneira de automatizar o processo.

oschrenk
fonte

Respostas:

6

duti é um utilitário de shell que permite o uso de um arquivo de texto para configurar os aplicativos padrão para tipos de arquivos e esquemas de URL.

Por exemplo, salve um arquivo como este ~/.duti:

com.gnu.Emacs public.plain-text all 
com.gnu.Emacs public.unix-executable all
org.videolan.vlc .mkv all

Então corra duti ~/.duti.

Você pode instalar o duti com brew install dutiou executando 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.

Lri
fonte
Isso parece promissor, embora eu não consigo compilá-lo no Mac OS X 10.7.x ou 10.8.x: checking which SDK to use... configure: error: darwin12.0.0 is not a supported system.
Mathias Bynens
O binário no instalador do pkg ainda funciona para mim no 10.8.
Lri
Eu vejo. Para referência futura, aqui está o link para esse download: downloads.sourceforge.net/project/duti/duti/duti-1.5.0/...
Mathias Bynens
Isso funciona no 10.8? Defino o aplicativo padrão para abrir .aviarquivos no Quicktime Player (usando o Finder → Obter informaçõesAbrir com… → _Alterar tudo ), depois corri duti -s org.videolan.vlc public.avi allpara usar o VLC e reiniciei o LaunchServices - mas parecia não ter efeito. (Veja a lista de UTIs declaradas pelo sistema .)
Mathias Bynens
11
Funciona para mim pelo menos. Não deve exigir a reconstrução do banco de dados dos Serviços de Inicialização ou a reinicialização ou algo assim. Se você der uma olhada ~/Library/Preferences/com.apple.LaunchServices.plist, duti converte a maioria das extensões de nome de arquivo em UTIs automaticamente, para que você possa especificar os tipos como em .avivez de public.avi. As UTIs de algumas extensões de nome de arquivo dependem dos aplicativos que estão instalados.
Lri
12

O Launch Services é responsável pelas associações de arquivos padrão.

Digamos que eu queira alterar todos os arquivos de texto para abrir no Sublime Text 2.

Primeiro, preciso do kMDItemCFBundleIdentifier para Sublime Text 2. Posso usar mdls para obter essas informações:

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

Eu posso descobrir o valor do tipo de conteúdo para arquivos de texto inspecionando um deles com 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

Nesse caso, alterarei o aplicativo padrão para todos os public.plain-texttipos.

Para fazer isso, digite:

defaults write com.apple.LaunchServices LSHandlers -array-add '{ LSHandlerContentType = \"public.plain-text\"; LSHandlerRoleAll = \"com.sublimetext.2\"; }'

Se quiser que as alterações entrem em vigor, preciso reiniciar o Launch Services da seguinte maneira:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

E para dar crédito onde o crédito é devido, aprendi sobre essa abordagem nesta pergunta e resposta do stackoverflow.com: /programming/9172226/how-to-set-default-application-for-specific-file -types-em-mac-os-x

Ian C.
fonte
0

Esta publicação no SuperUser também contém algumas informações úteis. Para saber mais sobre o LaunchServices, aqui está um link para a documentação do desenvolvedor da Apple. Vá para a seção LSSetDefaultRoleHandlerForContentType (página 48).

John Rygielski
fonte