htop
などの一部のプログラムでは、線とフレームが正しく表示されません。代わりに、-
および/
として表示されます。
しかし、別のマシンでは、それらは適切な行として正しく表示されます。
これが端末の問題なのか、それとも何らかのパッケージが必要なのかはわかりません。
該当する場合:私のシステムはDebian Wheezy、私のインタープリターはbash
、私のターミナルエミュレーターはgnome-terminal
です。
一番上の例は非Unicodeロケール(ASCIIなど)で実行しています。 $ LANG環境変数を確認します(export | grep LANG
を試してください)。ほとんどの場合、.UTF-8
サフィックスは見つかりません。追加してみてください:
export LANG=$LANG.UTF-8
他の例は、最近のシェルのデフォルトであるはずのUTF-8ロケールで実行しています。 htop
はあなたのロケールを検出し、ASCIIまたはUnicode文字のいずれかを表示するようです-下の画像では、素敵なUnicode文字が表示されますが、ASCIIを使用するとかなりきれいになります間に合わせのもの。上の画像のマシンのロケールをUnicodeのロケールに変更することをお勧めします( Locale-Debian Wiki を参照)。
それでもうまくいかない場合は、ターミナルエミュレータが問題である可能性があります。デフォルトのエンコーディングは非Unicodeである可能性があります。端末エミュレータのデフォルトのエンコーディングをUTF-8に変更します(xfce4-terminal
の場合、[詳細設定]タブで見つけました)。できない場合は、現在のフォントがUnicodeをサポートしていない可能性があります。フォントをUnicodeのものに変更してみてください。
[不思議なことに、シェルセッションでロケールをASCIIに一度変更すると、htop
は、変更後も常にASCII文字を表示します。なんらかの理由でシェルのロケールを時々変更している場合は、それが問題である可能性があります。]
奇妙なことに、htop
はncursesを使用します。これにより、Unicodeの有無にかかわらず線を描画できます。ただし、ソースコードを CRT.c
で確認すると、説明が表示されます。
#ifdef HAVE_LIBNCURSESW
if(strcmp(nl_langinfo(CODESET), "UTF-8") == 0)
CRT_utf8 = true;
else
CRT_utf8 = false;
#endif
CRT_treeStr =
#ifdef HAVE_LIBNCURSESW
CRT_utf8 ? CRT_treeStrUtf8 :
#endif
CRT_treeStrAscii;
そして CRT_treeStrUtf8
値は
const char *CRT_treeStrUtf8[TREE_STR_COUNT] = {
"\xe2\x94\x80", // TREE_STR_HORZ ─
"\xe2\x94\x82", // TREE_STR_VERT │
"\xe2\x94\x9c", // TREE_STR_RTEE ├
"\xe2\x94\x94", // TREE_STR_BEND └
"\xe2\x94\x8c", // TREE_STR_TEND ┌
"+", // TREE_STR_OPEN +
"\xe2\x94\x80", // TREE_STR_SHUT ─
};
ただし、ncurses(すべてのcurses実装)には、エンコーディングがUTF-8であるかどうかに依存しないこれらの移植可能なシンボルがあります。一部のアプリケーション( dialog の--ascii-lines
オプションなど)は、ASCII行を使用するためのオプションを提供します-drawingですが、ncursesで提供される線描画を使用しようとしないアプリケーションでも、ライブラリを効果的に使用できません。
つまり、そのような動作をするプログラムに遭遇した場合、それをバグとして開発者に報告する必要があります。
参考文献:
border
、wborder
、box
、hline
、whline
、vline
、wvline
、mvhline
、mvwhline
、mvvline
、mvwvline
-cursesボーダー、水平線と垂直線を作成するdialog
スクリーンショット (なし線画を使用するにはUTF-8エンコードが必要です)