如何查询tput smam等转义序列设置的终止状态?

Cir*_*郝海东 4 terminal gnome-terminal

QEMU让我的终端处于一种奇怪的状态,我花了一段时间才最终将其调试到有问题的精确功能:tput smamvs tput rmam

有没有办法检查当前的终端状态,希望一次性显示所有功能的当前值?

这将使我能够轻松区分工作终端和“损坏”终端,以找出修改的内容。

不过,找出任何特定功能的当前状态也是一个好的开始,例如smamvs rmam

在 Ubuntu 19.10、Gnome 终端中测试。

Tho*_*key 5

这可能有效(VTE 实现了此控制的一部分):

\n\n
\n

CSI ? PS $ p

\n\n

请求 DEC 私有模式 (DECRQM)。对于 VT300 及更高版本,回复\n DECRPM 为

\n\n

犯罪现场调查?下午$ y

\n\n

其中 Ps 是 DECSET/DECSET 中的模式编号,Pm 是 ANSI DECRQM 中的模式值。

\n
\n\n

具体来说,Ps为 7:

\n\n
\n
       Ps = 7  \xe2\x87\x92  Auto-wrap Mode (DECAWM), VT100.\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

它对应于终端描述中使用的设置:

\n\n
\n

rmam=\\E[?7l,\n smam=\\E[?7h,

\n
\n\n

所以...你会做

\n\n
printf \'\\033[?7$p\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

并期待回来

\n\n
\\033[?7;1$y\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者

\n\n
\\033[?7;2$y\n
Run Code Online (Sandbox Code Playgroud)\n\n

分别取决于模式是否被设置或重置。

\n\n

这还假设您的脚本/程序正在从终端读取(不一定是标准输入)。xterm 的源代码中有几个测试/演示脚本,您可能会发现这些脚本很有用(尽管大多数脚本不适用于 VTE)。一般来说,我会使用vttest测试此功能,它已针对您使用的任何系统进行了打包。

\n

  • @Ciro如果你想要`hd`,这样做:`(g=$(stty -g); stty -icanon -echo min 0 time 5; printf '\033[?7$p'; dd count=1 2>/dev/null | hexdump -C; stty "$g")`。这种转义在“screen”或“tmux”中不起作用。 (2认同)