カラー端子出力はリセットシーケンスを無視します。色は続く

カラー端子出力はリセットシーケンスを無視します。色は続く

何時間も迷っていますが、解決方法はありません...

これを端末に印刷するとしましょう。(新しいLinux Mintを実行している仮想マシンのゲノム端末でbashとzshを使用してテストされました。):

python3
print("\033[41mFOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\033[0m BAR")
  • \033[41m次のテキストに対して赤い背景を有効にします。
  • \033[0m背景をデフォルト値にリセットします。
  • 十分だと仮定すると酸素端末から正確に1行半を埋める出力を生成します。

新しい端末では、出力は次のようになります(予想どおり)。

|FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
|=================================|
|OOOOOOOOOOOOOO BAR               |
|==============                   |
|                                 |
  • 下線付きの各文字の=背景は赤色です。
  • |端末の境界を定義します。

だから我々はFOO...赤の背景があり、BAR赤の背景がないことがわかります。

コマンドを再実行すると、次の結果が表示されます。

|FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO|
|=================================|
|OOOOOOOOOOOOOO BAR               |
|==============    ===============|
|                                 |

その後もラインが赤くなりますがBAR…なぜかはわかりませんね。どんなアイデアがありますか?

答え1

Mac OS XのiTerm2は、カラーテキストが利用可能な列をバイパスした場合でもこれを行います。 1つの回避策は、作成してBAR行末まで消去することです。CSI Ps K Erase in Line (EL) 制御シーケンス、例えば

$ perl -e 'print "\e[41m".("a"x120)."\e[0mBAR\e[K"'

関連情報