Можно ли запросить базу данных служб запуска для приложений, которые откроют произвольный файл или тип 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.

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

Я действительно хотел бы иметь возможность получить доступ к этим данным программно из терминала.

bmike
источник
Завершение zsh кажется интересным, но я не вижу, как получить это как стандартный вывод. Я посмотрю на исходный код AppApplications и выясню, работает ли двоичный файл на Lion, или я смогу его скомпилировать. Это отличная пара ведет - спасибо!
bmike

Ответы:

6

Дуэт Эндрю Мортенсена - это CLI, в котором будут перечислены обработчики UTI:

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

Смотрите man-страницу для duti .

РЕДАКТИРОВАТЬ: как Lri указывает в этом ответе , duti, кажется, не перечисляет все возможные приложения (возможно, потому что он не учитывает наследование UTI? Это было бы вопросом для дальнейшего расследования). Его рекомендуемое решение, AllApllications , очевидно, будет лучшим ответом.

Копишке
источник
В нем отсутствуют некоторые приложения, которые бы отображались в открытом меню.
Lri
Очень странно. Не могли бы вы сказать мне, какие из них отсутствуют?
копишке
Я отредактировал свой ответ в другом вопросе, чтобы включить пример вывода из duti.
Lri
Хотя duti хорошо написан, теперь он использует устаревшие 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