【发布时间】:2012-01-06 20:44:16
【问题描述】:
在linux中,如何确定默认的文本编辑器、终端等?
是否因发行版而异?
【问题讨论】:
-
好的,看起来系统使用了一个名为 defaults.list 的文件。因此,找出系统正在使用的 defaults.list 应该可以解决这个问题。如果有人有任何提示,请继续
标签: python linux shell default-programs
在linux中,如何确定默认的文本编辑器、终端等?
是否因发行版而异?
【问题讨论】:
标签: python linux shell default-programs
我之前以一种相当丑陋的方式以编程方式访问了该列表,我确信这不是最好的方式。这些选项存储在一个名为 defaults.list 的文件中(我认为通常是这种情况)。该位置不太通用,我认为它在我的 ubuntu 系统上的 /usr/share/applications/ 中,尽管我认为它确实出现在其他地方。然后我将其视为文本文件。
【讨论】:
解析顺序是$EDITOR -> editor -> 一些预定义的控制台编辑器列表。在 Debian/Ubuntu 上,sensible-editor(以及sensible-browser 和sensible-pager)将为您进行查找,包括查看正确的环境变量。类似的变量有$PAGER、$SHELL、$BROWSER。要查找文件关联,您可以使用xdg-open。
【讨论】:
我认为默认 编辑器或终端的概念没有意义。对于编辑器,在定义时有使用$EDITOR 的约定。
在 Debian 和相关系统(例如 Ubuntu、Mint)上,您有像 /usr/bin/editor 和 /usr/bin/x-terminal-emulator 符号链接(通过 /etc/alternatives/ 中的符号链接)到某些系统默认值的路径。
【讨论】:
每个用户的环境变量告诉你。
但这对命令行软件有效,而桌面环境通常使用它们自己的(内部)变量。
在python中你也可以使用os.getenv读取环境变量。
【讨论】:
这适用于 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}')
【讨论】: