
Распечатать каждый символ Unicode; Смотрите все возможные глифы в вашем терминале
¹ Хорошо ... не совсем каждый персонаж. Мы не хотим, чтобы контрольные коды и тому подобное, поэтому персонажи в категориях C , M и Z не будут напечатаны. (См. Таблицу общих значений категории в конце сценария.)
Если у вас нет /usr/share/unicode/UnicodeData.txt unicodedata.txt в вашей системе, версия, кэшированная в этом скрипте, будет автоматически использована. (v14.0.0, ток по состоянию на сентябрь 2021 года от Unicode.org).
В то время как Fonttable отправляет все печатные символы Unicode в Stdout, какие символы на самом деле отображаются, зависит от того, какие шрифты вы установили в вашей системе и если ваш терминал настроен на их использование.
При желании можно указать конкретный шрифт, используя -f fontname, чтобы ограничить дисплей глифами, определенными в этом шрифте. (Требуется FontConfig и Sixel Graphics.)
ПРИМЕЧАНИЕ. Файл консорциума 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) я считаю почти 32 000 символов для печати в Unicodedata.txt. Кроме того, в базе данных 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 похожа на опцию диапазона, но показывает только коды, которые определены определенным шрифтом (и которые отмечены как обычные, печатные символы в Unicode). Например:
fonttable -f NotoSans
Шрифты могут быть указаны с помощью имени файла:
fonttable -f /usr/share/fonts/X11/misc/neep-iso10646-1-10x20.pcf.gz
Fonttable использует Graphics Sixel, чтобы нарисовать запрашиваемый шрифт. Используйте опцию -d FONT .
Ошибка: В настоящее время обработка Sixel довольно наивна. Терминал не запрашивается, если он поддерживает графику Sixels, ни сколько пикселей, ни каждая символа, ни в соответствующих цветах текста.
Ваша машина должна иметь FontConfig, который будет верным для Debian GNU/Linux и производных, но не может быть верным повсеместно. Кроме того, FontName должно в формате FontConfig Likes. Например:
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 или с картой для частного использования. Эти персонажи не будут найдены этим сценарием. Например:
fonttable -f AdobeWoodType # Shows no glyphs!
Тем не менее, с некоторыми усилиями, можно перемещать такие глифы в точки кода Unicode, используя такую программу, как Fontforge.

Различные терминальные программы и шрифты дадут вам совершенно разные результаты.
Xxx todo
Этот раздел должен быть переделаен, поскольку протестированные терминалы теперь довольно старые.


GNOME-концевая-3.38.3 использует несколько шрифтов с использованием Freetype. Для некоторых символов, таких как ⑫ (цифровое число двенадцати), глифы слишком широки для ячейки символа и плохо перекрываются. Похоже, нет никаких условий, чтобы сказать гноме-концевым сжиманием или усечению чрезмерно широких глифов.

Клемма Gnome имеет очень мало предпочтений пользователя, но вы можете установить символы «неоднозначной ширины» на широкие (две ячейки) вместо узких. Это помогает довольно много, по крайней мере, на этом тесте на пытки.

Тем не менее, установление неоднозначной ширины на широкую не является панацеей. Например, если глиф заменяется шрифтом совершенно другого соотношения сторон из вашего дефолта. Например, вот что происходит, когда выбран шрифт «терминала" DEC "(который в два раза выше, чем широкий):

Обратите внимание, что с помощью этого шрифта по умолчанию глифы перекрываются, даже несмотря на то, что двусмысленная ширина установлена широкая.
Как и гном -терминал, XERM также использует несколько шрифтов, когда выбран антиалиас (векторный) шрифт ( -fa Inconsolata -fs 18 ), заполняющий другие шрифты системы, если выбранный шрифт слишком ограничен. XERM также может работать с растровыми шрифтами, но они немного сложнее.
XERM будет использовать только один шрифт, если вы указате шрифт растрового изображения с помощью -fn . Это означает, что вам нужно найти один шрифт, который охватывает каждый раздел Unicode, который вы используете. Это не всегда легко.
Шрифт XTerm по умолчанию, называемый «фиксированным», кажется ужасным выбором, поскольку в нем очень мало символов Unicode. Тем не менее, это потому, что XERM по умолчанию использует версию Latin-1. Существует версия «Фиксированного» Unicode (10646), которая неплохой с точки зрения освещения. «Исправлено» также поставляется в широкой версии для азиатских символов, которые XERM автоматически обнаруживает и использует. Так что, не плохой выбор, и он предварительно установлен.
xterm -fn '*fixed-medium-r-normal--20*10646*'

XERM уже заполняет отсутствующие глифы для вас, используя другие шрифты, когда вы указываете противоадиацированный шрифт с помощью -fa . (Используйте -fs , чтобы указать размер точки). Примечание. Antialiased - это то, как XTREM относится к векторным шрифтам, таким как TrueType, OpenType и тип 1.
В то время как XERM и GNOME-концевой оба используют Freetype для визуализации антиалиационированных шрифтов, в отличие от гноме-концевых, XERM обеспечивает соблюдение границ клеток символов и не позволяет глифам перекрываться. Вместо этого чрезмерно широкие глифы усечены. Лучше ли это или нет, это вопрос вкуса.

Обратите внимание, что XERM по умолчанию использует цвет шрифта, указанный пользователем, а не цветами, созданными для шрифта. Опять же, это вопрос вкуса, но следует отметить, что большинство шрифтов смайликов в настоящее время разработаны только по цвету, поэтому однократные шрифты для определенных диапазонов могут выглядеть устаревшими или отсутствовать глифам.
Если вы хотите увидеть, какие шрифты загружаются при запуске Fonttable, установите переменную среды xft_debug на 3, прежде чем запустить XERM.
XFT_DEBUG=3 xterm -fa DroidSansMono -fs 24
Если вы хотите заставить XERM использовать только запрошенные вами шрифты, вы можете сделать это, установив ресурс limitFontsets x на 0.
xterm -fa DroidSansMono -xrm "XTerm*vt100.limitFontsets: 0"
Обратите внимание, что XERM попытается автоматически обнаружить, если ваш шрифт также доступен в версии в парном разме (для CJK). Если он не найдет его, вы можете указать отдельный шрифт «парного размера», используя -fd .
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"