2015-08-17 14 views
5

Как получить список приложений, способных открыть определенный тип файла/MIME-типа? Я ищу независимое от настольной среды решение Linux.Получить список приложений для открытия определенного файла

Я нашел possibilty получить тип MIME для файла .:

~> xdg-mime query filetype test.svg 
image/svg+xml 

Тогда я мог бы запросить для приложения по умолчанию для данного типа MIME .:

~> xdg-mime query default image/svg+xml 
eog.desktop 

Есть также решение для получения списка программ (не по умолчанию), которые я могу использовать для этого файла?

Например, на рабочем столе GNOME, если я выбираю открыть с другим приложением для *.json файла, можно увидеть три (Atom, Gedit, строитель) приложений, которые рекомендованы для открытия файла .:

GNOME dialog open with another application

Если я выбираю, показать все приложения, я могу также видеть дальнейшее соответствующее приложение (LibreOffice Writer) .:

GNOME dialog show all applications

Я нашел файл /home/user/.config/mimeapps.list который имеет содержание, как:

[Added Associations] 
text/html=atom.desktop;firefox.desktop;midori.desktop;org.gnome.gedit.desktop;brackets.desktop; 
application/javascript=atom.desktop;org.gnome.Builder.desktop;org.gnome.gedit.desktop; 

и также связаны приложения для типа пантомимы, но я не могу найти глобальный mimeapps.list файл, который упоминается в Arch Linux wiki.

+0

Имеет ли команда «файл -i » помощь.? – crafter

+0

Не знаю. Насколько я вижу, у меня неправильный тип MIME - файл SVG 'file -i test.svg test.svg: text/html; charset = us-ascii' Также я не знаю, как получить список желаемых приложений. –

+0

ОК, я вижу, что вы хотите сделать сейчас. Попробуйте просмотреть этот файл: /usr/share/applications/defaults.list (для Debian/Ubuntu для меня). – crafter

ответ

5

Что GNOME , скорее всего, делает разбор всех файлов .desktop и ищет их, которые объявляют поддержку запрошенного типа MIME. Это единственный способ решить вашу проблему. При наличии соответствующих библиотек разбора и языка более низкого уровня, это должно быть относительно быстрой операцией. Кроме того, они могут поместить некоторые файлы кеша, чтобы ускорить работу.

Но если «определенный» не требуется и «вероятно» для вас достаточно, то все файлы MIME и файлы .desktop, связанные с ними, хранятся в файлах mimeinfo.cache. Я не уверен, что фактическая гарантия этого файла и, возможно, я использую это неправильный путь, но следующая функция, кажется, работает нормально

#!/bin/bash 

xdg-all-apps() { 
    LOCAL="${XDG_DATA_HOME:-$HOME/.local/share}/applications/mimeinfo.cache" 
    GLOBAL="/usr/share/applications/mimeinfo.cache" 

    MATCHING="$(grep -h "$1" "$LOCAL" "$GLOBAL")" 
    if [ -z "$MATCHING" ]; then 
     echo "There are no application associated with $1" 
     return 
    fi 
    echo "$MATCHING" |cut -d = -f 2 |\ 
     sed -z -e 's:\n::;s:;:\n:g' |\ 
     sort |uniq 
} 

xdg-all-apps text/plain 
xdg-all-apps audio/mpeg 
xdg-all-apps image/svg+xml 
xdg-all-apps application/json 

В моей системе работает этот код генерирует следующий вывод:

gvim.desktop 
kde4-kate.desktop 
kde4-kwrite.desktop 
kde4-okularApplication_txt.desktop 
kwrite-usercreated.desktop 
libreoffice-writer.desktop 
vim.desktop 

easytag.desktop 
smplayer.desktop 
smplayer_enqueue.desktop 
vlc.desktop 

gimp.desktop 
inkscape.desktop 
kde4-kolourpaint.desktop 
midori.desktop 
There are no application associated with application/json 

Как вы можете видеть, некоторые приложения предоставляют более одного файла рабочего стола (smplayer.desktop и smplayer_enqueue.desktop). Эти функциональные дубликаты могут быть удалены, но это не тривиально.

Но обратите внимание, что некоторые настольные компьютеры вообще игнорируют XDG. Если вы хотите по-настоящему кросс-настольный путь, вы должны поместить файлы mailcap где-нибудь в миксе. Я твердо верю, что GNOME фактически игнорирует его.

+0

Для 'application/json' я получаю только' org.gnome.Builder.desktop', но есть и Atom и Gedit, если вы посмотрите на скриншот выше. –

+1

Как насчет 'text/javascript' и' text/plain'? Кажется, что [тип JSON MIME не был стандартизирован в прошлом] (http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type), поэтому, возможно, GNOME возвращается к разным типы для обработки этих файлов. Вам нужно будет найти файлы .desktop Atom и Gedit и посмотреть, какие типы MIME они заявляют, что они поддерживают. Или, в равной степени, мое решение не достаточно хорошо. –

0

Вместо того чтобы писать свой собственный сценарий, как это было предложено @ MirosławZalewski, рассмотреть вопрос об использовании жемчужно-файлы mimeinfo инструмента (ArchWiki link).

жемчужно-файлов mimeinfo предоставляет инструменты mimeopen и mimetype. Они имеют немного более приятный интерфейс, чем их эквиваленты xdg-utils:

# determine a file's MIME type 
$ mimetype photo.jpeg 
photo.jpeg: image/jpeg 

# choose the default application for this file 
$ mimeopen -d photo.jpeg 
Please choose an application 

    1) Feh (feh) 
    2) GNU Image Manipulation Program (gimp) 
    3) Pinta (pinta) 

use application # 

# open a file with its default application 
$ mimeopen -n photo.jpeg 

В -d вариант, длинный вариант --ask-default, позволяет пользователю выбрать новую программу по умолчанию для данных файлов.
Опция -n, длинный вариант --no-ask, не спрашивает у пользователя, какую программу использовать, он выбирает программу по умолчанию или первую программу, известную для обработки файла mimetype.

В Fedora этот пакет называется perl-File-MimeInfo.
В Debian и Ubuntu это называется libfile-mimeinfo-perl.

 Смежные вопросы

  • Нет связанных вопросов^_^