我有一个基于 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
并支持上述扩展。