我想查看我的系统上安装了哪些图标并且可以使用哪些图标以及我应该用什么名称来引用它们。
我如何才能获得一个格式良好的所有唯一图标列表(不单独显示几种分辨率),其中包含图标名称、预览缩略图、位置以及可能的话它来自哪里(例如哪个图标主题包)?
系统:Ubuntu 15.10 Wily Werewolf 64 位
桌面:统一
答案1
gtk3-图标浏览器是一个用于列出主题图标的图形应用程序。
到目前为止,它仍在开发中,适用于 15.04 (vivid) 及更新版本。它的开发可以追溯到这篇博文发表于 2014 年。
截图 1:Adwaita 主题中的 gtk3-icon-browser(3.24.18)查看 Tango 图标主题,带有正常(左)和符号视图
截图 2:gtk3-icon-browser(3.24.18)搜索输入“保存”,弹出窗口显示图标详细信息,查看 Tango 图标主题(左)和 elementary Xfce 图标主题
根据以上截图进行快速审查:
- 所有独特图标的格式良好的列表:是 ^1
- 包含图标名称:是 ^2
- 预览缩略图:是
- 图标位置:否 ^3
- 图标主题来源:是 ^4
参考注释:
^1:此工具默认显示为图标视图(无法更改为列表视图)。单击或双击每个图标将显示该图标的所有可用分辨率。
^2:图标浏览器新版本(大概从3.22.30开始)在弹出窗口中添加了“复制到剪贴板”按钮,可以一键复制图标名称。
^3:此工具最有可能查看
/usr/share/icons
目录(不提及每个图标的位置)并根据以下信息提取其他信息:图标命名规范。^4:此工具仅显示当前的主题。要显示其他主题的图标,请将桌面环境的外观从当前主题更改为另一个主题。
gtk-3-examples
图标浏览器需要 GTK+ 3.13.4 或更新版本。在 15.04 (vivid) 或更新版本中安装相关软件包。
sudo apt-get install gtk-3-examples
gtk3-icon-browser
首次测试于 15.04(vivid),最新测试于 20.04(focal)。
相关来源:
master 上的 gtk/demos 源代码适用于 GitHub 上的 GNOME/gtk。
正在开发面向 GTK+ 开发人员的新图标浏览器工具在 Fedora 杂志上
简要提到并附有截图这个答案在 Ask Ubuntu 上。
答案2
好吧,有些桌面环境会在您尝试更改某个图标时显示此信息,但您自己做这件事相当容易。只需找到所有图标,在某个目录中创建指向它们的链接,然后浏览该目录即可。不同分辨率的图标将具有相同的名称,只是路径会发生变化。例如:
$ find /usr/share/icons/ -name '*emacs.*'
/usr/share/icons/hicolor/16x16/apps/emacs.png
/usr/share/icons/hicolor/48x48/apps/emacs.png
/usr/share/icons/hicolor/scalable/apps/emacs.svg
/usr/share/icons/hicolor/128x128/apps/emacs.png
/usr/share/icons/hicolor/32x32/apps/emacs.png
/usr/share/icons/hicolor/24x24/apps/emacs.png
/usr/share/icons/Mint-X/apps/96/emacs.svg
/usr/share/icons/Mint-X/apps/16/emacs.png
/usr/share/icons/Mint-X/apps/24/emacs.png
/usr/share/icons/Mint-X/apps/48/emacs.png
/usr/share/icons/Mint-X/apps/32/emacs.png
/usr/share/icons/Mint-X/apps/22/emacs.png
如上所示,一般格式为/ParentDir/ThemeName/CLass/Resolution/IconName
。因此,由于图标的名称相同,我们可以通过让每个创建的链接覆盖任何现有的同名链接来轻松避免重复。但是,我们确实希望将不同主题的图标分开,因此需要编写更多脚本:
#!/usr/bin/env bash
## Create the target directory
mkdir -p ~/foo
## Iterate over all files/dirs in the target locations
for i in ~/.icons/* /usr/share/icons/* /usr/share/pixmaps/*; do
## find all icon files in this directory. If the current $i
## is not a directory, find will just print its path directly.
find "$i" -name '*xpm' -o -name '*.svg' -o -name '*png' |
## Iterate over find's results
while read ico; do
## Make the link. ${var##*/} will print the
## basename of $var, without the path. Here, I use
## it both to get the theme name (${i##*/}) and the
## icon's name (${ico##*/}).
ln -sf "$ico" "${i##*/}"_"${ico##*/}"
done
done
上述脚本将创建一个目录~/foo
,其中包含指向每个唯一图标文件的链接。选项-f
告诉ln
它覆盖具有相同名称的现有文件,并且由于我们在链接名称中使用主题名称,因此不应有重复项。例如,给定emacs.png
上面显示的图标,它将创建:
hicolor_emacs.png -> /usr/share/icons/hicolor/48x48/apps/emacs.png
Mint-X_emacs.png -> /usr/share/icons/Mint-X/apps/22/emacs.png
您现在可以浏览~/foo
并查看:
然后,要获取源包,您可以运行:
for i in ~/foo/*; do dpkg -S $(readlink -f "$i"); done