Isso é possível, mas provavelmente não é tão simples quanto você imagina. Você precisará se familiarizar com os Identificadores de tipo uniformes. Consulte a página Identificador de tipo uniforme da Wikipedia .
O OS X armazena informações sobre associações de arquivos preferenciais em um arquivo de preferência com o nome com.apple.LaunchServices.plist
. Antes de tentar encontrar e modificar esse arquivo, sugiro que você se familiarize com a hierarquia de domínio do OS X para padrões (também conhecidos como "configurações"). Um artigo decente sobre isso pode ser encontrado aqui . (Isenção de responsabilidade: eles parecem estar vendendo algo nesse site. Eu não sei o que é e não tenho associação com eles, a explicação é apenas uma boa.)
Agora que você sabe tudo sobre padrões e UTIs (er, não do tipo médico), agora podemos falar sobre a configuração de associações de arquivos a partir de uma linha de script / comando.
Primeiro, você precisará saber a maneira correta de identificar os arquivos para os quais deseja fazer uma associação.
Lembra como eu disse que as ITUs eram importantes? Existem várias maneiras de identificar um arquivo. Depende se o tipo foi formalmente declarado no seu sistema ou não. Por exemplo, editores de texto decentes como TextMate ou TextWrangler adicionam algumas declarações de tipo à hierarquia de tipos quando você as usa em seu sistema. Se, no entanto, você não tiver esses aplicativos, poderá não ter esses tipos declarados.
OK, chega de conversa. Exemplos:
Obtenha a UTI para um arquivo:
$ mdls myFile.xml
...
kMDItemContentType = "public.xml"
kMDItemContentTypeTree = (
"public.xml",
"public.text",
"public.data",
"public.item",
"public.content"
)
...
OK legal. Um tipo de conteúdo explícito que podemos usar. Escreva isso em algum lugar.
$ mdls myFile.myExtn
...
kMDItemContentType = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree = (
"public.data",
"public.item"
)
...
Opa O OS X não sabe sobre os arquivos ".myExtn". Então, criou uma UTI dinâmica que não podemos usar para nada. E os tipos pai são genéricos demais para serem úteis.
Agora que sabemos quais são nossos arquivos, vamos olhar para o arquivo LaunchServices.plist e ver o que podemos fazer:
$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";
},
...
);
...
}
Portanto, quando você tem um tipo de conteúdo "bom" para usar, a primeira construção é melhor. Caso contrário, a outra construção. Observe que existem outras construções nesse arquivo, mas elas não são relevantes para o que você pediu. Apenas saiba que eles estão lá quando você olha através da saída.
Como você pode ver, você precisará encontrar a UTI do aplicativo que deseja usar. As UTIs para Safar e TextMate estão no meu exemplo acima, mas para encontrar genericamente a UTI para um aplicativo:
$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
...
NOTA: Não faço ideia do que constitui a diferença entre LSHandlerRoleAll e LSHandlerRoleViewer. Não consigo encontrar documentação sobre isso em nenhum lugar. O que fazer ver é que 99% do tempo LSHandlerRoleAll é o único conjunto (ou seja, não há nenhuma LSHandlerRoleViewer em tudo) e que está definido para a UTI para o aplicativo que você deseja associar o tipo de com.
Tendo levado você até aqui, vou deixar COMO definir os valores que você deseja como exercício para o leitor. Mexer com essas coisas pode ser um pouco perigoso. É perfeitamente possível que você estrague um arquivo e não tenha QUALQUER uma das suas associações de arquivos funcionando. Então você tem que jogar fora o arquivo e começar de novo.
Algumas dicas:
- Leia
defaults write
e sua sintaxe
- Dê uma olhada
PlistBuddy
. man PlistBuddy
e/usr/libexec/PlistBuddy -h
- Ignore toda essa bobagem e use RCDefaultApp
LSHandlerRoleViewer
, eu me pergunto se isso pode estar relacionado ao padrão para visualização, em vez de edição ( apple.stackexchange.com/a/49998/206073 me colocou nessas linhas). Eu não sei embora em que contextos se pode determinar se um é a abertura para visualização ou edição, no entanto ... (off topic,CFBundleTypeRole
parece que aceita valores semelhantes)com.apple.LaunchServices/com.apple.launchservices.secure
pode ser o domínio em sistemas MacOS posteriores ...Uma opção é editar
~/Library/Preferences/.GlobalPreferences.plist
:defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType=com.adobe.pdf;LSHandlerRoleAll=net.sourceforge.skim-app.skim;}'
Você pode usar o PlistBuddy para verificar se já existem entradas , mas não encontrei nenhuma maneira de aplicar alterações sem reiniciar ou reconstruir o banco de dados dos Serviços de Ativação.
Usando duti , você pode executar
duti ~/.duti
depois de salvar isso como~/.duti
:fonte
Realmente não responde à sua pergunta, mas pode ser uma solução.
O Inspetor no Finder apresenta informações para o arquivo atualmente selecionado , ou arquivos:
⌘+ ⌥+I
A janela Informações de resumo do Finder é útil quando vários arquivos são selecionados:
^+ ⌘+I
Se você selecionar vários arquivos do mesmo tipo, qualquer um dos métodos acima permitirá que você alterne facilmente a propriedade Abrir com: para esses arquivos.
fonte
Não é uma resposta para sua pergunta exata, mas outra solução possível. Você pode abrir um documento com um aplicativo específico na linha de comando com o argumento -a para abrir.
Por exemplo, abra todos os arquivos html no diretório atual.
Abra index.html e os arquivos do controlador javascript no editor de texto Atom:
Dependendo das suas necessidades, você pode modificá-lo para ser um serviço do Automator ao qual pode ser atribuída uma tecla de atalho, considerando os caminhos de arquivo selecionados como argumento.
Aqui está um exemplo do AppleScript do Automator que recebe arquivos como entrada e abre os arquivos selecionados no Chrome:
corrida final
Obviamente, você pode alterar o nome do aplicativo "Sublime" editor de texto, salvá-lo como outro serviço e atribuir as duas teclas de atalho.
fonte