端末の端に達すると、背景色は空白です。

端末の端に達すると、背景色は空白です。

テキストの書式設定に制御シーケンスを使用していますが、予期しない動作が見つかりました。出力するテキストがあり、そのテキストの中央に背景色で強調表示された小さなテキストブロックがあります。元のテキストは非常に長く、複数の行がかかる可能性があるため、中央のカラーテキストブロックが1行から始まり、他の行で終わる複数行になることがあります。端末ウィンドウの下部に到達し、多くのスペースが色に変わるまで、すべてがうまくいくようです。

ここに画像の説明を入力してください。

再現可能なスクリプトは次のとおりです。

# color.sh
echo -e 'default \x1B[43m color \n color \x1B[49m default';

ご覧の\nとおり、再現のためにテキストブロックに改行を追加しました。しかし、これが私の場合です。テキストが長く、1行に収まらない場合、カラーブロックは複数行に分割されます。結果は次のとおりです。テキストの後には同じ色のスペースが続きます。

# color-long.sh
echo -e 'default default default default default default default default default \x1B[43m color color \x1B[49m default';

ここに画像の説明を入力してください。

Ubuntu 14.04でこの問題が発生しましたが、Yosemite 10.10でも同じ動作を再現できました。

echoこの動作の原因が何であるか、他の出力ユーティリティを使用せずに同じ制御シーケンスを使用して問題を解決する方法を知りたいです。テキストを制御できますが、出力プロセスは制御できません。

\[\x1B[43m\]のようなシーケンスをラップしようとしましたが、\001\x1B[43m\002結果が出ず、[]テキストに内容を追加または認識できないシンボルが出力されるだけです。

ベストアンサー1

これは最終的な特定の動作である@hildredに同意しますが、いくつかの意見の違いがあります。

  • アプリケーションが代替画面(たとえば、適切な端末記述とともにxtermで実行されるフルスクリーンプログラム)に切り替えられると、スクロールバックバッファにテキストは移動されません。
  • 「正しい」行動や「間違った」行動はなく、慣例だけがあるだけです。
  • 端末設計には(おそらく)独立して関連するいくつかの機能があります。
  • 慣例(およびLinuxコンソール、xterm、やや他のrxvtなどのいくつかの例)は、多くの色の端末が同様に動作します。
  • ncurses FAQ私の端末に着色されていないスペースが表示されます。詳細については。

ルールは強力な論拠です。プログラムは変更されないこれらのデザインの選択に依存します。問題の原因のいくつかの例については、次のシナリオを検討してください。

最近のVTEバグレポート、#754596興味深い読書を提供します。 VTEの開発者は、動作を変更し、何が起こるのかを見るように提案するようです。

まず、次の開発サイクルでコードを「修正」し(_vte_terminal_cursor_down()で「xterm一致とスクロール時に新しい行を埋める」6行を削除)、問題に苦情を申し立てる人がいるかどうかを確認できます。そうすれば、状況をよりよく理解することができます。

おすすめ記事