
Drucken Sie jeden Ein -Unicode -Charakter aus; Sehen Sie alle möglichen Glyphen in Ihrem Terminal an
¹ Nun ... nicht ganz jeder Charakter. Wir wollen keine Kontrollcodes und dergleichen, so dass Charaktere in Kategorien C , M und Z nicht gedruckt werden. (Siehe die Tabelle der allgemeinen Kategorienwerte am Ende des Skripts.)
Wenn Sie nicht /usr/share/unicode/UnicodeData.txt in Ihrem System haben, wird automatisch eine in diesem Skript zwischengespeicherte Version verwendet. (v14.0.0, aktuell ab September 2021 von unicode.org).
Während FontTable alle druckbaren Unicode -Zeichen an STDOut sendet, hängt die tatsächlich angezeigten Zeichen davon ab, welche Schriftarten Sie in Ihrem System installiert haben und ob Ihr Terminal eingerichtet ist, um sie zu verwenden.
Optional kann man eine bestimmte Schriftart mit -F -FontName angeben, um die Anzeige auf Glyphen zu beschränken, die in dieser Schriftart definiert sind. (Benötigt Fontconfig und Sixel -Grafiken.)
Hinweis: In der "unicodedata.txt" -Datei des Unicode -Konsortiums werden keine CJK -Zeichen aufgeführt, aber sie finden Sie in der angrenzenden Unihan -Datenbank. Wenn Sie sie auch sehen möchten, geben Sie "-s" an
Es ist ein Shell -Skript. Laden Sie einfach fonttable herunter und führen Sie es aus.
Dies wurde vom beliebtesten 8-Bit-Ein-Liner vieler Jugendlicher inspiriert:

FORT=0TO255:?CHR$(T);:NEXT:RUN
Dies ist das moderne Äquivalent, eine Möglichkeit, jeden gültigen Glyphen zu sehen. Natürlich können wir keine einfache Schleife verwenden, da Unicode einen riesigen Adressraum hat und nur ein kleiner Teil der Codepunkte gültige Zeichen sind. Die Lösung besteht darin, nur in der unicodedata.txt -Datei angegebene Zeichen zu drucken.
Ebenso ist nicht jeder CJK -Codepunkt in der zugewiesenen einheitlichen Ideograf -Reichweite ein Zeichen. Schreibbilder druckt nur Zeichen, von denen die Unihan -Datenbank kennt. (Unihan_DictionaryIndices.txt).
Ab Unicode 14 (2021) zähle ich fast 32.000 druckbare Zeichen in unicodedata.txt. Darüber hinaus sind in der Unihan -Datenbank über 70.000 CJK -Zeichen bekannt.
$ ./fonttable -s | awk '{print length($1)}'
31959
70805
(Einige Leute behaupten viel höhere Zahlen, weil sie PropList.txt und Zählen zugewiesenen Regionen verwenden, unabhängig davon, ob Zeichen an diesen Codepunkten vorhanden sind oder nicht.)
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.
Die Option -f / - -font -name ähnelt der Reichweite, zeigt jedoch nur die CodePoints an, die in einer bestimmten Schriftart definiert sind (und die als normale, druckbare Zeichen in Unicode gekennzeichnet sind). Zum Beispiel:
fonttable -f NotoSans
Schriftarten können durch Dateiname angegeben werden:
fonttable -f /usr/share/fonts/X11/misc/neep-iso10646-1-10x20.pcf.gz
FontTable verwendet Sixel -Grafiken, um die angeforderte Schriftart zu zeichnen. Verwenden Sie die Option -d FONT wenn Sie eine bestimmte Schriftart verwenden möchten, um zu begrenzen, welche CodePoints angezeigt werden. Zeigen Sie sie jedoch in der Standardschrift an.
Bug: Derzeit ist das Sixel -Handling ziemlich naiv. Das Terminal wird weder abgefragt, wenn es Sixels -Grafiken unterstützt, noch wie viele Pixel hoch jedes Zeichen oder die richtigen Textfarben.
Ihre Maschine muss Fontconfig haben, die für Debian GNU/Linux und Derivate zutreffen, aber möglicherweise nicht allgemein wahr ist. Zusätzlich muss der FontName in einem Format Fontconfig Likes. Zum Beispiel:
fonttable -f LTCCaslon # Works
fonttable -f "LTC Caslon" # Works
fonttable -f "LTC Caslon Swash Long Regular" # Works
Aber wie es passiert:
fonttable -f Caslon # Does Not Work
fonttable -f "LTC Caslon Swash Long" # Does Not Work
Wenn Sie sich über den Namen nicht sicher sind, versuchen Sie es mit fc-list | grep -i caslon . Sie können auch direkt einen Schriftfileinamen angeben. Zum Beispiel:
fonttable ~/.local/share/fonts/P22CezannePro.ttf
Einige dekorative und fachkundige Schriftarten definieren Glyphen, die keine Zuordnungen an Unicode -CodePoints oder diese Karte für den privaten Gebrauch haben. Diese Zeichen werden von diesem Skript nicht gefunden. Zum Beispiel:
fonttable -f AdobeWoodType # Shows no glyphs!
Mit einigen Aufwand kann jedoch solche Glyphen mit einem Programm wie Fontforge auf Unicode -Codepunkte verschoben werden.

