È possibile eseguire una query nel database dei servizi di avvio per le applicazioni che apriranno un file arbitrario o un tipo UTI?


11

Sono in grado di utilizzare mdls per mostrare l' Uniform Type Identifier (UTI) per un file arbitrario, nonché la gerarchia di tipi che sono superset di una UTI specifica.

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"
)

Esistono strumenti in grado di mostrare quali app sono state registrate per una particolare UTI oltre a tentativi ed errori?

foo.commandDall'ispezione risulta chiaro che il file verrà aperto da Terminal.app, ma non è affatto chiaro che foo.ksh attualmente appartiene a TextEdit.app.

Mi piacerebbe poter leggere direttamente il database dei Servizi di avvio di Mac OS X senza ricorrere effettivamente all'utilizzo openper vedere quale app viene scelta su una base UTI. Sarebbe come avere degli --preview --verboseinterruttori che si aprono per dirmi cosa farebbe invece di farlo.

Ancora meglio sarebbe un modo per elencare tutte le app che potrebbero aprire quell'UTI, anche se non sono l'app preferita.

Per ottenere queste informazioni secondarie, devo creare o trovare un file per ogni tipo di interesse e utilizzare il Finder per mostrare manualmente quali app potrebbero aprire quell'UTI.

inserisci qui la descrizione dell'immagine

Mi piacerebbe davvero poter accedere a questi dati programmaticamente dal terminale.


Il completamento di zsh sembra interessante, ma non vedo come ottenerlo come stdout. Esaminerò il codice sorgente di AppApplications e vedrò se il binario funziona su Lion o posso farlo compilare. È un ottimo paio di cavi - grazie!
bmike,

Risposte:


6

Il duti di Andrew Mortensen è una CLI che elencherà i gestori UTI:

  • -d <uti> elenca il gestore predefinito;
  • -l <uti> elenca tutti i gestori registrati.

Vedi la pagina man per duti .

EDIT: come sottolinea Lri in questa risposta , duti non sembra elencare tutte le possibili applicazioni (probabilmente perché non tiene conto dell'ereditarietà dell'IT? Sarebbe una questione da approfondire). La sua soluzione raccomandata, AllApllications sarebbe ovviamente una risposta migliore.


Manca però alcune app che verrebbero visualizzate all'aperto con menu.
Lri,

Molto strano. Potresti dirmi quali mancano?
kopischke,

Ho modificato la mia risposta nell'altra domanda per includere l'output di esempio di duti.
Lri,

Mentre duti è ben scritto, ora utilizza API obsolete. Consiglio di dare un'occhiata a developer.apple.com/library/prerelease/mac/documentation/Carbon/…
Mugen,

OK - l'installazione di homebrew fa cadere una corsa a casa. Grazie mille!
bmike,

11

È possibile utilizzare questo comando per esaminare il database dei servizi di avvio. L'opzione -dump ti dà l'intero database, quindi puoi reindirizzarlo a grep e cercare quello che ti piace.

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


Probabilmente dovrò porre una domanda in seguito su come elaborare questo dump per sputare il bundle dell'app o la posizione del file mdimporter specifico che analizza uno specifico kMDItemContentType - ma questo ha aiutato molto. Grazie
bmike,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.