Linuxコンソールでの呪いの使用

Linuxコンソールでの呪いの使用

CtrlAlt私はFedora 12でCursesを使用してステータス情報をVT(+ +を押してアクセスできる端末の1つ)に出力しようとしていますFx

VT() の 1 つでアプリケーションを実行すると、$TERM=linuxボックスの行が、jその他のいくつかの文字で表示されます。ただし、ターミナルウィンドウ()で実行すると、すべてが期待どおりに表示されます。qk$TERM=xterm

VT出力がxtermとして表示されるようにするには、どうすればよいのかを私に説明できますか?出力が正しくなるようにプログラムでターミナルを設定できますか?

ベストアンサー1

良い答えは、まず質問を自分の言葉で説明し、次に関連部分を選択的に引用することです。内部にncurses FAQセクション@Craigは、問題を理解するのに役立つ詳細な側面が1つあると提案しました。

引用するライングラフィック部分用語情報(5)マニュアルページと該当ライングラフィック部分curs_add(3x)マニュアルページでは、cursesライブラリには、次の定義済みシンボル定数セットがあります。ACS_xxxxxさまざまな端末で同様のエスケープシーケンスを使用して描画されます。

最も一般的なバリエーションはVT100に基づいており、アプリケーションはライングラフィックを開始するために特殊文字(またはエスケープシーケンス)を送信します。モデルライングラフィックを終了する別の文字(またはエスケープシーケンス)です。

一部の端末エミュレータ開発者はこの概念に反対します。モデルUTF-8モードでテキストを作成するとき。斜めの言葉は気にしないでください(UTF-8エンコーディングを開始/停止するためのエスケープシーケンスがあります)。ただし、ncursesはこの機能を効率的にサポートします。ライングラフィックの作成方法を決定するのに役立つように、

  • これは、VT100スタイルのライングラフィックを実行する方法のみを知らせることができる端末記述(環境変数で識別される)で始まります。
  • UTF-8の場合は、他の環境変数を調べることでロケールエンコーディングを確認できます。

ncursesがUTF-8のみを使用する必要がある場合(ターミナルがVT100ライングラフィックをサポートしていないため)、十分なUnicode値を含む組み込みテーブルを使用してください。 UTF-8を使用して線を描くのは、VT100を使用して線を描くよりも必然的に3倍遅いです。これは、端末に送信される文字数がVT100を使用するよりも3倍多いからです。

これらすべてがUTF-8線の描画をライブラリの主な焦点ではなく「ただ」にします。 OPの例では、何か(おそらくロケール変数)が間違っています。 FedoraはUTF-8モードでコンソールを初期化し、LinuxコンソールはVT100線の描画を省略し、OPが画面に奇妙な文字を表示することが知られているケースです。

ncursesはOP環境をターミナル記述の機能をサポートすると解釈するため、VT100線描画モード(オーバーレイモードのためコンソールから無視されます)に切り替え、線にマッピングされると予想される文字を描画します。したがって、画面に次のように表示されることがあります。

lqqqqqqqqqqqqqqqk
x  Hello world  x
mqqqqqqqqqqqqqqqj 

代わりに

┌───────────────┐
│  Hello world  │
└───────────────┘

おすすめ記事