
すべてのユニコード文字を印刷します。ターミナルで可能なすべてのグリフをご覧ください
¹まあ...すべてのキャラクターではありません。制御コードなどは望んでいないため、カテゴリC 、 M 、 Zの文字は印刷されません。 (スクリプトの最後にある一般カテゴリ値の表を参照してください。)
/usr/share/unicode/UnicodeData.txtシステムに持っていない場合、このスクリプトでキャッシュされたバージョンが自動的に使用されます。 (v14.0.0、unicode.orgからの2021年9月現在の電流)。
Fonttableはすべての印刷可能なUnicode文字をstdoutに送信しますが、実際に表示される文字は、システムにインストールしたフォントと、端末がそれらを使用するようにセットアップしているかどうかによって異なります。
オプションで、-f fontNameを使用して特定のフォントを指定して、そのフォントで定義されたグリフにディスプレイを制限できます。 (fontconfigとSixelグラフィックスが必要です。)
注:Unicode Consortiumの「Unicodedata.txt」ファイルにはCJK文字がリストされていませんが、隣接するUnihanデータベースにあります。それらも見たい場合は、「-s」を指定します
それはシェルスクリプトです。 fonttableをダウンロードして実行するだけです。
これは、多くの若者のお気に入りの8ビットのワンライナーに触発されました:

FORT=0TO255:?CHR$(T);:NEXT:RUN
これは現代の同等物であり、すべての有効なグリフを見る方法です。もちろん、Unicodeには膨大なアドレス空間があり、コードポイントのごく一部のみが有効な文字であるため、単純なループを使用することはできません。解決策は、Unicodedata.txtファイルで指定された文字を印刷することです。
同様に、割り当てられた統一されたアイデグラフ範囲のすべてのCJKコードポイントがキャラクターではありません。 fonttableプリントUnihanデータベースが存在する文字のみが存在します。 (unihan_dictionaryindices.txt)。
Unicode 14(2021)の時点で、Unicodedata.txtで約32,000の印刷可能な文字を数えています。さらに、Unihanデータベースには70,000を超えるCJK文字があります。
$ ./fonttable -s | awk '{print length($1)}'
31959
70805
(PROPLIST.TXTを使用しており、それらのコードポイントに文字が存在するかどうかにかかわらず、割り当てられた領域をカウントしているため、はるかに高い数値を主張する人もいます。)
fonttable: Show every Unicode character in your terminal.
Usage: fonttable [ -csu ] [ START..END ] [ -f FONT [ -p POINTSIZE ]]
START..END
Show range from START to END, inclusive. (Hexadecimal).
START defaults to 0, END defaults to infinity.
Multiple ranges are allowed: fonttable 2590..f 1fb00..ff
-f FONT | --font-name FONT
Display every Unicode glyph which is defined in FONT as
a sixel image directly in the terminal.
-p POINTSIZE | --point-size POINTSIZE
Change the size of the font rendered by -f.
-d FONT | --defined-in FONT
Like -f, but displays using the default terminal font,
not graphics. Useful to quickly see character coverage.
-c | --cache
Use cached UnicodeData.txt embedded in this script.
Usually the cached version is only used if the file is
not in /usr/share/unicode/ or the current directory.
-s | --show-unihan
Also show CJK data from the Unihan database.
The default is to not show characters that Unicode has
designated as mappings to other standards.
-u | --unihan-cache
Use a cached copy of the list of valid CJK characters
instead of looking for Unihan_DictionaryIndices.txt.
UnicodeData.txt contains around 30,000 characters.
Unihan adds another 70,000.
-f / - font -nameオプションは範囲オプションのようなものですが、特定のフォントで定義されているコードポイントのみが表示されます(ユニコードでは通常の印刷可能な文字としてマークされています)。例えば:
fonttable -f NotoSans
フォントは、filenameで指定できます。
fonttable -f /usr/share/fonts/X11/misc/neep-iso10646-1-10x20.pcf.gz
Fonttableは、Sixelグラフィックスを使用して、要求されたフォントを描画します。特定のフォントを使用して表示されるコードポイントを制限するが、デフォルトのフォントに表示される場合は-d FONTオプションを使用します。
バグ:現在、Sixelの取り扱いは非常に素朴です。端末は、Sixelsのグラフィックスをサポートしていない場合、および各文字が必要なピクセルの数の場合も、適切なテキストの色も照会されません。
マシンにはfontconfigが必要です。これは、Debian Gnu/Linuxおよび派生物に当てはまりますが、普遍的に真実ではない場合があります。さらに、fontNameはfontconfigの形式で必要です。例えば:
fonttable -f LTCCaslon # Works
fonttable -f "LTC Caslon" # Works
fonttable -f "LTC Caslon Swash Long Regular" # Works
しかし、それが起こるように:
fonttable -f Caslon # Does Not Work
fonttable -f "LTC Caslon Swash Long" # Does Not Work
名前がわからない場合は、 fc-list | grep -i caslon 。また、フォントファイル名を直接指定することもできます。例えば:
fonttable ~/.local/share/fonts/P22CezannePro.ttf
一部の装飾的でエキスパートフォントは、Unicode CodePointsまたはそのマップにマッピングがないグリフを定義します。これらのキャラクターは、このスクリプトでは見つかりません。例えば:
fonttable -f AdobeWoodType # Shows no glyphs!
ただし、ある程度の努力があれば、そのようなグリフをfontforgeなどのプログラムを使用してコードポイントに移動できます。

