screen 和 xterm:当窗口垂直划分时,如何在一个窗格中用鼠标选择文本

screen 和 xterm:当窗口垂直划分时,如何在一个窗格中用鼠标选择文本

有趣的是,这对一些人来说也是一个tmux问题: http://daemonforums.org/showthread.php?t=7311

但目前我正在坚持screen,我想知道我如何才能screen在这方面“表现”。

使用选择文本老鼠除非线长于窗格的宽度,否则没有问题。我已经尝试过使用:width、使用和不使用该-w选项进行实验。 (包起来,不然看起来很乱(:+wrap))

哦,:width对环境非常挑剔。如果设置width太高,会导致长线所有的终端来回移动(即如果你的bash提示是user@host $它只会显示为r@host $),这看起来非常难看。

选择一条分成几倍窗格宽度的长线将导致以下行为:

  • 将显示选择器(反向)超过左窗格与右窗格重叠。首先,这看起来有问题。选择器也应该环绕在窗格的右边框处。
  • 粘贴所选内容有时会导致长行在第一部分行处被切断,从而截断其余部分;有时甚至尝试添加|(!),尝试继续该行,就好像它是多行一样脚本(结果:)bash: syntax error near unexpected token '|'啊。

即使使用鼠标也不能以某种方式使其工作吗?

答案1

简短的回答:不,GNU 屏幕不能做到这一点。

长答案:GNU screen 在很大程度上忽略了 xterm 鼠标协议,除了它接受的特殊情况鼠标点击(这“鼠标轨迹”特征)。

要按照您的建议进行选择需要做更多的工作:

  • xterm 鼠标协议的工作原理是让终端向您的应用程序发送转义序列。
  • screen仅使用“正常”鼠标协议 (1000),该协议在按下鼠标按钮时发送转义序列,并在释放(任何)鼠标按钮时发送另一个转义序列。
  • 仅像这样的单击将不支持您在选择/粘贴时期望的拖动方式。所以screen不会尝试在这方面做任何事情。
  • 当 xterm 鼠标协议处于活动状态时,除非使用鼠标按钮,否则无法进行选择/粘贴shift
  • 无论哪种方式(无论您是否打开mousetrack),screen都依赖于终端来显示选择突出显示。 xterm(和其他终端)无法设置选择边距,因此您可以突出显示屏幕的整个宽度。

相比之下,tmux用鼠标做的事情更多。它实际上在不同类型的 xterm 鼠标协议之间进行转换,以提供终端之间的差异,例如,在 UTF-8 模式 (1005) 和 SGR (1006) 之间进行选择。

原则,tmux 可以进行修改以提供增强的选择/粘贴,如本问题所述,因为它将 xterm mouse-mode 设置为 1002(单元格运动鼠标跟踪),这将告诉它在哪里绘制自己的突出显示。我没有看到它在源代码中实现,所以你的链接tmux 如何仅在一个窗格中选择内容?似乎仍然相关。

tmux例如,中的(键盘)复制模式似乎不知道窗格。

也有缺点:

  • 这将是慢的:比复制模式慢得多,因为(a)从您的终端发回更多字符,并且(b)您对使用鼠标的性能的期望会有所偏差。如果您不是在本地计算机上运行而是通过 ssh 运行,这会非常明显。
  • 该选择仅对 有用tmux,例如,通常不会被复制到 X 环境中的其他窗口。

进一步阅读:

相关内容