如何为文件类型 .m(或任何特定扩展名;Ubuntu 20.04)添加图标

如何为文件类型 .m(或任何特定扩展名;Ubuntu 20.04)添加图标

我大部分时间都在使用 MATLAB,我很乐意在视觉上区分代码文件 (.m)、数据文件 (.mat) 和图形 (.fig)。这是一件很明显的事情,但结果却很奇怪。

我现在在这里:

  • 添加了新的 mimeapplication/matlab m mat fig条目/etc/mime.types
  • 图标matlab-m.png, matlab-fig.png, matlab-mat.png被放入/usr/share/icons/gnome/8x8...512x512/mimetypes(每个文件夹正确大小)和 .svg 同名/usr/share/icons/gnome/scalable/mimetypes
  • 将 XML 命名matlab.xml/usr/share/mime/packages

这是我的.xml:

<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
  <mime-type type="application/matlab-m">
    <comment>Matlab source code</comment>
    <glob pattern="*.m"/>
    <icon name="matlab-m"/>
  </mime-type>
  <mime-type type="application/matlab-fig">
    <comment>Matlab figure</comment>
    <glob pattern="*.fig"/>
    <icon name="matlab-fig"/>
  </mime-type>
  <mime-type type="application/matlab-mat">
    <comment>matlab data</comment>
    <glob pattern="*.mat"/>
    <icon name="matlab-mat"/>
  </mime-type>
</mime-info>

这些操作并没有使系统读取 .m 和 .fig 文件的图标,但突然检测到了 .mat 文件的图标。请告诉我我错在哪里。

答案1

好吧,看来,在 Ubunty 中为文件类型分配图标是一项比人们想象的更棘手的任务。无论如何,我找到了一个相当清晰的解释以防有同样愿望的人找到这个页面。简而言之:

A. 为未知文件类型创建定义:

  1. 如果你的文件类型不常见,Ubuntu 无法正确检测/定义它,你需要自己做。这种识别称为«MIME 类型»。MIME 类型指定为 .xml 文档。这是我的示例(Matlab 使用的数据文件):

    MATLAB 数据文件
  2. 将具有 MIME 类型的 .xml 文件发送给 /usr/share/mime/packages— 所有用户 ~/.local/share/mime/packages— 一个用户

  3. 更新 MIME 类型的数据库:sudo update-mime-database /usr/share/mime 如果成功,matlab-types则会在 处创建一个新文件夹/usr/share/mime,其中包含一个自动生成的文件matlabdata.xml。请注意,它是根据type="matlab-types/matlabdata"我们自定义的 MIME 类型定义完成的。如果我需要创建其他与 Matlab 相关的 MIME 类型,我将<mime-type> ... </mime-type>在 .xml 中添加另一个部分,相关文件将存储在同一/usr/share/mime/matlab-types目录中。

B. 为(自定义)MIME 类型设置图标:

  1. 根据type="matlab-types/matlabdata".xml 文件重命名您的图标,但将“/”替换为“-”:“custom-types-matlabdata.svg”

  2. 将其放入存储与桌面主题相关的图标的文件夹中:

    sudo cp icon.svg /usr/share/icons/{THEME}/scalable/mimetypes/custom-types-matlabdata.svg

请注意,您可以将矢量图像放入 .../scalable/... 文件夹。如果您有光栅 .png 图标,则必须创建一组具有不同比例的副本并将它们放入各自的文件夹中:

/usr/share/icons/{THEME}/(8x8, 16x16, 22x22…)/mimetypes/…
  1. 更新图标现金(无需重新登录/重新启动):

    sudo 更新图标缓存 /usr/share/icons/*

  2. 完毕!

PS. 一些用于操作图标的帮助代码: 放入.sh 文件并使用 sudo 运行

#!/bin/bash

copyName="(NAME).svg"
pasteName="(CATEGORY DIR)-(MIME TYPE).svg"
themeName="(THEME)"
copyFrom='(WHERE DOWNLOADED ICON IS)'
iconsDir="/usr/share/icons" # "~/.icons"
copyTo="$iconsDir/$themeName/scalable/mimetypes"

cp "$copyFrom/$copyName" "$copyTo/$pasteName" && \
echo "FROM:\n\t$copyName\n\t$storagedir\n\nTO:\n\t$pasteName\n\t$pasteTo\n\n"

update-mime-database /usr/share/mime
gtk-update-icon-cache $iconsDir/$themeName/ -f

答案2

对 Igor 的出色回答进行了一些更正和改进:

项目 A 可以用一个命令来简化,例如:

sudo xdg-mime install --novendor matlab.xml

项目B也可以简化:

sudo xdg-icon-resource install --novendor --context mimetypes --size 48 myicon.png application-matlab-fig

这会自动将图标文件复制到正确的位置,在本例中为/usr/local/share/icons/hicolor/48x48/mimetypes/…。如果没有运行,sudo它将自动安装在~/.local/share仅供您用户的前缀下。

上述命令将自动更新各自的 mime / icon 数据库。

如果您有多个 PNG 且有多种尺寸,则必须多次运行此命令。在这种情况下,您可以添加到每个命令中,并在末尾--noupdate发出一个命令,这样它只会在安装所有文件后更新一次图标数据库。sudo xdg-icon-resource forceupdate

这种方法的一个例子可以在这个脚本

也值得一读的手册xdg-mimexdg-icon-resource以及它的“表亲”xdg-desktop-menu

至于命名,我建议使用默认的 mimetype 名称而不是自定义名称,这样您就可以省略<icon name="matlab-fig"/>XML 中的声明,您的桌面将使用默认名称。因此,我将图标命名application-matlab-fig为 而不是matlab-fig,以便它与 mimetype 匹配。注意这是图标姓名和原来一样文件名称(myicon.png)无关紧要,它将在安装到目标路径时被重命名。

注意目标路径位于/usr/local/share不是 /usr/share:/usr/share适用于系统由操作系统控制的软件包,即Ubuntu放置由 安装的软件包中的文件sudo apt install。本地修改应使用/usr/local树。请参阅这个答案了解更多详情。

避免使用特定于桌面的命令,例如gtk-update-icon-cache(仅适用于 Gnome),而始终优先使用通用版本,例如update-icon-cachesxdg-*,它们适用于任何标准桌面,包括 Gnome、KDE、Mate、Cinnamon 等。

(遗憾的是,该xdg-*工具不提供可扩展 SVG 图标方面的帮助,因此您必须手动重命名并将其复制到正确的scalable/文件夹)

最后但并非最不重要的一点是,好的推荐信也是共享 MIME 信息数据库图标命名规范。这些xdg-*工具遵循这些规范,可以用来操作大多数数据,而不必手动更改此类文件。

相关内容