Ranger 文件管理器 - 打开 gnome-terminal 而不是 xterm

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”,但这很混乱,我决定不理会它。

有什么建议?谢谢!

Tho*_*key 5

截至 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功能中的这种差异。如果这适用于您,您可以设置TERMCMDx-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 命令行选项没有文档。