いくつかのVT100エスケープシーケンスの操作で問題が発生しました。
通常、 VT100端末は、カーソル位置を保存する必要がありますが、カーソルエスケープシーケンスを書き込むときに文字属性も保存する必要があります。
復元カーソルを書き込むときに、文字属性を復元する必要があります。
現在、カーソルの位置は保存および復元されますが、文字属性は復元され
他のVT100実装での保存/復元エスケープシーケンスの動作をテストして、それらが処理していることを確認しました。
以下にいくつかの詳細を示します。自分で必要になるため、ソリューションの開発を開始します。
これからもいい結果を出し続けてください!
テストに使用されるVT100エスケープシーケンスは次のとおりです。
\x1b[0m (attributes off)
\x1b[1;1f (reset origin)
\x1b[2J (clear)
\x1b7 (save cursor state)
\x1b[7m (set negative color)
<colored> (just some output)
\x1b8 (restore cursor state)
<should not be colored>\n\r (another output - will be printed in negative color in xtermjs)
xtermjsでは、「色付けしないでください」が色付けされます
xterm.write('\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m <colored>\x1b8<should not be colored>\n\r');
// will print:
// "<should not be colored> <colored>"
バッシュでは、「着色されるべきではない」は着色されません
printf '\x1b[0m\x1b[1;1f\x1b[2J\x1b7\x1b[7m <colored>\x1b8<should not be colored>\n\r'
# will print
# "<should not be colored> <colored>"
ここでは、テキスト属性を位置とともに保存および復元する必要があるよう
htermが保存/復元カーソルを処理する方法は次のとおりです
編集:
すべての文字属性(fg color、bg color、および特殊フラグモード:太字、斜体、負、..)は、「Terminal」クラスの「curAttr」属性に格納されます。 この属性のコピーを保存するだけで、すべての文字属性を一度に復元できます。
VTEもバグが多かった。 おそらく、 VTE731205でいくつかの興味深いビットを見つけることができます。
@ 7PHとにかくDECSCを変更しているので、 https: //vt100.net/docs/vt510-rm/DECSC.htmlを見ることができるかもしれませんが、まだ欠落しているターミナル属性がいくつかあり、それらも処理する必要があります。
そうでない場合は、別の問題を作成する必要があります。 これらすべてのキャプチャは、物事を整理するために、おそらくICursorState
状態オブジェクトのようなもので行う必要があります。
PRにマージされ、残りのプロパティがhttps://github.com/xtermjs/xterm.js/issues/1526に分岐されました
最も参考になるコメント
そうでない場合は、別の問題を作成する必要があります。 これらすべてのキャプチャは、物事を整理するために、おそらく
ICursorState
状態オブジェクトのようなもので行う必要があります。