¿Es posible consultar la base de datos de servicios de lanzamiento para aplicaciones que abrirán un archivo arbitrario o tipo de UTI?

11

Puedo usar mdls para mostrar el Identificador de tipo uniforme (UTI) para un archivo arbitrario, así como la jerarquía de tipos que son superconjuntos de una 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"
)

¿Hay alguna herramienta que pueda mostrar qué aplicaciones se han registrado para una IU en particular que no sean prueba y error?

De la inspección queda claro que foo.commandTerminal.app abrirá el archivo, pero no está nada claro que foo.ksh pertenezca actualmente a TextEdit.app.

Me gustaría poder leer la base de datos de Mac OS X Launch Services directamente sin tener que recurrir a openla aplicación para ver qué aplicación se elige por UTI. Sería como tener --preview --verboseinterruptores abiertos para decirme qué haría en lugar de hacerlo.

Aún mejor sería una forma de enumerar todas las aplicaciones que podrían abrir esa UTI, incluso si no son la aplicación preferida.

Para obtener esta información secundaria, tengo que crear o encontrar un archivo para cada tipo de interés y usar Finder para mostrar manualmente qué aplicaciones podrían abrir esa UTI.

ingrese la descripción de la imagen aquí

Realmente me gustaría poder acceder a estos datos mediante programación desde el terminal.

bmike
fuente
La finalización de zsh parece interesante, pero no veo cómo obtener eso como stdout. Examinaré el código fuente de AppApplications y veré si el binario funciona en Lion o si puedo compilarlo. Es un gran par de pistas, ¡gracias!
bmike

Respuestas:

6

El duti de Andrew Mortensen es una CLI que enumerará los controladores de UTI:

  • -d <uti> enumera el controlador predeterminado;
  • -l <uti> enumera todos los manejadores registrados.

Vea la página del manual para holandés .

EDITAR: como señala Lri en esta respuesta , duti no parece enumerar todas las aplicaciones posibles (¿posiblemente porque no tiene en cuenta la herencia de infecciones urinarias? Eso sería un tema para una mayor investigación). Su solución recomendada, AllApllication , obviamente sería una mejor respuesta.

kopischke
fuente
Sin embargo, faltan algunas aplicaciones que se mostrarían en el menú abierto con.
Lri
Muy raro. ¿Podrías decirme cuáles falta?
kopischke
Edité mi respuesta en la otra pregunta para incluir un ejemplo de salida de duti.
Lri
Si bien duti está bien escrito, ahora usa API obsoletas. Recomiendo echar un vistazo a developer.apple.com/library/prerelease/mac/documentation/Carbon/…
Mugen
OK: la instalación de esto por homebrew da un jonrón. ¡Muchas gracias!
bmike
11

Puede usar este comando para examinar la base de datos de servicios de lanzamiento. La opción -dump le brinda toda la base de datos, luego puede canalizar esto en grep y buscar lo que quiera.

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

Chris
fuente
Probablemente tendré que hacer una pregunta sobre cómo procesar este volcado para escupir el paquete de aplicaciones o la ubicación del archivo mdimporter específico que analiza un kMDItemContentType específico, pero esto ha sido de gran ayuda. Gracias
bmike