異なる端末プログラムとフォントは、劇的に異なる結果をもたらします。
xxx todo
このセクションは、テストされた端子が非常に古いため、やり直す必要があります。


Gnome-Terminal-3.38.3は、Freetypeを使用して複数のフォントを使用します。 ⑫(丸で囲まれた12)などの一部のキャラクターの場合、グリフはキャラクターセルには広すぎてひどく重複しています。 GNOME末端に、非常に広いグリフを縮小または切り捨てるように指示する設定はないようです。

GNOMEターミナルにはユーザーの設定可能な設定がほとんどありませんが、「あいまいな幅」文字を狭い代わりに広くする(2つのセル)に設定できます。これは、少なくともこの拷問テストではかなり役立ちます。

ただし、曖昧な幅を広く設定することは万能薬ではありません。たとえば、グリフがデフォルトとは非常に異なるアスペクト比のフォントに置き換えられている場合。たとえば、「DECターミナル」フォントが選択されたときに起こることがあります(これは幅の2倍の高さです):

このデフォルトのフォントでは、あいまいな幅が広く設定されていても、グリフが重複していることに注意してください。
GNOME末端と同様に、Xtermは、アンチアライアス(Vector)フォントが選択されている場合に複数のフォント( -fa Inconsolata -fs 18 )も使用し、選択したフォントが限られている場合は他のシステムフォントに記入します。 Xtermはビットマップフォントでも動作する可能性がありますが、少し難しいです。
-fnを使用してビットマップフォントを指定する場合、Xtermは単一のフォントのみを使用します。つまり、使用するUnicodeのすべてのセクションをカバーする1つのフォントを見つける必要があります。これは必ずしも簡単ではありません。
「固定」と呼ばれるデフォルトのXtermフォントは、Unicode文字がほとんどないため、ひどい選択のようです。ただし、XtermがデフォルトでLATIN-1バージョンを使用しているためです。 「固定」のUnicode(10646)バージョンがあり、カバレッジの点では悪くありません。 「固定」には、Xtermが自動的に検出して使用するアジアのキャラクター向けの幅広いバージョンもあります。したがって、悪い選択ではなく、プリインストールされます。
xterm -fn '*fixed-medium-r-normal--20*10646*'

Xtermは、 -faを使用してアンチアライアスされたフォントを指定するときに、他のフォントを使用することにより、不足しているグリフを既に記入しています。 ( -fsを使用してポイントサイズを指定します)。注:アンチアライアスは、XtermがTrueType、Opentype、Type 1などのベクトルフォントをどのように指すかです。
XtermとGnome末端はどちらもFreetypeを使用してアンチアライアスされたフォントをレンダリングしますが、Xtermは文字セルの境界を施行し、Glyphsの重複を許可しません。代わりに、非常に広いグリフが切り捨てられます。これが良いかどうかは好みの問題です。

Xtermは、フォントに組み込まれた色ではなく、ユーザーが指定したフォント色を使用することにデフォルトであることに注意してください。繰り返しになりますが、これは好みの問題ですが、今日のほとんどの絵文字フォントは色のみで設計されているため、特定の範囲のシングルカラーフォントは時代遅れに見えるか、グリフが欠落していることに注意する必要があります。
フォントテーブルを実行するときにどのフォントが読み込まれているかを確認したい場合は、XFT_DEBUG環境変数を3に設定してからXtermを実行します。
XFT_DEBUG=3 xterm -fa DroidSansMono -fs 24
Xtermに要求したフォントのみを使用するように強制する場合は、 limitFontsets xリソースを0に設定することでそうすることができます。
xterm -fa DroidSansMono -xrm "XTerm*vt100.limitFontsets: 0"
Xtermは、フォントがDoublesizeバージョン(CJKの場合)でも使用可能であるかどうかを自動的に検出しようとすることに注意してください。発見されていない場合は、 -fdを使用して個別の「doublesize」フォントを指定できます。
xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"
特定のフォントがインストールされていない場合は、LimitFontSets:0を使用している場合でも、代替フォントが表示されることに注意してください。繰り返しますが、XFT_DEBUGを使用して何が起こっているのかを知ることができます。
XFT_DEBUG=3 xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"