有时我有一个应用程序,它支持鼠标(例如 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
并可以在不同的窗格中看到不同的行为。如您所见,设置为空mouse
并ttymouse
没有帮助。
答案1
这些设置适用到维姆,而不是外壳。
我认为最好的方法是重置终端:
reset
这会禁用鼠标跟踪,并且还会撤消 Midnight Commander 等工具所做的其他更改(CtrlC例如,尝试在 MC 崩溃后按下)。
或者,您可以确定使用哪种鼠标跟踪模式,并明确禁用它(例如 echo -e '\e[?1002;1005l'
午夜指挥官在我的终端崩溃后),但这仍然会保留其他设置不变。stty sane
将使负责这些问题的线路纪律恢复理智。
答案2
reset
是巨大的矫枉过正。对于初学者来说,只需重新启动然后正确退出应用程序即可解决此问题。它毕竟会关闭退出时要求的鼠标报告。
或者,您可以自己将控制序列发送到终端,以关闭鼠标报告。您可以使用printf
shell 实用程序来执行此操作,使用转义符号手动输入控制序列。
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 %
有控制序列。
进一步阅读
- 乔纳森·德博因·波拉德 (2018)。
setterm
。 小吃指南。软件。 - https://unix.stackexchange.com/a/482782/5132
- 为什么 printf 比 echo 更好?
- https://unix.stackexchange.com/a/491883/5132