Try*_*431 5 linux xterm environment-variables file-manager gnome-terminal
我最近开始使用 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”,但这很混乱,我决定不理会它。
有什么建议?谢谢!
截至 2017 年,源代码(runner.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
Run Code Online (Sandbox Code Playgroud)
所以你应该能够将任何与 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
Run Code Online (Sandbox Code Playgroud)
x-terminal-emulator像以前一样使用。
in有一个相关的用法,用于执行命令而不是(如问题中所问)用于打开终端。无论哪种方式,使用 ranger 的关键是,因为 GNOME 终端的开发人员没有记录他们的命令行界面,而 Debian 开发人员提供了这个解决方法。TERMCMDrifle.pyx-terminal-emulator
引用Bug 701691 - -e 只接受一个术语;所有其他终端模拟器接受多个术语(开发人员拒绝修复,将其标记为“不是错误”):
Christian Persch 2013-06-06 16:02:54 UTC
gnome-terminal 命令行选项没有文档。