Verschiedene Terminalprogramme und Schriftarten erzielen Ihnen drastisch unterschiedliche Ergebnisse.
XXX TODO
Dieser Abschnitt muss überarbeitet werden, da die getesteten Terminals jetzt ziemlich alt sind.


GNOME-terminal-3.38.3 verwendet mehrere Schriftarten mit Freetype. Für einige Zeichen wie ⑫ (eingekreiste Nummer zwölf) sind die Glyphen zu breit für die Charakterzelle und überlappen sich schlecht. Es scheint keine Einstellung zu geben, um zu sagen, dass Gnom-terminal übermäßig breite Glyphen schrumpfen oder abschneiden.

GNOME Terminal hat nur sehr wenige Einstellungen für Benutzer, aber Sie können "mehrdeutige Breite" auf breite (zwei Zellen) anstelle von engen festlegen. Dies hilft ziemlich viel, zumindest bei diesem Foltertest.

Das Einbinden der eindeutigen Breite auf breit ist jedoch kein Allheilmittel. Zum Beispiel, wenn die Glyphe durch eine Schriftart eines ganz anderen Seitenverhältnisses als aus Ihrem Standard ersetzt wird. Beispielsweise passiert hier, was passiert, wenn die Schriftart "Dec -Terminal" ausgewählt wird (was doppelt so hoch ist wie breit):

Beachten Sie, dass sich mit dieser Standardschrift die Glyphen überlappen, obwohl eindeutig auf breit eingestellt ist.
Wie GNOME -terminal verwendet Xterm auch mehrere Schriftarten, wenn eine antialiische (Vektor-) Schriftart ausgewählt wird ( -fa Inconsolata -fs 18 ), wodurch sich mit anderen Systemschriften füllen, wenn die ausgewählte Schriftart zu begrenzt ist. Xterm kann auch mit Bitmaps -Schriftarten arbeiten, aber sie sind etwas schwieriger.
Xterm verwendet nur eine einzelne Schriftart, wenn Sie eine Bitmap -Schriftart mit -fn angeben. Das bedeutet, dass Sie eine Schriftart finden müssen, die jeden Abschnitt von Unicode abdeckt, den Sie verwenden. Das ist nicht immer einfach.
Die Standard -Xterm -Schriftart, die als "fest" bezeichnet wird, scheint eine schreckliche Wahl zu sein, da sie nur sehr wenige Unicode -Zeichen haben. Dies liegt jedoch daran, dass Xterm standardmäßig die Latin-1-Version verwendet. Es gibt eine Unicode (10646) -Version von "fest", die in Bezug auf die Abdeckung nicht schlecht ist. "Fixed" wird auch in einer breiten Version für asiatische Zeichen erhältlich, die Xterm automatisch erkennt und verwendet. Also keine schlechte Wahl, und es kommt vorinstalliert.
xterm -fn '*fixed-medium-r-normal--20*10646*'

Xterm füllt bereits fehlende Glyphen für Sie aus, indem Sie andere Schriftarten verwenden, wenn Sie eine antialische Schriftart mit -fa angeben. (Verwenden Sie -fs , um die Punktgröße anzugeben). HINWEIS: Antialias ist, wie sich Xterm auf Vektor -Schriftarten wie TrueType, Opentype und Typ 1 bezieht.
Während Xterm und GNOME-terminal beide Freetypen verwenden, um antialias-Schriftarten im Gegensatz zu GNOME-terminal zu rendern, erzwingt Xterm Charakterzellgrenzen und lässt sich nicht überlappen. Stattdessen werden übermäßig breite Glyphen abgeschnitten. Ob dies besser ist oder nicht, ist Geschmackssache.

Beachten Sie, dass Xterm standardmäßig die vom Benutzer angegebene Schriftfarbe verwendet, anstatt Farben zu einer Schriftart zu verwenden. Auch dies ist eine Frage des Geschmacks, aber es sollte angemerkt werden, dass die meisten Emoji -Schriftarten heutzutage nur in Farbe gestaltet sind, sodass einzelne Farbschriften für bestimmte Bereiche veraltet aussehen oder Glyphen fehlen.
Wenn Sie sehen möchten, welche Schriftarten beim Ausführen von Schriftarten geladen werden, stellen Sie die Umgebungsvariable der xft_debug auf 3 ein, bevor Sie Xterm ausführen.
XFT_DEBUG=3 xterm -fa DroidSansMono -fs 24
Wenn Sie Xterm dazu zwingen möchten, nur die von Ihnen angeforderten Schriftarten zu verwenden, können Sie dies tun, indem Sie die limitFontsets X -Ressource auf 0 festlegen.
xterm -fa DroidSansMono -xrm "XTerm*vt100.limitFontsets: 0"
Beachten Sie, dass Xterm versucht, automatisch zu erkennen, ob Ihre Schrift auch in einer Doppelversion (für CJK) verfügbar ist. Wenn es nicht findet, können Sie eine separate "Doppelende" Schrift mit -fd angeben.
xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"
Beachten Sie, dass Sie, wenn Sie keine bestimmte Schriftart installiert haben, selbst wenn Sie LimitFontsets: 0 verwenden, eine Ersatzschrift angezeigt wird. Auch hier können Sie XFT_DEBUG verwenden, um herauszufinden, was los ist.
XFT_DEBUG=3 xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"