すべて。
問題はここで見つけることができる設定に関連しています。https://github.com/filmil/bugreports/blob/master/dialog/README.md
対話型Dockerターミナルセッションでダイアログユーティリティを実行すると、セッションで実行されたときと「一般」ターミナルで実行されたときに異なる結果が表示されることがわかりましたscreen
。
前者の場合、サンプルアプリケーションが期待どおりに表示されます。下記をご覧ください。
後者の場合、サンプルアプリケーションが表示されますが、画面は完全に「着色」されません。下記をご覧ください。
最初はTERM設定の問題だと思いました。しかし、私はそれが何であるかを見つけることができませんscreen
。スクリーンセッションを操作する方法についてのアイデアはありますか? Dockerなしで「一般」ダイアログボックスを実行すると、正常に表示されます。 「穴」が現れるのは、dockerが機能しているときだけです。
あなたの考えに感謝します!
答え1
対話型ユーティリティの場合、端末はプログラムによってエミュレートされた端末ですscreen
。順番にscreen
、プログラムはメニューを通して見ることができる他の端末(GNOME端末、MATE端末、または同様の端末)と通信します。
ダイアログ・ユーティリティは制御シーケンスを使用して、一度に多数の文字セルを消去します。 ECMA-48規格は、行の終わり、表示の終わり、または次の行まで消去できるさまざまな「消去」制御シーケンスを定義しています。窒素数値。これらの制御シーケンスはで処理されますscreen
。
端末には、これらの削除シーケンスを処理するための2つの動作モードがあります。現在の背景色または消去の使用基本背景色2番目のスクリーンショットでは、端末が実際にデフォルトの背景色を使用してワイプを実装しているときに、ワイプが現在の背景色を使用していると思うプログラム(この場合はダイアログユーティリティ)の結果を見ることができます。 (最初のスクリーンショットは2つの方法で行われます。端末が現在の背景色を使用して消去するか、アプリケーションが最初に背景色を消去する機能がないことを認識し、それに応じて出力を調整するか、そうでなければ大きな空白領域を作成します。 )
他の端末や端末エミュレータの場合と同様に、screen
この動作を切り替えることができます。基本的にscreen
いわゆる背景色を消去オフになり、制御順序に基づいてデフォルトの色が削除に使用されます。コマンドでオンにすると、bce
現在の背景色を使用して消去されます。bce
すべての新しい画面でこのコマンドを使用して、設定自体のデフォルト値を設定できますdefbce
。
会話ユーティリティはこれを理解する必要があります。すべての端末で使用できるわけではありません。背景色を消去、切り替え可能にすることは言うまでもありません。
会話ユーティリティに通知するのは、端末タイプに対応するレコードです(TERM
環境変数の値として表示されることを忘れないでください)。会話プログラムで見ることができます。)terminfoデータベースにあります。このレコードには、プログラムが会話中の端末が何をするかを決定する機能があります。名前はですbce
。 (termcapに対応する名前はですut
。)
これを複雑にすることは、screen
これらのプログラムに端末が何であるかを伝える方法です。他の端末エミュレータは、単に端末のように動作する方法を定義し、端末エミュレーションの特定の端末タイプを使用してプログラムを実行する必要があります。 tmuxには端末タイプのみがあります。tmux
そしてtmux-256color
たとえば、tmux の単一シミュレーション端末の動作について説明します。 screen
それに比べて奇妙雑種エミュレーションタイプと外部タイプを組み合わせた端末タイプがscreen
端末に表示されます。screen.xterm-256color
あなたの場合は、terminfoデータベースに一致するハイブリッドエントリが必要です。
ここでの問題の一部は、screen
最初に外部、レンダリングターゲット、およびターミナルターゲットを誤って説明したことです。 XTermではなく、XTermと完全に互換性がありません。あなたが聞いたことにもかかわらず、正しい端末タイプではありません。xterm
。正しい端末タイプは次のとおりです。gnome-256color
またはvte-256colour
、これは実際に具体的な説明GNOME端末などのlibvteベースのエミュレータ。 (を実行すると、infocmp {xterm,vte}-256color
システムがこれら2つの端末エミュレータが異なるとどう思うかを確認できます。これは、terminfoデータベースが実際に扱うエミュレーションの一部にすぎません。)
以下を行う必要があります。
screen
libvteベースの端末エミュレータを正しく説明するには(フロントエンドレンダリング部分)に正しい端末タイプを指定してください。screen
実行中のアプリケーションに正しい端末タイプを提供してください。私自身端末エミュレーション。screen
ハイブリッドを作るscreen.vte-256color
タイプ。次のようなものも使用できます。screen-256color-bce
代わりに。- 画面を作成する前に、
screen
設定またはコマンドで背景色の削除機能をオンにするように指示してください。これは、呼び出すコンテキストに関係なく、ファイルの可視性の影響を受けます。bce
defbce
${HOME}/.screenrc
screen
別の過酷なアプローチ(背景色の削除は、画面の大きな空のブロックに色を割り当てるダイアログユーティリティなどのプログラムに役立つ最適化であるため)は次のとおりです。
- まだ
screen
libvteベースの端末エミュレータを正しく説明するには(フロントエンドレンダリング部分)に正しい端末タイプを指定してください。 screen
実行中のアプリケーションに正しい端末タイプを提供してください。私自身端末エミュレーションですが、今回は次のいずれかです。いいえモノクロなどの背景色削除機能の宣伝screen-256color
タイプ。screen
背景色はそのままにして消去します。
追加読書
- 「文字処理」、 画面マニュアル。 GNUプロジェクト。
- 行の最後まで消去すると、画面上で無効な背景色が使用されます。
- 行の終わりまで消去すると、tmuxで無効な背景色が使用されます。
- Curses インターフェイスには、GNU 画面と SSH の下にスペースがあります。
- ディッキー、トーマスE.(1997)。 」VT220とは何ですか?」。xterm FAQ。見えない島。
- ディッキー、トーマスE.(2018)。 」XTermおよび類似アイテムの既知のバグ:GNOME端末」。xterm FAQ。見えない島。