追加読書

追加読書

すべて。

問題はここで見つけることができる設定に関連しています。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データベースが実際に扱うエミュレーションの一部にすぎません。)

以下を行う必要があります。

  • screenlibvteベースの端末エミュレータを正しく説明するには(フロントエンドレンダリング部分)に正しい端末タイプを指定してください。
  • screen実行中のアプリケーションに正しい端末タイプを提供してください。私自身端末エミュレーション。 screenハイブリッドを作るscreen.vte-256colorタイプ。次のようなものも使用できます。screen-256color-bce代わりに。
  • 画面を作成する前に、screen設定またはコマンドで背景色の削除機能をオンにするように指示してください。これは、呼び出すコンテキストに関係なく、ファイルの可視性の影響を受けます。bcedefbce${HOME}/.screenrcscreen

別の過酷なアプローチ(背景色の削除は、画面の大きな空のブロックに色を割り当てるダイアログユーティリティなどのプログラムに役立つ最適化であるため)は次のとおりです。

  • まだscreenlibvteベースの端末エミュレータを正しく説明するには(フロントエンドレンダリング部分)に正しい端末タイプを指定してください。
  • screen実行中のアプリケーションに正しい端末タイプを提供してください。私自身端末エミュレーションですが、今回は次のいずれかです。いいえモノクロなどの背景色削除機能の宣伝screen-256colorタイプ。
  • screen背景色はそのままにして消去します。

追加読書

関連情報