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

syn*_*ror 6 gnu-screen terminal-multiplexer xterm split

有趣的是,这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 '|':)啊。

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

Tho*_*key 3

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

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

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

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

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

原则上,tmux 可以进行修改以提供增强的选择/粘贴,如本问题所述,因为它可以将 xterm 鼠标模式设置为 1002(单元格运动鼠标跟踪),这将告诉它在哪里绘制自己的突出显示。我没有看到它在源代码中实现,因此您链接到How does tmux selectcontents only in one pane ? 似乎仍然相关。

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

也有缺点:

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

进一步阅读: