我大部分时间都在使用 MATLAB,我很乐意在视觉上区分代码文件 (.m)、数据文件 (.mat) 和图形 (.fig)。这是一件很明显的事情,但结果却很奇怪。
我现在在这里:
- 添加了新的 mime
application/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. 为未知文件类型创建定义:
如果你的文件类型不常见,Ubuntu 无法正确检测/定义它,你需要自己做。这种识别称为«MIME 类型»。MIME 类型指定为 .xml 文档。这是我的示例(Matlab 使用的数据文件):
MATLAB 数据文件将具有 MIME 类型的 .xml 文件发送给
/usr/share/mime/packages
— 所有用户~/.local/share/mime/packages
— 一个用户更新 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 类型设置图标:
根据
type="matlab-types/matlabdata"
.xml 文件重命名您的图标,但将“/”替换为“-”:“custom-types-matlabdata.svg”将其放入存储与桌面主题相关的图标的文件夹中:
sudo cp icon.svg /usr/share/icons/{THEME}/scalable/mimetypes/custom-types-matlabdata.svg
请注意,您可以将矢量图像放入 .../scalable/... 文件夹。如果您有光栅 .png 图标,则必须创建一组具有不同比例的副本并将它们放入各自的文件夹中:
/usr/share/icons/{THEME}/(8x8, 16x16, 22x22…)/mimetypes/…
更新图标现金(无需重新登录/重新启动):
sudo 更新图标缓存 /usr/share/icons/*
完毕!
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-mime
,xdg-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-caches
或xdg-*
,它们适用于任何标准桌面,包括 Gnome、KDE、Mate、Cinnamon 等。
(遗憾的是,该xdg-*
工具不提供可扩展 SVG 图标方面的帮助,因此您必须手动重命名并将其复制到正确的scalable/
文件夹)
最后但并非最不重要的一点是,好的推荐信也是共享 MIME 信息数据库和图标命名规范。这些xdg-*
工具遵循这些规范,可以用来操作大多数数据,而不必手动更改此类文件。