追加読書

追加読書

白い画面に黒い文字を表示するためにコンソールの色を反転する方法は?

tput rev

うまくいきますが、キャラクターの背景の一部だけが白く、画面の残りの部分はまだ黒いので少し奇妙に見えます。文字なしでコンソール全体の背景を白に変更するには?

質問の拡張は、黄色の背景、黒の前景などの他の色を作成する方法です。

tput setaf 0 && tput setab 3

本当ですが、文字のない背景はまだ黒です。

私はXなしのテキストコンソール、またはXでCltr + Alt + F1を押し、xターミナルウィンドウではなくフルブラックスクリーンコンソールログインを取得したときに取得するコンソールについて話しています。

これはDebianの不安定/sidです。

答え1

後部カメラが面白いですね。

terminfoモデルはとてもシンプルで間違っています。端末エミュレータと実際の端末が実際に動作する方法は一致しません。実際、ここではterminfoについてあまり知りません。

実際の端末のモデルは一見すると非常に単純に見えます。

  • 現在、色とプロパティのセットがあり、そのうちの1つがアンチビデオプロパティです。ビデオを反転すると、文字グリフのピクセルが反転されます。存在するピクセルは背景色です。去るピクセルは前景色です。
  • すべてのセルのビデオ反転プロパティの意味を反転するフルスクリーン反転ビデオ設定があります。オンに設定すると、すべての反転文字セルが反転なしで表示され、その逆も同様です。

白黒ビデオ端末の場合、これはハードウェアの一部のXORロジックにすぎません。

アンチビデオ属性はもちろんSGR 7とSGR 27であり、何十年もECMA-48以外にはほとんど誰もやったことがありません。フルスクリーン反転ビデオ設定は、DECSCNM(DECスクリーンモード)と呼ばれるDEC VTから派生した制御シーケンスによって制御されます。これは、ECMA-48がメカニズムを提供するベンダー専用モデルです。これらのシーケンスは、DECプライベートモード#5のECMA-48 SMとRMです。

もしあなたなら本物次の出力行だけでなく画面全体を反転させるには、DECSCNMが最善の選択です。 Unicode rxvt、VTEライブラリベースの端末エミュレータ、Konsole、kitty、KiTTY、PuTTY、XTerm、Linux組み込み端末エミュレータ、およびconsole-terminal-emulatornoshツールセットのmyなど、多くの端末エミュレータがDECSCNMを認識して応答します。

DECSCNM制御シーケンスを使用して印刷できますprintf。 terminfo機能はありません。これは限られたterminfoモデルを超えています。制御シーケンスを覚えたくない人のために、私のポータブルデバイスはsettermこれを行うための便利な方法を提供します。

%setterm -7 --画面を反転して開きます。
%setterm -7 - 画面反転オフ

状況が醜くなるところがここです。

実際には二つ色と属性のセット。印刷された文字を描くセットがあり、文字を消去してスクロールして挿入された空の行と列を描画するセットがあります。名前付き設定カラーモードをクリア(DECECM) は、2 つのセットがどれだけ分離されているかを制御します。実際の後期モデルであるDEC VTでは、デフォルト設定はデフォルトで同じで、消去/スクロール色は印刷色と一致します。ただし、端末エミュレータが多すぎる場合は、DECECM設定を印刷色とは異なる色を消去またはスクロールする前の規則で初期化し、常にSGR 39 / SGR 49に初期化します。

初期状態はPuTTYのチェックボックスで選択でき、これを背景色の削除と呼びます。 terminfoモデルもこれを呼び出しますが、反転します。まず、その端末がある端末では、次のようになります。設定可能モード、端子の固定側ではありません。これは、制御シーケンスを発行するホストによって切り替えることができます。 terminfoはこれを設定する機能を提供しませんが、閉じるか開いているかを示す固定値フラグのみを提供するため、端末の現在の状態と一致しない可能性があります。繰り返しますが、制御順序を覚えたくない人のために:

%setterm -7 --bce オン
%setterm -7 --bce 閉じる

しかしDECECM厳密に言えば(背景)色のみを制御します。厳密に言えば接続ができない。プロパティ。消去またはスクロールされた文字セルには、印刷された文字に割り当てられた逆方向ビデオ属性(または実際には下線などの他の属性)を付与する必要はありません。一部の端末(例:私の端末とFreeBSDカーネルに組み込まれている端末エミュレータ)は動作しますが、ほとんどはそうではありません。

また、消去/スクロールが最初に発生した場合にのみ機能します。消去/スクロールせずに行の全長まで印刷しないと、セクションに異なる色/属性が残ります。

これが多くの端末エミュレータで見られる残りの行が強調表示されない理由です。 (マイターミナルエミュレータまたはFreeBSD KVTを使用している場合は、スクロールすると行全体が逆方向ビデオとして表示されるかELで消去されます。printf '\e[7m\e[117hwibble\e[K\n'結果を確認してください。)

十分でないと、奇妙な動作がたくさん発生します。

  • DECECMがオンに設定されている場合、PuTTYとその派生(混乱した名前のMobaXTermなど)は消去色を背景色にリンクしますが、逆方向ビデオを同様に伝播しません。 (画面の最後の行から)行の一部はビデオが反転し、一部はビデオが反転しませんが、色は同じままになる効果をお楽しみください。
    tput setaf 4;出力セット3;
    Windows端末もこれを行うことができるようです。
  • Interix 端末エミュレータは SGR 7 を使用して逆方向ビデオをオンにすることができますが、SGR 27 を認識しないためビデオをオフにすることはできません。
  • いくつかのターミナルエミュレータには、Unicode rxvtのようなリバースビデオの「私はあなたよりもよく知っています」というクレイジーなアイデアがあります。まったく異なる色のペアに切り替える背景色と前景色が同じに設定されている場合は、反転ビデオをオンにします。楽しむ青は全くないそして:
    tput setaf 4;出力速度

リバースビデオを破棄、消去またはスクロールし、フルスクリーンリバースビデオを使用することを考えることもできます。しかし、楽しみは止まらない。

  • PuTTY は、DECSNM を素早く開閉することをベルを鳴らそうとする試みとして解釈します。
  • 複数の端末エミュレータは明るい色と暗い色を変更します。暗い背景に対して DECSCNM を要求すると明るい背景が得られ、その逆も同様です。
  • Windows端末は、複数のパレットアイテム、特にインデックスカラー#232を変更するDECSCNMに応答します。 XTermはカラーパレットも変更します。

はい。フルワイドリバースビデオバーを印刷するフルスクリーンアプリケーションは、DECECMとELシーケンスを使用していくつかのタスクを実行する必要があります(遅延改行には使用するのが難しく、言及もありません)...または多くのスペースを印刷して前景/背景色を明示的に変更し、反転ビデオを完全に避けてください。

追加読書

関連情報