jcu*_*bic 5 less escape-characters
当我在盒子中使用 shell 并echo foo | less在 ajax 响应中调用 less 命令 ( ) 时,有以下代码:
\u001B[?1049h\u001B[?1h\u001B=\rfoo\r\n\u001B[7m(END)\u001B[27m\u001B[K
Run Code Online (Sandbox Code Playgroud)
是什么\u001B[?1049h和\u001B[?1h转义序列做,也什么\u001B=?他们在某处记录了吗?
\u001B是一个不必要的冗长的 ASCII 转义字符,它似乎是为ECMAScript6引入的。POSIX 将使用八进制\033,而其他一些则允许使用十六进制\01b。数字的大小写无关紧要。
的\u001B[?1049h(和\u001B[?1049l)是其告诉转义序列的xterm到任选切换到和从备用屏幕。
问号表明它是“私人使用”(标准中为实现特定功能预留的类别)。XTerm Control Sequences 中列出的私人使用模式中约有三分之一与DEC 中的一个相对应(这些模式DECCKM在其描述中具有助记符)。如前所述,其他的要么是 xterm 的原创,要么是从其他终端改编而来。
这种转义序列的原因是提供一种基于 terminfo 的方式,让用户决定程序是否可以使用备用屏幕。根据xterm 手册:
titeInhibit(classTiteInhibit)
指定 xterm 是否应该 从 TERMCAP 字符串中删除ti和tetermcap 条目(用于在启动许多面向屏幕的程序时在交替屏幕之间切换)。如果设置,xterm 也会忽略转义序列以切换到备用屏幕。Xterm 以不同的方式支持 terminfo,支持复合控制序列(也称为私有模式)1047,1048并且1049具有与原始47控制序列相同的效果。此资源的默认值为“false”。
1049 代码(于1998 年引入)被大多数声称与 xterm 兼容的终端仿真器所识别,但大多数并没有将该功能设为可选。所以他们并没有真正实现这个功能。
另一方面,\u001B[?1h并非源自 xterm,而是(如\u001B=)来自 DEC VT100s,用于将终端切换为使用光标键 (DECCKM) 和数字小键盘 (DECKPAM) 的应用程序模式。这些由程序less在初始化终端时使用,因为终端描述使用应用程序(或正常)模式转义序列来匹配这些终端描述中给出的初始化字符串的特殊键。
进一步阅读: