
打印出每個Unicode字符;在您的終端中查看所有可能的字形
好吧...不是每個角色。我們不需要控制代碼等,因此C , M和Z類中的字符不會打印。 (請參閱腳本末尾的一般類別值表。)
如果您的系統上沒有/usr/share/unicode/UnicodeData.txt ,則將自動使用此腳本中的版本。 (v14.0.0,截至2021年9月從unicode.org出發)。
雖然FontTable將所有可打印的Unicode字符發送到STDOUT,但實際顯示哪些字符取決於您在系統上安裝了哪些字體以及是否設置了終端來使用它們。
可選地,可以使用-f字體名稱將顯示屏限制為該字體中定義的字形。 (需要FontConfig和Sixel圖形。)
注意:Unicode聯盟的“ Unicodedata.txt”文件未列出CJK字符,但可以在相鄰的Unihan數據庫中找到。如果您也想看到它們,請指定“ -s”
這是一個外殼腳本。只需下載fonttable並運行即可。
這是受到許多年輕人最喜歡的8位單線的啟發:

FORT=0TO255:?CHR$(T);:NEXT:RUN
這是現代的等效物,是觀看每個有效字形的一種方式。當然,我們不能使用簡單的循環,因為Unicode的地址空間很大,而代碼點只有一小部分是有效的字符。解決方案是僅打印在unicodedata.txt文件中指定的字符。
同樣,並非分配的統一意識形態範圍中的每個CJK代碼點都是一個角色。通信只能打印Unihan數據庫所知道的字符。 (unihan_dictionaryIndices.txt)。
從Unicode 14(2021)開始,我在Unicodedata.txt中計算了將近32,000個可打印字符。此外,Unihan數據庫中有超過70,000個已知的CJK字符。
$ ./fonttable -s | awk '{print length($1)}'
31959
70805
(有些人聲稱數字要高得多,因為他們使用的是preplist.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選項就像範圍選項一樣,但僅顯示在特定字體中定義的編碼點(並在Unicode中標記為正常的可打印字符)。例如:
fonttable -f NotoSans
字體可以通過文件名指定:
fonttable -f /usr/share/fonts/X11/misc/neep-iso10646-1-10x20.pcf.gz
FontTable使用Sixel圖形來繪製所請求的字體。如果您想使用特定的字體來限制顯示哪些編碼點,但仍將其顯示在默認字體中,請使用-d FONT選項。
BUG:目前的六核動物處理非常幼稚。如果終端支持Sixels圖形,則不會查詢終端,每個字符高多少像素,也不是適當的文本顏色。
您的機器必須具有Fontconfig,這對於Debian GNU/Linux和衍生品是正確的,但可能並非如此。此外,字體名稱必須以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等程序將這種字形移至Unicode代碼點。

不同的終端程序和字體將為您帶來截然不同的結果。
xxx todo
由於測試的終端現在已經很舊,因此需要重做本節。


Gnome-terminal-3.38.3使用freetype使用多個字體。對於某些字符,例如⑫(十二個數字),字形對於字符單元來說太寬,並且重疊不良。似乎沒有設置可以告訴侏儒末端來收縮或截斷過度寬的字形。

GNOME終端幾乎沒有用戶可設置的首選項,但是您可以將“模棱兩可的寬度”字符設置為寬(兩個單元格)而不是狹窄。至少在此酷刑測試中,這有很大幫助。

但是,將模棱兩可的寬度設置為寬不是靈丹妙藥。例如,如果字形被用與默認值不同的縱橫比的字體代替。例如,這是當選擇“ DEC終端”字體(寬的兩倍)時會發生什麼:

請注意,使用此默認字體,即使寬闊的寬度設置為寬,字形也重疊。
像Gnome -terminal一樣,XTERM在選擇抗抗血液(vector)字體時也使用多個字體( -fa Inconsolata -fs 18 ),如果所選字體過於限制,則填充其他系統字體。 XTERM也可以與位圖字體一起使用,但它們更棘手。
如果使用-fn指定位圖字體,則XTERM將僅使用單個字體。這意味著您需要找到覆蓋您使用的Unicode的每個部分的字體。這並不總是那麼容易。
默認的Xterm字體稱為“固定”,似乎是一個糟糕的選擇,因為它的Unicode字符很少。但是,這是因為XTERM默認使用Latin-1版本。有一個“固定”的Unicode(10646)版本,在覆蓋範圍方面還不錯。 “固定”也有廣泛的亞洲字符版本,Xterm會自動檢測和使用。因此,這不是一個不好的選擇,它是預安裝的。
xterm -fn '*fixed-medium-r-normal--20*10646*'

當您使用-fa指定抗逆字體時,Xterm已經通過使用其他字體來填充您缺少的字形。 (使用-fs指定點大小)。注意:抗脈絡Xterm是指矢量字體,例如trueType,opentype和type 1。
雖然Xterm和Gnome末端都使用freetype呈現抗脈絡化字體,但與Gnome末端不同,Xterm Xterm會執行特徵細胞邊界,並且不會讓Glyphs重疊。取而代之的是,過度寬的字形被截斷。這是否更好是品味問題。

請注意,Xterm默認值是使用用戶指定的字體顏色而不是為字體內置的顏色。同樣,這是一個品味問題,但應注意的是,當今大多數表情符號字體僅設計為顏色,因此某些範圍的單色字體可能看起來過時或缺少字形。
如果您希望在運行通用時查看哪些字體已加載,請在運行Xterm之前將XFT_DEBUG環境變量設置為3。
XFT_DEBUG=3 xterm -fa DroidSansMono -fs 24
如果您希望強制XTERM僅使用所需的字體,則可以通過將limitFontsets x Resource設置為0來做到這一點。
xterm -fa DroidSansMono -xrm "XTerm*vt100.limitFontsets: 0"
請注意,Xterm將嘗試自動檢測您的字體是否也可以在UDPOUNSIZE版本(用於CJK)中可用。如果找不到它,則可以使用-fd指定單獨的“倍增”字體。
xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"
請注意,如果您沒有安裝特定的字體,即使您使用limitfontset:0,您也會顯示為替代字體。同樣,您可以使用xft_debug來找出正在發生的事情。
XFT_DEBUG=3 xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"