我目前使用 iTerm2,并经常通过 SSH 连接到远程服务器并启动 tmux 会话。在所有这些服务器上,当通过 SSH 连接到它们时,我会自动创建一个启用鼠标报告的 tmux 配置,其中的内容如下~/.tmux.conf
:setw -g mode-mouse on
但是,如果我的 SSH 会话突然结束,并且 tmux 没有机会禁用鼠标报告,则在终端窗口的任何地方使用鼠标都会出现奇怪的代码,例如:
$ 0;94;18M0;94;18m0;19;33M0;14;33m
我发现我不是唯一遇到此问题的人,请参阅https://code.google.com/p/iterm2/issues/detail?can=2&q=&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary&groupby=&sort=&id=855
我认为解决此问题的一个简单方法是在用于打开 SSH 会话的 bash 脚本中创建一个陷阱。然后,每当 SSH 到 tmux 会话结束时,该陷阱就可以禁用鼠标报告。
问题是我不知道如何在 bash 中禁用鼠标报告。我发现一篇描述控制台代码的文章然而我在这方面并没有任何运气。
如何向终端发送命令以禁用鼠标报告?
答案1
要从 bash 向终端发送代码,您可以使用命令。(当然,printf
您也可以使用,但通常更适合发送终端命令,因为它明确支持发送 ESC,并且可以更轻松地将命令字符与参数分开等。)echo
printf
Tmux 以及大多数支持终端鼠标跟踪的流行程序都使用 XTerm 鼠标报告(又名“X11 鼠标报告”)。
要从 bash 禁用鼠标报告,请使用以下代码:
printf '\e[?1000l'
ESC [ ? … l
h
表示“DEC 私有模式重置(DECRST)”(以而不是结尾的相同代码l
可启用该功能)。
还有一种较旧的“X10 鼠标报告”协议,它使用9
而不是1000
,可以用 禁用ESC [ ? 9 l
,但据我所知,您不太可能看到此功能用于鼠标跟踪。
我通常使用Xterm 控制序列文档作为我的终端代码的规范参考,我推荐它,因为它既是 XTerm 支持内容的实用指南,也是我发现的常用支持代码最全面的文档。