Nautilus 和 Nemo 无法识别 python 3 文件

Max*_*ver 8 icons python nautilus mime-type nemo

Nautilus 和 Nemo 对 python 文件使用两个不同的图标:

python文件的两个不同图标

但我希望他们显示所有 python 文件的 python 图标。

mimetype为两个文件提供相同的结果:

$ mimetype *.py
buy_test.py:         text/x-python
candlestick_test.py: text/x-python
Run Code Online (Sandbox Code Playgroud)

file -i给出不同的输出:

$ file -i buy_test.py 
buy_test.py: text/x-python; charset=us-ascii
$ file -i candlestick_test.py 
candlestick_test.py: text/x-objective-c; charset=us-ascii
Run Code Online (Sandbox Code Playgroud)

Candlestick_test.py的输出是错误的,但此文件显示为 python 图标。不知道为什么。

这里有人遇到了同样的问题: Ubuntu 文件管理器没有显示正确的图标

但是他得到的答案对我不起作用:

$ grep -r 'text/x-python' /usr/share/thumbnailers
Run Code Online (Sandbox Code Playgroud)

没有输出。

我认为这些python文件之间的主要区别是shebang:

$ head -n2 buy_test.py 
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
$ head -n2 candlestick_test.py 
# -*- coding: utf-8 -*-
"""
Run Code Online (Sandbox Code Playgroud)

当我使用这个shebang(python 2)时......

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

...还有一个python图标。

Nautilus 和 Nemo 如何选择文件图标?

编辑:

一些附加信息:

如果我使用以下shebang之一,则会出现一个python图标:

#!/usr/bin/env python
#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

如果我使用以下shebang之一,则没有python图标:

#!/usr/bin/env python3
#!/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

所以看起来python3是一个问题。

编辑2:

xdg-mime 查询文件类型 FILENAME返回匹配 shebang 的 MIME 类型:

$ xdg-mime query filetype buy_test.py 
text/x-python3

$ xdg-mime query filetype candlestick_test.py 
text/x-python
Run Code Online (Sandbox Code Playgroud)

并且当我将candlestick_test.py的文件扩展名更改为.py3 时,python 图标消失并且xdg-mime 查询文件类型返回text/x-python3

编辑 3:

我找到了一个新的信息来源:

$ gio info ~/python/buy_test.py | grep icon
  standard::icon: text-x-python3, text-x-generic
  standard::symbolic-icon: text-x-python3-symbolic, text-x-generic-symbolic, text-x-python3, text-x-generic
$ gio info ~/python/candlestick_test.py | grep icon
  standard::icon: text-x-python, text-x-generic
  standard::symbolic-icon: text-x-python-symbolic, text-x-generic-symbolic, text-x-python, text-x-generic
Run Code Online (Sandbox Code Playgroud)

所以我想,我必须以某种方式将text-x-python3文件链接到text-x-python图标。

Max*_*ver 4

我终于可以修好它了!

据我了解,Nemo 和 Nautilus 尝试从/usr/share/icons/[MyTheme]/mimes/[ActualIconSize]/加载名为text-x-python3.svg的文件。如果~/.local/share/icons/[MyTheme]/mimes/[ActualIconSize]/中有这样的文件,则它具有更高的优先级。但这些目录都不存在于我的主题中:Humanity-Dark

因此 Nemo/Nautilus 尝试在另一个主题中找到该图标。在/usr/share/icons/Humanity-Dark/index.theme中定义了下一步要尝试的主题:

$ grep Inherits /usr/share/icons/Humanity-Dark/index.theme 
Inherits=Humanity,Adwaita,hicolor
Run Code Online (Sandbox Code Playgroud)

下一个尝试是人性。有text-x-python的图标,但没有text-x-python3的图标。所以我做了:

mkdir -p ~/.local/share/icons/Humanity-Dark/mimes/48
cp /usr/share/icons/Humanity/mimes/48/text-x-python.svg ~/.local/share/icons/Humanity-Dark/mimes/48/text-x-python3.svg
Run Code Online (Sandbox Code Playgroud)

图标大小 16 和 22 相同。现在它看起来符合预期:

Python 图标符合预期

也许这个解决方案对其他人有帮助。