Откуда Nautilus берет описание типа файла?

Откуда Nautilus берет описание типа файла?

Я создал и зарегистрировал несколько файлов shared-mime-info для пользовательских типов файлов. Например, в

~/.local/share/mime/packages

Я добавил такие файлы, как

x-myokit.xml

содержащий описание типа MIME, например

<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
  <mime-type type="text/x-myokit">
    <comment xml:lang="en">Myokit model definition</comment>
    <glob pattern="*.mmt"/>
  </mime-type>
</mime-info>

Nautilus теперь распознает мои файлы, но по-прежнему отображает тип файла как "Неизвестный". Как сделать так, чтобы он показывал что-то более полезное в этой колонке?

решение1

Это было жестко запрограммировано в Nautilusсоответствии с решением разработчиковпоказывать только основную информацию о типев Typeстолбце по умолчанию, так что сортировка по типу будет группировать семейства типов.
Базовые типы определены вnautilus-файл.cна основе общих (символических) названий иконок 1 :

struct {
        const char *icon_name;
        const char *display_name;
} mime_type_map[] = {
    { "application-x-executable", N_("Program") },
    { "audio-x-generic", N_("Audio") },
    { "font-x-generic", N_("Font") },
    { "image-x-generic", N_("Image") },
    { "package-x-generic", N_("Archive") },
    { "text-html", N_("Markup") },
    { "text-x-generic", N_("Text") },
    { "text-x-generic-template", N_("Text") },
    { "text-x-script", N_("Program") },
    { "video-x-generic", N_("Video") },
    { "x-office-address-book", N_("Contacts") },
    { "x-office-calendar", N_("Calendar") },
    { "x-office-document", N_("Document") },
    { "x-office-presentation", N_("Presentation") },
    { "x-office-spreadsheet", N_("Spreadsheet") },
};

Типы, которые не попадают в вышеуказанные категории, показаны как Unknown:

if (basic_type == NULL) {
    basic_type = g_strdup (_("Unknown"));

В результате файл с типом MIME application/x-myokit(с соответствующим символическим именем значка application-x-generic) будет указан как Unknownв Typeстолбце , а файл с типом MIME text/x-myokit(с соответствующим символическим именем значка text-x-generic) будет указан как Textв Typeстолбце (см. также различные системные файлы, такие как *.soфайлы ниже /usr/libили *.moфайлы в /usr/share/locale— все они указаны как , Unknownно если вы выберете один из них и нажмете Alt+, Enterвы получите подробную, точную информацию).


Вы можете заставить Nautilus перечислить что-то еще, если используете generic-icon nameв своем xmlфайле. Хотя ваши возможности ограничены вышеупомянутыми категориями. Так, например, если вы хотите, чтобы каждый из ваших *.mmtфайлов был перечислен Programв Typeстолбце, вы должны отредактировать его x-myokit.xmlследующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
    <mime-type type="application/x-myokit">
        <comment>Myokit model definition</comment>
        <generic-icon name="text-x-script"/>
        <glob pattern="*.mmt"/>
    </mime-type>
</mime-info>

Не забудьте обновить базу данных MIME с помощью:

update-mime-database ~/.local/share/mime

Если вам нужна более полезная информация, вы можете включить/отметить этот MIME typeстолбец в Nautilusнастройках (или с помощью dconf/ gsettings: добавить mime_typeв org.gnome.nautilus.list-view default-visible-columns).

1: запустить gio info -a standard::symbolic-icon file, чтобы увидеть соответствующие символические имена значков (в старых настройках заменить gio infoна gvfs-info)

решение2

Я считаю, что Nautilus получает описание файла из местоположения /usr/share/applications. Вы можете найти больше полезной информации в моем другом ответездесь. Особенно,этотответ в Ask Ubuntu подробно обсуждает, как хранятся ассоциации файлов.

Файловый менеджер (по умолчанию Nautilus) использует тип MIME файла, чтобы определить, с помощью какой программы его открывать. Когда приложение установлено, оно может указать, какие типы MIME оно может открыть, и команду, которую следует использовать для открытия файлов в файле .desktop, который находится в /usr/share/applications. Этот файл используется для меню, ярлыков на рабочем столе и т. д.

Связанный контент