Less

[?1049h 和 [?1h ANSI 轉義序列有什麼作用?

  • July 22, 2016

當我在一個盒子中使用 shell 並echo foo | less在 ajax 響應中呼叫 less 命令 () 時,有以下程式碼:

\u001B[?1049h\u001B[?1h\u001B=\rfoo\r\n\u001B[7m(END)\u001B[27m\u001B[K

\u001B[?1049h和轉義序列做什麼\u001B[?1h,還有什麼\u001B=?他們是否記錄在某處?

\u001B是一個不必要的冗長 ASCII 轉義字元,似乎是為ECMAScript6引入的。POSIX 將使用八進制\033,而其他一些則允許十六進制\01b。數字的大小寫無關。

( \u001B[?1049hand \u001B[?1049l) 是轉義序列,它告訴xterm可選擇地切換到備用螢幕和從備用螢幕切換。

  • 問號表示它是“私人使用”(標準中為特定於實現的功能預留的類別)。XTerm Control Sequences中列出的大約三分之一的私有模式對應於 DEC 中的一個(DECCKM在它們的描述中有助記符)。如前所述,其他的要麼是 xterm 的原創,要麼是從其他終端改編而來的。
  • 這個轉義序列的原因是提供一種基於 terminfo 的方式讓使用者決定程序是否可以使用備用螢幕。根據xterm 手冊

titeInhibit(class TiteInhibit)

指定 xterm 是否應該從 TERMCAP 字元串中刪除**tite** termcap 條目(用於在啟動許多面向螢幕的程序時在備用螢幕之間切換)。如果設置,xterm 也會忽略轉義序列以切換到備用螢幕。Xterm 以不同的方式支持 terminfo,支持複合控制序列(也稱為私有模式)1047,**1048並且與原始控制序列1049具有相同的效果。47**此資源的預設值為“false”。

1049 程式碼(在1998 年引入)被大多數聲稱與 xterm 兼容的終端仿真器所辨識,但大多數並不使該功能成為可選的。所以他們並沒有真正實現這個功能。

另一方面,\u001B[?1h並非源自xterm,而是(如\u001B=)來自DEC VT100s,用於切換終端以使用游標鍵(DECCKM)和數字鍵盤(DECKPAM)的應用模式。這些由程序使用,例如less在初始化終端時,因為終端描述使用特殊鍵的應用程序(或正常)模式轉義序列來匹配這些終端描述中給出的初始化字元串。

進一步閱讀:

引用自:https://unix.stackexchange.com/questions/288962