让 Linux 的“屏幕”识别 xterm 鼠标单击 cols > 95

让 Linux 的“屏幕”识别 xterm 鼠标单击 cols > 95

我有一个基于 Web 的终端,使用 xterm.js 和 node.js 中的 ssh2。当我单击时,xterm.js 通过 xterm 转义序列发送鼠标单击坐标。这很好用。使用“screen”cli 实用程序时,任何大于 95 列的内容都会被记录为 95 列。例如,当使用 Midnight Commander 而不是“screen”时,它只会在第 95 列记录超过 95 列的点击。如果没有“screen”,它可以正常工作。有简单的解决方法吗?

我正在使用 Ubuntu LTS。

答案1

旧版鼠标协议对每个坐标使用原始字节(坐标加 32)。因此,它仅支持最大 223 的坐标(223 + 32 = 255,即一个字节可以容纳的最大值)。

在某些情况下,例如当发生字符集转换时,或者当某些组件要求传递的数据是有效的 UTF-8 时,128-255 范围内的字节也会出现问题。因此,点击只能可靠地工作到第 95 列和第 95 行。

我不熟悉 xterm.js 和你的整个环境,无法判断你是否可以调整它以支持高达 223 的坐标(例如通过更改字符编码,尽管切换出 UTF-8 也是一个愚蠢的举动)。

正确的解决方案是添加对 SGR 1006 鼠标模式扩展的支持screen,请参阅https://savannah.gnu.org/bugs/index.php?37206。此新协议使用 ASCII 数字对坐标进行编码,因此消除了上限并解决了字符编码问题。

在他们解决这个问题之前,你可以考虑尝试一下tmux。它是一种更现代、维护更积极的替代方案,screen并支持上述扩展。

相关内容