tmux 意外退出后,在终端会话中禁用鼠标报告

Mat*_*dan 6 ssh terminal tmux iterm2

我目前使用 iTerm2 并经常通过 SSH 连接到远程服务器并启动 tmux 会话。在所有这些服务器上,当通过 SSH 连接到它们时,我会自动创建一个 tmux 配置来启用鼠标报告,其中包含以下内容~/.tmux.confsetw -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% 20总结&groupby=&sort=&id=855

我相信这个问题的一个简单解决方案是在用于打开我的 SSH 会话的 bash 脚本中创建一个陷阱。每当 SSH 到 tmux 会话结束时,陷阱就可以禁用鼠标报告。

问题是我不知道如何从 bash 中禁用鼠标报告。我找到了一篇描述控制台代码的文章,但是我对此没有任何运气。

如何向终端发送命令以禁用鼠标报告?

Chr*_*age 5

要从 bash 向终端发送代码,您可以使用该printf命令。(echo当然,您也可以使用,但printf通常更适合发送终端命令,因为它明确支持发送 ESC 并且更容易将命令字符与参数等分开)

Tmux 以及支持终端鼠标跟踪的大多数流行程序都使用 XTerm 鼠标报告(又名“X11 鼠标报告”)。

要从 bash 禁用鼠标报告,请使用以下代码:

printf '\e[?1000l'
Run Code Online (Sandbox Code Playgroud)

ESC [ ? … l表示“DEC Private Mode Reset (DECRST)”(相同的代码以启用该功能h而不是l启用该功能结尾)。

还有一个较旧的“X10 鼠标报告”协议,它使用9代替1000,可以使用 禁用ESC [ ? 9 l,但据我所知,您不太可能看到此功能用于鼠标跟踪。

我通常使用Xterm Control Sequences文档作为我对终端代码的规范参考,我推荐它,因为它既是 XTerm 支持的实用指南,也是我发现的最全面的常用支持代码文档。

  • 从 tmux 分离时有没有办法自动执行此操作? (3认同)
  • 您可以使用 `alias resetmouse='printf '"'"'\e[?1000l'"'"` 为其设置别名 (2认同)