Como posso alterar o aplicativo padrão para todos os arquivos de um tipo de arquivo específico através do Terminal no OS X?
macos
file-association
yashodhan
fonte
fonte
Respostas:
Eu tenho uma maneira mais simples. Você quer o Homebrew se ainda não o possui:
Instale o duti:
Agora você precisa encontrar o ID do aplicativo que deseja usar e atribuí-lo à extensão para a qual deseja usá-lo. Neste exemplo, eu já uso colchetes para
*.sh
e também quero usá-lo para*.md
arquivos em vez de xcode.Obtenha o ID do aplicativo padrão para
.sh
arquivos:A última linha é a identificação.
Use este ID de aplicativo para todos os
.md
arquivos:fonte
osascript -e 'id of app "$appName"'
para obter o ID de qualquer aplicativo instalado no seu sistemaduti -s $(osascript -e 'id of app "Visual Studio Code"') .md all
Edit
~/Library/Preferences/com.apple.LaunchServices.plist
.Adicione uma entrada em
LSHandlers
, contendo a UTI (chaveLSHandlerContentType
, por exemplopublic.plain-text
) e o identificador de pacote de aplicativos (LSHandlerRoleAll
, por exemplocom.macromates.textmate
).É assim no Editor de lista de propriedades :
Para fazer isso na linha de comando, use
defaults
ou/usr/libexec/PlistBuddy
. Ambos têm extensas páginas de manual.Por exemplo, para abrir todos os
.plist
arquivos usandoXcode
:Claro, você precisa se certificar de que ainda não existe outra entrada para a UTI
com.apple.property-list
.Aqui está um script mais completo que remove as entradas existentes para uma UTI e adiciona uma nova. Ele só pode manipular
LSHandlerContentType
, e sempre será definidoLSHandlerRoleAll
, e possui IDs de pacotes embutidos em vez de parâmetros. Fora isso, deve funcionar muito bem.fonte
x=~/Library/Preferences/com.apple.LaunchServices.plist; plutil -convert xml1 $x; open -a TextEdit $x
copiar e colar essas entradas do LSHandlers. Para obter o identificador de pacote, você pode fazerosascript -e 'bundle identifier of (info for (path to app "TextEdit"))'
.defaults
não parece ser capaz de fazê-lo, e requer algumasPlistBuddy
chamadas. Mas é possível fazer isso em um script de shell reutilizável.