Чи можливо запитувати базу даних служб запуску програм, які відкриють довільний файл або тип UTI?


11

Я можу використовувати mdls, щоб показати Уніфікований ідентифікатор типу (UTI) для довільного файлу, а також ієрархію типів, які є набором конкретного 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"
)

Чи є інструменти, які можуть показати, які програми зареєстровані для певного UTI, окрім проб і помилок?

З огляду зрозуміло, що foo.commandфайл буде відкрито Terminal.app, але зовсім не ясно, що foo.ksh в даний час належить TextEdit.app.

Я хотів би мати можливість читати базу даних Mac OS X Launch Services безпосередньо, не вдаючись до використання, openщоб побачити, який додаток вибирається на основі UTI. Це було б як --preview --verboseвідкрити комутатори, щоб сказати мені, що робити, а не робити це.

Ще кращим було б спосіб перерахувати всі додатки, які могли б відкрити цей UTI, навіть якщо вони не є кращим додатком.

Щоб отримати цю вторинну інформацію, мені потрібно створити або знайти файл для кожного типу інтересів і за допомогою Finder вручну показати, які програми можуть відкрити цей UTI.

введіть тут опис зображення

Я дуже хотів би мати можливість отримати доступ до цих даних програмно з терміналу.


Завершення zsh здається цікавим, але я не бачу, як це отримати як stdout. Я перегляну вихідний код AppApplications і побачу, чи працює бінарний файл на Леві чи я можу його скласти. Це чудова пара ведучих - дякую!
bmike

Відповіді:


6

Експерти Ендрю Мортенсена - це CLI, який буде перераховувати обробники UTI:

  • -d <uti> перелічує обробник за замовчуванням;
  • -l <uti> перелічує всі зареєстровані обробники.

Дивіться сторінку чоловіка для дуті .

EDIT: як в цій відповіді зазначає Лрі, схоже, що в Дуті не перелічено всіх можливих заявок (можливо, тому, що вони не враховують спадщину UTI? Це було б питанням для подальшого дослідження). Його рекомендоване рішення, AllApllication , очевидно, буде кращою відповіддю.


У ньому відсутні деякі додатки, які відображалися б у відкритому меню з меню.
Лрі

Дуже дивно. Не могли б ви сказати мені, яких з них немає?
kopischke

Я відредагував свою відповідь в іншому запитанні, щоб включити приклад результатів з дуті.
Лрі

Хоча дуті добре написаний, він тепер використовує застарілі API. Я рекомендую поглянути на developer.apple.com/library/prerelease/mac/documentation/Carbon / ...
Mugen

Гаразд - установка цього доморощеного вибиває домашній запуск. Дуже дякую!
bmike

11

За допомогою цієї команди можна вивчити базу даних служб запуску. Параметр -dump дає вам всю базу даних, тоді ви можете передати це в grep і шукати все, що вам подобається.

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


Ймовірно, мені потрібно буде задати наступне запитання, як обробити цей дамп, щоб виплюнути пакет додатків або розташування конкретного файлу mdimporter, який аналізує певний kMDItemContentType - але це дуже допомогло. Дякую
bmike
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.