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.


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ą.


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'


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.