进一步阅读

进一步阅读

有时我有一个应用程序,它支持鼠标(例如 Midnight Commander)崩溃或断开连接,但在该终端保持某种模式之后,这使得它接受鼠标移动作为字符串命令:

(base) dimskraft@studebaker:~$ set mouse=
(base) dimskraft@studebaker:~$ set ttymouse=
(base) dimskraft@studebaker:~$ 0;32;19M32;33;19M32;34;19M32;36;19M32;37;19M32;38;20M32;39;20M32;41;20M32;42;20M32;43;20M32;44;20M32

一旦发生了如何禁用它?

我观察它Terminator并可以在不同的窗格中看到不同的行为。如您所见,设置为空mousettymouse没有帮助。

答案1

这些设置适用到维姆,而不是外壳。

我认为最好的方法是重置终端:

reset

这会禁用鼠标跟踪,并且还会撤消 Midnight Commander 等工具所做的其他更改(CtrlC例如,尝试在 MC 崩溃后按下)。

或者,您可以确定使用哪种鼠标跟踪模式,并明确禁用它(例如 echo -e '\e[?1002;1005l'午夜指挥官在我的终端崩溃后),但这仍然会保留其他设置不变。stty sane将使负责这些问题的线路纪律恢复理智。

答案2

reset是巨大的矫枉过正。对于初学者来说,只需重新启动然后正确退出应用程序即可解决此问题。它毕竟会关闭退出时要求的鼠标报告。

或者,您可以自己将控制序列发送到终端,以关闭鼠标报告。您可以使用printfshell 实用程序来执行此操作,使用转义符号手动输入控制序列。

setterm为了方便起见,并且为了用户空间虚拟终端,我创建了可以执行此操作的实用程序的改进便携式版本。与 util-linux 不同,它可以与 GUI 终端仿真器和 BSD 一起使用;并且它对只有某些终端系列正确处理控制序列这一事实很敏感:

%printenv 术语
哑的
%setterm -7 --xterm-mouse-reports 关闭 --dec-locator-reports 关闭
%setterm -7 --xterm-mouse-reports 关闭 --dec-locator-reports 关闭 |控制台解码 ECMA48
%setterm -7 --xterm-mouse-reports 关闭 --dec-locator-reports 关闭 |十六进制转储-C          
%导出术语=xterm-256color
%导出 XTERM_VERSION=999
%setterm -7 --xterm-mouse-reports 关闭 --dec-locator-reports 关闭 |控制台解码 ECMA48
减速 0
德塞尔 0
德CRM 1006
德CRM 1003
德CRM 1002
德CRM 1000
%setterm -7 --xterm-mouse-reports 关闭 --dec-locator-reports 关闭 |十六进制转储-C
00000000 1b 5b 30 27 7a 1b 5b 30 27 7b 1b 5b 3f 31 30 30 |.[0'z.[0'{.[?100|]
00000010 36 6c 1b 5b 3f 31 30 30 33 6c 1b 5b 3f 31 30 30 |6l.[?1003l.[?100|]
00000020 32 6c 1b 5b 3f 31 30 30 30 6c |2l。[?1000l|
0000002a
%

有控制序列。

进一步阅读

相关内容