É possível consultar o banco de dados dos serviços de inicialização para aplicativos que abrirão um arquivo arbitrário ou tipo de UTI?

11

Sou capaz de usar mdls para mostrar o UTI ( Uniform Type Identifier ) para um arquivo arbitrário, bem como a hierarquia de tipos que são superconjuntos de uma UTI específica.

mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType     = "public.ksh-script"
kMDItemContentTypeTree = (
    "public.ksh-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType     = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
    "com.apple.terminal.shell-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

Existem ferramentas que podem mostrar quais aplicativos se registraram para uma UTI específica, exceto tentativa e erro?

É claro pela inspeção que o foo.commandarquivo será aberto pelo Terminal.app, mas não está claro que o foo.ksh atualmente pertença ao TextEdit.app.

Eu gostaria de poder ler o banco de dados dos Serviços de Inicialização do Mac OS X diretamente, sem recorrer opena ver qual aplicativo é escolhido por UTI. Seria como ter --preview --verboseinterruptores para se abrir para me dizer o que faria, em vez de fazê-lo.

Melhor ainda seria uma maneira de listar todos os aplicativos que poderiam abrir essa UTI, mesmo que não sejam o aplicativo preferido.

Para obter essas informações secundárias, preciso criar ou localizar um arquivo para cada tipo de interesse e usar o Finder para mostrar manualmente quais aplicativos podem abrir essa UTI.

insira a descrição da imagem aqui

Eu realmente gostaria de poder acessar esses dados programaticamente a partir do terminal.

bmike
fonte
A conclusão do zsh parece interessante, mas não vejo como obtê-lo como stdout. Vou examinar o código-fonte do AppApplications e ver se o binário funciona no Lion ou posso compilá-lo. É um ótimo par de leads - obrigado!
bmike

Respostas:

6

O duti de Andrew Mortensen é um CLI que lista os manipuladores de UTI:

  • -d <uti> lista o manipulador padrão;
  • -l <uti> lista todos os manipuladores registrados.

Veja a página de manual para duti .

EDIT: como Lri aponta nesta resposta , o duti parece não listar todas as aplicações possíveis (possivelmente porque não leva em conta a herança da UTI? Isso seria uma questão para mais investigações). Sua solução recomendada, AllApllications , obviamente, seria uma resposta melhor.

kopischke
fonte
Faltam alguns aplicativos que seriam exibidos ao ar livre com o menu.
Lri
Muito estranho. Você poderia me dizer quais estão faltando?
22611 kopischke
Eu editei a minha resposta na outra pergunta para incluir exemplo de saída de duti.
Lri
Embora o duti seja bem escrito, agora usa APIs obsoletas. Eu recomendo dar uma olhada em developer.apple.com/library/prerelease/mac/documentation/Carbon/…
Mugen
OK - instalar isso pelo homebrew bate em um home run. Muito obrigado!
bmike
11

Você pode usar este comando para examinar o banco de dados dos serviços de ativação. A opção -dump fornece todo o banco de dados, então você pode inserir isso no grep e procurar o que quiser.

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'

Chris
fonte
Provavelmente vou precisar fazer uma pergunta sobre como processar esse despejo para cuspir o pacote de aplicativos ou o local do arquivo mdimporter específico que analisa um kMDItemContentType específico - mas isso ajudou muito. Obrigado
bmike