在 linux 中,如何确定默认的文本编辑器、终端等?
它是否因发行版而异?
我之前以一种相当丑陋的方式以编程方式访问了该列表,我确信这不是最好的方式。这些选项存储在一个名为 defaults.list 的文件中(我认为通常是这种情况)。该位置不太通用,我认为它在我的 ubuntu 系统上的 /usr/share/applications/ 中,尽管我认为它确实出现在其他地方。然后我将其视为文本文件。
解析顺序是$EDITOR
-> editor
-> 一些预定义的控制台编辑器列表。在 Debian/Ubuntu 上,sensible-editor
(andsensible-browser
和sensible-pager
) 将为您进行查找,包括查看正确的环境变量。类似的变量是$PAGER
, $SHELL
, $BROWSER
。要查找文件关联,您可以使用xdg-open
.
每个用户的环境变量告诉你。
然而,这对命令行软件有效,而桌面环境通常使用它们自己的(内部)变量。
同样在 python 中,您可以使用os.getenv
.
我认为默认编辑器或终端的概念没有意义。对于编辑器,有$EDITOR
定义时使用的约定。
在 Debian 和相关系统(例如 Ubuntu、Mint)上,您有类似/usr/bin/editor
和/usr/bin/x-terminal-emulator
符号链接(通过 符号链接/etc/alternatives/
)到某些系统默认值的路径。
另见达卡夫的回答
这适用于 ubuntu/gnome:
>>> query_lines = subprocess.check_output(['update-alternatives',
'--query',
'gnome-text-editor']).split('\n')
>>> bestlist = filter(lambda l: 'Best' in l, query_lines)
>>> bestlist[0].split()[1]
'/usr/bin/gedit'
如果不在 gnome 上,您至少可以获得命令行编辑器:
>>> query_lines = subprocess.check_output(['update-alternatives',
... '--query',
... 'editor']).split('\n')
>>> bestlist = filter(lambda l: 'Best' in l, query_lines)
>>> bestlist[0].split()[1]
'/bin/nano'
从@bowler 的回答中得到提示,纯粹是 bash:
editor=$(grep "text/plain" -r -i -I /usr/share/applications/defaults.list | awk -F';' '{print $1}' | awk -F'.desktop' '{print $1}' | awk -F'=' '{print $2}')