午夜指挥官对鼠标滚轮的使用感到困惑

午夜指挥官对鼠标滚轮的使用感到困惑

mc经常使用,多年来它一直完美运行。不久前(几周?)mc似乎对鼠标滚轮感到困惑,并在屏幕上打印了类似于以下的 ANSI 转义序列:

[97;14;10M[96;15;10M[97;16;10M[96;16;10M[96;16;10M

我找不到任何包含 3 个数字的 ANSI 序列中号尽管。97似乎是这个意思roll up96似乎是这个意思roll down。其他数字是个谜。

另外奇怪的是,这个故障是不可预测的,并且在使用过程中随时会发生mc。而且,更奇怪的是:我可以mc在一个终端中打开一个,它工作正常,而在另一个终端中,一个则mc失败。

最后一个似乎表明该故障不是一个常见因素(比如也许gpm如此)。

我使用的是 Slackware 14.2、urxvt (v9.22) 和 am$ 光电鼠标。有人知道去哪里看吗?我也跑了mc进去rxvt,相比之下,urxvt滚动似乎有些缓慢。

答案1

这些是urxvt的1015扩展鼠标坐标,参见http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking(顺便说一下,第二个和第三个数字是单元格坐标)。该协议扩展的主要目的是支持超过 223 的鼠标坐标。

另一个更有利的扩展是 xterm 的 SGR 1006 模式,它解决了相同的问题(以及更多问题),并且没有 urxvt 扩展的一些缺点。 Xterm 的 1006 模式应该会废弃 urxvt 的 1015 模式。

然而,rxvt-unicode(又名 urxvt)是我所知道的唯一支持鼠标事件的终端模拟器,但确实不是支持这个扩展。我在 2012 年 1 月与它的作者交谈过,但他拒绝实施这种模式,原因我无法理解。也许有人应该再试一次; urxvt 只需要几行简单的代码。

Midnight Commander 实现了这个更新更好的 xterm 扩展,并且不再实现 urxvt 扩展。详情请见mc门票26622956

这意味着通常 mc 应该请求 urxvt 不支持的扩展,因此在不使用任何扩展的情况下继续操作(并且鼠标仅工作到第 223 列)。

在您的情况下,应用程序可能会执行不干净的退出并启用此鼠标扩展,这会使 mc 感到困惑(它不理解它收到的内容)。您可以退出 mc,然后通过执行禁用此扩展echo -ne '\e[?1015l',最后重新启动 mc。

不幸的是,在 urxvt-9.21 中,该命令reset不会禁用此扩展,尽管它确实应该禁用。我相信这是一个错误。

如果这个重复出现的问题确实困扰您,我建议您在提示中合并上述转义序列(或切换到另一个支持 1006 扩展的模拟器)。或者追踪并修复退出时使此扩展保持启用状态的应用程序。

答案2

我搞砸的地方是将 export TERM=xterm 添加到我的 bash_profile 中。糟糕的错误。这样我就覆盖了终端的默认 TERM 变量。不要那样做。

这完全搞乱了 urxvt 中 cmus 和 mc 的鼠标控制,再也不会全局导出 TERM=... 了,现在我删除了它。一切又恢复正常了。

至于我试图通过更改 TERM 来解决的另一个问题,现在仅在本地需要的地方应用:alias vim='TERM=xterm vim' 这解决了我最初的问题,即 tmux 中 vim 中的颜色...

相关内容