Czy można zapytać bazę danych usług uruchamiania o aplikacje, które otworzą dowolny plik lub typ UTI?

11

Jestem w stanie użyć mdls do wyświetlenia Uniform Type Identifier (UTI) dla dowolnego pliku, a także hierarchii typów, które są nadzbiórami konkretnego UTI.

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

Czy są jakieś narzędzia, które mogą pokazać, które aplikacje zostały zarejestrowane dla konkretnego interfejsu użytkownika, oprócz prób i błędów?

Z inspekcji jasno wynika, że foo.commandplik zostanie otwarty przez Terminal.app, ale wcale nie jest jasne, że foo.ksh należy obecnie do TextEdit.app.

Chciałbym móc bezpośrednio czytać bazę danych usług uruchamiania systemu Mac OS X bez konieczności korzystania openz funkcji sprawdzania, która aplikacja jest wybierana na podstawie UTI. To tak, jakbyśmy mieli --preview --verboseotwarte przełączniki, żeby powiedzieć mi, co powinien zrobić, niż robić to.

Jeszcze lepszy byłby sposób na wyświetlenie listy wszystkich aplikacji, które mogłyby otworzyć ten interfejs użytkownika, nawet jeśli nie są one preferowaną aplikacją.

Aby uzyskać te dodatkowe informacje, muszę utworzyć lub znaleźć plik dla każdego rodzaju zainteresowania i użyć Findera, aby ręcznie pokazać, które aplikacje mogą otworzyć ten interfejs użytkownika.

wprowadź opis zdjęcia tutaj

Naprawdę chciałbym mieć możliwość programowego dostępu do tych danych z terminala.

bmike
źródło
Zakończenie zsh wydaje się interesujące, ale nie rozumiem, jak to zrobić jako standardowe. Zajrzę do kodu źródłowego aplikacji i sprawdzę, czy plik binarny działa na Lionie, czy mogę go skompilować. To świetna para leadów - dzięki!
bmike

Odpowiedzi:

6

Duti Andrew Mortensena to CLI, który wyświetli listę programów obsługi UTI:

  • -d <uti> wyświetla domyślny moduł obsługi;
  • -l <uti> wyświetla listę wszystkich zarejestrowanych handlerów.

Zobacz stronę man dla duti .

EDYCJA: jak Lri wskazuje w tej odpowiedzi , duti nie wydaje się wymieniać wszystkich możliwych aplikacji (być może dlatego, że nie uwzględnia dziedziczenia UTI? To byłaby kwestia do dalszego zapytania). Jego zalecane rozwiązanie, AllApllications, byłoby oczywiście lepszą odpowiedzią.

kopischke
źródło
Brakuje jednak niektórych aplikacji, które byłyby wyświetlane w otwartym menu.
Lri
Bardzo dziwne. Czy możesz mi powiedzieć, których brakuje?
kopischke
Zredagowałem swoją odpowiedź w innym pytaniu, aby uwzględnić przykładowe dane wyjściowe z duti.
Lri
Chociaż duti jest ładnie napisane, teraz używa przestarzałych interfejsów API. Polecam zajrzeć na developer.apple.com/library/prerelease/mac/documentation/Carbon/...
Mugen
OK - zainstalowanie tego przez homebrew puka do domu. Dzięki wielkie!
bmike
11

Za pomocą tego polecenia można sprawdzić bazę danych usług uruchamiania. Opcja -dump daje ci całą bazę danych, następnie możesz przesłać ją do grep i wyszukać cokolwiek zechcesz.

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

Chris
źródło
Prawdopodobnie będę musiał zadać następujące pytanie, jak przetworzyć ten zrzut, aby wypluć pakiet aplikacji lub lokalizację określonego pliku mdimporter, który analizuje określony kMDItemContentType - ale to bardzo pomogło. Dziękuję
bmike