![[?1049hと[?1h ANSIエスケープシーケンス]は何をしますか?](https://linux33.com/image/8713/%5B%3F1049h%E3%81%A8%5B%3F1h%20ANSI%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%5D%E3%81%AF%E4%BD%95%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F.png)
ボックスでシェルを使用しているときにecho foo | less
ajaxレスポンスでless command()を呼び出すと、次のコードが表示されます。
\u001B[?1049h\u001B[?1h\u001B=\rfoo\r\n\u001B[7m(END)\u001B[27m\u001B[K
\u001B[?1049h
そして\u001B[?1h
エスケープシーケンスは何をし、何ですか\u001B=
?どこかに文書化されていますか?
答え1
\u001B
不必要に長いASCIIエスケープ文字です。ECMAスクリプト6。 POSIXでは8進数を使用し\033
、他の一部では16進数を受け入れます\01b
。数字の大文字と小文字は重要ではありません。
\u001B[?1049h
(および)\u001B[?1049l
は、次を表すエスケープシーケンスです。xterm到着オプションで代替画面に切り替えるか、代替画面から切り替えます。
疑問符は、「個人使用」(実装固有の機能用に予約されている標準のカテゴリ)であることを示します。記載された個人使用パターンの約3分の1XTerm制御シーケンスDECのいずれかに該当します(
DECCKM
説明に示すようにニーモニックがあります)。言及したように、他のものはxtermのオリジナルであるか、他の端末で改造されたものです。このエスケープシーケンスを使用する理由は、プログラムが代替画面を使用できるかどうかをユーザーが決定できるterminfoベースの方法を提供するためです。 ~によるとxterm マニュアル:
titeInhibit
(授業TiteInhibit
)は
xtermを削除するかどうかを指定します。ti
そしてte
TERMCAP文字列のtermcapエントリ(多くの画面指向プログラムを起動するときに代替画面間を切り替えるために使用されます)が設定されている場合、xtermは代替画面に切り替えるためにエスケープシーケンスも無視します。 Xtermは複合制御シーケンス(プライベートモードとも呼ばれる)をサポートし、さまざまな方法でterminfoをサポートします。1047
、1048
そして1049
オリジナルと同じ効果47
制御順序。このリソースのデフォルト値は「false」です。
1049コード(導入済み)1998年) はい広く受け入れられているxtermと互換性があると主張するほとんどのターミナルエミュレータはほとんどその機能を提供しません。任意に選択できる。だから彼らは実際にこの機能を実装していません。
一方、\u001B[?1h
xtermから派生するのではなく、(例えば\u001B=
)スイッチング端子を使用するためにDEC VT100sから派生します。申請方法カーソルキー(DECKKM)とテンキー(DECKPAM)に使用されます。たとえば、端末を初期化するときにプログラムで使用されますless
。端末の説明では、アプリケーション(または一般)モードエスケープシーケンスを特殊キーとして使用するためです。マッチこれらの端末記述に提供される初期化文字列です。
追加資料:
- viを実行しても画面が消えないのはなぜですか?(xterm FAQ)
- (すべての)シェルでカーソルキーを使用できないのはなぜですか?(xterm FAQ)
- カーソルキーが機能しない(ncurses FAQ)
- XTerm制御シーケンス
答え2
ESC[?1049h
から来たようだDEC プライベートモード設定:
カーソルを DECSC として保存し、代替画面バッファを使用して最初に消去します。 (titeInhibitリソースによって無効にすることができます)。これは、1047および1048モードの効果を兼ね備えています。 4-7モードではなく、terminfoベースのアプリケーションに使用します。
CSI
翻訳になりますので参考にしてくださいESC[
。