我最近开始使用 Ranger 作为我的默认文件管理器,我真的很喜欢它。现在,我已经设法更改rifle.conf,以便当我从Ranger 播放音频或视频时,mpv 在新的xterm 窗口中打开,并且媒体开始播放。
但是,如果可能的话,我希望 Ranger 打开 gnome-terminal 而不是 xterm。在 中/.config/ranger/rifle.conf
,它说使用该t
标志将在新终端中运行该程序:
If $TERMCMD is not defined, rifle will attempt to extract it from $TERM
我尝试$TERMCMD
在 .profile 和 .bashrc 文件中进行设置,但即使echo $TERMCMD
会打印“gnome-terminal”,Ranger 仍然会打开 xterm。我还搞乱了$TERM
“gnome-terminal”的设置,但这很混乱,我决定不去管它。
有什么建议么?谢谢!
答案1
截至 2017 年,源代码 (跑步者.py) 做过这个:
term = os.environ.get('TERMCMD', os.environ.get('TERM'))
if term not in get_executables():
term = 'x-terminal-emulator'
if term not in get_executables():
term = 'xterm'
if isinstance(action, str):
action = term + ' -e ' + action
else:
action = [term, '-e'] + action
所以你应该能够将任何 xterm 兼容的程序名称放入TERMCMD
.但是,请注意-e
(gnome-terminal 与 xterm 的行为不匹配)的使用。如果您使用 Debian/Ubuntu/etc,Debian 打包商已尝试提供一个包装器来隐藏功能中的这种差异x-terminal-emulator
。如果这适用于您,您可以设置TERMCMD
为x-terminal-emulator
。
后续 - 虽然该功能的设计TERMCMD
自 2016 年中期以来没有明显变化,但源代码中的位置已发生变化:
这是在get_term
:
def get_term():
"""Get the user terminal executable name.
Either $TERMCMD, $TERM, "x-terminal-emulator" or "xterm", in this order.
"""
command = environ.get('TERMCMD', environ.get('TERM'))
if shlex.split(command)[0] not in get_executables():
command = 'x-terminal-emulator'
if command not in get_executables():
command = 'xterm'
return command
和以前一样使用x-terminal-emulator
。
有一个有关的使用TERMCMD
在rifle.py
,用于执行命令而不是(如问题中所要求的)用于打开终端。不管怎样,使用 ranger 的关键是x-terminal-emulator
,因为 GNOME Terminal 的开发人员没有记录他们的命令行界面,而 Debian 开发人员已经提供了这个解决方法。
引用自Bug 701691 – -e 只接受一个术语;所有其他终端仿真器接受多个术语(开发人员拒绝修复,并将其标记为“不是错误”):
克里斯蒂安·佩尔施 2013-06-06 16:02:54 UTC
没有有关 gnome-terminal 命令行选项的文档。
答案2
我现在很确定那runner.py
是无关紧要的。rifle.py
是要更改的文件。
在第 375 行左右,有一行:
cmd = [os.environ['TERMCMD'], '-e'] + cmd
应该尝试将'-e'
标志更改为其他内容,具体取决于您的 $TERMCMD 是什么。我测试了几个不同的终端,这些终端对我有用:
- gnome-terminal:更改为
'--'
或'-x'
- xfce4-终端:
'-x'
- LX终端:
'-e'
- 配对终端:
'-x'
- 终结者:
'-x'
我没有检查过其他人,但可能是'--'
, '-e'
,之一'-x'
。