XtermはUnicode文字を表示しません。

XtermはUnicode文字を表示しません。

鉱山はxtermUnicodeをサポートしています。たとえば、ユーロ記号が表示されます。

echo -e '\xe2\x82\xac'

ただし、特定の文字は表示されません。

PL_BRANCH=$'\ue0a0'
echo $PL_BRANCH

他の端末(ターミネーター)では、文字が正しく表示されます。両方の端末で同じフォント(Inconsolata)を使用しています。

原因は何ですか?解決策は何ですか?

答え1

文字が実際に指定したフォントではありません。次のコマンドを使用してこれを表示できますxfd

xfd -fa inconsolata

これは、最後のコードポイントがU + 2423であることを示しています。もう少し読んでみると、この文字がUnicodeになっていることがわかりました。使用地域、そして(事実にもかかわらず一部フォントで利用可能です)には標準的な意味はありません。

~から2018年末、xtermはさまざまなTrueTypeフォントをロードできますが、現在利用可能なフォントにはU + E0A0は含まれていません。

使用されている実際のフォントを識別できる場合は、誰かがそれを処理できるxtermバージョンを指摘できますか?

フォント検索に影響を与えるxtermと同じライブラリインタフェースを使用しないterminatorことについてのコメントを解決するために(両方ともよく文書化されていません)。terminatorこれを使用して、strace実際にどのフォントファイルが開いているかを確認できます。

たとえば、を使用していくつかのナビゲーションを実行し、strace私のDebian /テストでこの文字のOpenOfficeフォントの1つを開きます。konsolepterm

2600               
2600) = 3                                     
2586
2601   
2601)=4                 

(「OpenSymbol」シリーズのファイルです。)

一方、rxvt-unicode複数の文字があり、その文字が表示されないことがわかりました。フォントスタイルこれらの問題を解決(試行)するために検索リストに追加されました(最終的にはフォント設定の問題を反映)。おそらく似たようなものが見つかるでしょう(しかしその他) konsoleとptermをサポートするライブラリにあります。

答え2

最新のターミナルアプリケーションは、文字が不明な場合はデフォルトフォント以外のフォントを使用します。しかし、xtermは単一のフォントのみを使用します(2バイト文字の特別な場合は除く)。

必要な文字はOpenSymbolフォントの一部であり、使用できますが、$'\ue0a0'フォントにプレーン文字が含まれてecho $'\ue0a0'いないためxterm使用できないため、1つの解決策は必要な特殊文字を含むパッチフォントを使用して次のものを使用することです。

xterm -fa 'Inconsolata for Powerline'

次のようにフォントサイズを設定することもできます。

xterm -fa 'Inconsolata for Powerline' -fs 16

~/.Xresourcesこの設定は、システムに以下を追加するか、広範囲に適用して現在のユーザーに適用できます。/etc/X11/app-defaults/XTerm

XTerm*faceName: Inconsolata for Powerline

リンク:12サム45そして6

関連情報