XTerm 中的 GNU Screen 重置光标形状

XTerm 中的 GNU Screen 重置光标形状

在我的程序中,.bashrc我使用printf -- '\x1b[6 q'闪烁的条形光标xterm(1)。当我运行时screen(1),它会将光标重置为不闪烁的块,并且似乎忽略了我正在尝试的光标形状控制序列的所有变体。

解决方案要么是禁止screen(1)重置光标形状,要么是让它解释(传递到底层终端)光标控制序列。这两个选项都可行吗?谢谢。

OT:tmux(1)是的,顺便说一下,开始时不会改变光标形状......


一种可能的解决方案是将光标形状的设置放在 GNUreadline(3)配置文件中。

.inputrc文件中:

$if mode=emacs
    $if term=screen.xterm
        set show-mode-in-prompt on
        # bar cursor
        set emacs-mode-string \1\eP\e[6\ q\e\\\2
    $endif
$endif

或者,对于vi(1)编辑模式使用以下命令:

$if mode=vi
    $if term=screen.xterm
        set show-mode-in-prompt on
        # block cursor in command mode
        set vi-cmd-mode-string \1\eP\e[2\ q\e\\\2
        # bar cursor in insert mode
        set vi-ins-mode-string \1\eP\e[6\ q\e\\\2
    $endif
$endif

现在它可以按预期工作,并且不需要强制在 XTerm 中闪烁,只需true启用它即可。

' $if term=screen.xterms 将匹配所有 XTerm 类型(即将screen.xterm-256colors匹配),因为 GNUreadline(3)匹配特殊关键字的情况term。因此,在初始设置如下.bashrc,XTerm 资源关闭闪烁.Xresources(或.Xdefaults)和上述readline(3)设置后,我们可以实现预期的行为。这不是理想的,但似乎有效。任何改进都值得欢迎。

在里面.bashrc

case "$TERM" in
    xterm*)
        printf -- '\x1b[6 q'
        ;;
esac

在里面.Xresources

XTerm*vt100*cursorBlink: true

它有点笨重,我认为可能有更好的方法来做到这一点。

答案1

你可以配置 xterm 让光标闪烁,并忽略任何转义序列,以便稍后进行更改,请参阅man xterm。例如,使用以下命令启动 xterm:

xterm -xrm XTerm.vt100.cursorBlink:always

根据您的设置,您可以将资源放入文件中~/.Xdefaults,或者~/.Xresources,或者在启动时将其输入到 X11 服务器资源数据库中,例如,

echo 'XTerm.vt100.cursorBlink:always' | xrdb -merge

答案2

可以在问题中的附加信息(下划线)中看到有效的解决方案。虽然它可能不是所有解决方案中最好的,但它确实有效并且很好地解决了原始问题。因此,我将这个问题关闭为已解决,这里仅提供解决方案的简要摘要:(1)在 shell 配置中设置 shell 启动时的光标形状,(2)在 GNU readline 配置中设置模式提示以设置光标形状,以及(3)为 XTerm 设置闪烁光标 X 资源(如果需要)。其余部分非常不言自明,可以从引用的问题部分(下划线)中看到。

相关内容