我mc
经常使用,多年来它一直完美运行。不久前(几周?)mc
似乎对鼠标滚轮感到困惑,并在屏幕上打印了类似于以下的 ANSI 转义序列:
[97;14;10M[96;15;10M[97;16;10M[96;16;10M[96;16;10M
我找不到任何包含 3 个数字的 ANSI 序列中号尽管。97
似乎是这个意思roll up
,96
似乎是这个意思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门票2662和2956。
这意味着通常 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 中的颜色...