
Cetak setiap karakter Unicode; Lihat semua mesin terbang yang mungkin di terminal Anda
¹ Baiklah ... tidak cukup setiap karakter. Kami tidak ingin kode kontrol dan semacamnya, jadi karakter dalam kategori C , M , dan Z tidak akan dicetak. (Lihat tabel nilai kategori umum di akhir skrip.)
Jika Anda tidak memiliki /usr/share/unicode/UnicodeData.txt pada sistem Anda, versi yang di -cache dalam skrip ini akan digunakan secara otomatis. (v14.0.0, saat ini pada September 2021 dari unicode.org).
Sementara FontTable mengirimkan semua karakter Unicode yang dapat dicetak ke stdout, karakter apa yang sebenarnya ditampilkan tergantung pada font apa yang telah Anda instal pada sistem Anda dan jika terminal Anda diatur untuk menggunakannya.
Secara opsional, seseorang dapat menentukan font tertentu menggunakan -f fontname untuk membatasi tampilan ke mesin terbang yang ditentukan dalam font itu. (Membutuhkan grafik fontconfig dan sixel.)
Catatan: File "unicodedata.txt" konsorsium Unicode tidak mencantumkan karakter CJK, tetapi mereka dapat ditemukan dalam database Unihan yang berdekatan. Jika Anda ingin melihatnya juga, tentukan "-s"
Itu skrip shell. Cukup unduh fonttable dan jalankan.
Ini terinspirasi oleh 8-bit one-liner favorit banyak pemuda:

FORT=0TO255:?CHR$(T);:NEXT:RUN
Ini adalah padanan modern, cara untuk melihat setiap mesin terbang yang valid. Tentu saja, kami tidak dapat menggunakan loop sederhana karena Unicode memiliki ruang alamat yang sangat besar dan hanya sebagian kecil dari poin kode yang merupakan karakter yang valid. Solusinya adalah hanya mencetak karakter yang ditentukan dalam file unicodedata.txt.
Demikian juga, tidak setiap titik kode CJK dalam rentang ideografi terpadu yang dialokasikan adalah karakter. Fonttable hanya mencetak karakter yang diketahui database Unihan ada. (Unihan_dictionaryindices.txt).
Pada Unicode 14 (2021), saya menghitung hampir 32.000 karakter yang dapat dicetak di unicodedata.txt. Selain itu, ada lebih dari 70.000 karakter CJK yang diketahui dalam database Unihan.
$ ./fonttable -s | awk '{print length($1)}'
31959
70805
(Beberapa orang mengklaim angka yang jauh lebih tinggi karena mereka menggunakan proplist.txt dan menghitung daerah yang dialokasikan , apakah ada karakter pada titik -titik kode tersebut.)
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.
Opsi -f / --font -name adalah seperti opsi rentang, tetapi hanya menunjukkan titik codepoint yang didefinisikan dalam font tertentu (dan yang ditandai sebagai karakter normal yang dapat dicetak di Unicode). Misalnya:
fonttable -f NotoSans
Font dapat ditentukan dengan nama file:
fonttable -f /usr/share/fonts/X11/misc/neep-iso10646-1-10x20.pcf.gz
FontTable menggunakan grafik Sixel untuk menggambar font yang diminta. Gunakan opsi -d FONT jika Anda ingin menggunakan font tertentu untuk membatasi codepoints mana yang ditampilkan, tetapi masih menampilkannya di font default.
Bug: Saat ini penanganan Sixel cukup naif. Terminal tidak ditanya jika mendukung grafik Sixels, atau berapa banyak piksel yang harus ditinggi setiap karakter, atau warna teks yang tepat.
Mesin Anda harus memiliki fontconfig, yang akan berlaku untuk Debian GNU/Linux dan turunannya, tetapi mungkin tidak benar secara universal. Selain itu, fontname harus dalam format fontconfig suka. Misalnya:
fonttable -f LTCCaslon # Works
fonttable -f "LTC Caslon" # Works
fonttable -f "LTC Caslon Swash Long Regular" # Works
Tapi, seperti yang terjadi:
fonttable -f Caslon # Does Not Work
fonttable -f "LTC Caslon Swash Long" # Does Not Work
Jika Anda tidak yakin dengan namanya, cobalah fc-list | grep -i caslon . Anda juga dapat menentukan nama file font secara langsung. Misalnya:
fonttable ~/.local/share/fonts/P22CezannePro.ttf
Beberapa font dekoratif dan ahli mendefinisikan mesin terbang yang tidak memiliki pemetaan ke codepoint unicode atau peta itu untuk penggunaan pribadi. Karakter -karakter itu tidak akan ditemukan oleh skrip ini. Misalnya:
fonttable -f AdobeWoodType # Shows no glyphs!
Namun, dengan beberapa upaya, seseorang dapat memindahkan mesin terbang tersebut ke titik kode unicode menggunakan program seperti FontForge.

Program dan font terminal yang berbeda akan memberi Anda hasil yang berbeda secara drastis.
Xxx todo
Bagian ini perlu diperbarui karena terminal yang diuji sekarang cukup tua.


GNOME-terminal-3.38.3 Menggunakan beberapa font menggunakan freetype. Untuk beberapa karakter, seperti ⑫ (nomor dua belas), mesin terbang terlalu luas untuk sel karakter dan tumpang tindih dengan buruk. Tampaknya tidak ada pengaturan untuk memberi tahu Gnome-terminal untuk menyusut atau memotong mesin terbang yang terlalu lebar.

Terminal Gnome memiliki sangat sedikit preferensi yang dapat diselesaikan pengguna, tetapi Anda dapat mengatur karakter "lebar ambigu" untuk menjadi lebar (dua sel) alih -alih sempit. Ini sedikit membantu, setidaknya pada tes penyiksaan ini.

Namun, mengatur lebar ambigu ke lebar bukanlah obat mujarab. Misalnya, jika mesin terbang digantikan oleh font dari rasio aspek yang sangat berbeda dari default Anda. Misalnya, inilah yang terjadi ketika font "terminal dec" dipilih (yang dua kali lebih tinggi dari lebar):

Perhatikan bahwa dengan font default ini, mesin terbang tumpang tindih meskipun lebar ambigu diatur ke lebar.
Seperti GNOME -terminal, Xterm juga menggunakan beberapa font ketika font antialiased (vektor) dipilih ( -fa Inconsolata -fs 18 ), diisi dengan font sistem lain jika font yang dipilih terlalu terbatas. Xterm juga dapat bekerja dengan font bitmaps, tetapi mereka sedikit lebih rumit.
Xterm hanya akan menggunakan satu font jika Anda menentukan font bitmap menggunakan -fn . Itu berarti Anda perlu menemukan satu font yang mencakup setiap bagian unicode yang Anda gunakan. Ini tidak selalu mudah.
Font Xterm default, yang disebut "tetap", tampaknya merupakan pilihan yang mengerikan karena memiliki sangat sedikit karakter Unicode. Namun, itu karena Xterm menggunakan versi Latin-1 secara default. Ada versi Unicode (10646) dari "tetap" yang tidak buruk dalam hal cakupan. "Fixed" juga hadir dalam versi luas untuk karakter Asia, yang Xterm secara otomatis mendeteksi dan digunakan. Jadi, bukan pilihan yang buruk, dan sudah dipasang sebelumnya.
xterm -fn '*fixed-medium-r-normal--20*10646*'

Xterm sudah mengisi mesin terbang yang hilang untuk Anda dengan menggunakan font lain saat Anda menentukan font yang dianutasi menggunakan -fa . (Gunakan -fs untuk menentukan ukuran titik). Catatan: Antialias adalah bagaimana xterm mengacu pada font vektor seperti truetype, opentype, dan tipe 1.
Sementara Xterm dan Gnome-terminal keduanya menggunakan FREETYPE untuk membuat font yang dianutasi, tidak seperti GNOME-terminal, Xterm menegakkan batas sel karakter dan tidak membiarkan mesin terbang tumpang tindih. Sebaliknya, mesin terbang yang terlalu lebar terpotong. Apakah ini lebih baik atau tidak masalah selera.

Perhatikan bahwa default Xterm untuk menggunakan warna font yang ditentukan oleh pengguna daripada warna yang dibangun ke font. Sekali lagi, ini adalah masalah rasa, tetapi perlu dicatat bahwa sebagian besar font emoji saat ini hanya dirancang dalam warna, sehingga font warna tunggal untuk rentang tertentu mungkin terlihat sudah ketinggalan zaman atau kehilangan mesin terbang.
Jika Anda ingin melihat font mana yang dimuat saat Anda menjalankan FontTable, atur variabel lingkungan XFT_DEBUG ke 3 sebelum menjalankan Xterm.
XFT_DEBUG=3 xterm -fa DroidSansMono -fs 24
Jika Anda ingin memaksa Xterm hanya menggunakan font yang Anda minta, Anda dapat melakukannya dengan mengatur sumber daya limitFontsets X ke 0.
xterm -fa DroidSansMono -xrm "XTerm*vt100.limitFontsets: 0"
Perhatikan bahwa Xterm akan berusaha untuk secara otomatis mendeteksi jika font Anda juga tersedia dalam versi ganda (untuk CJK). Jika tidak menemukannya, Anda dapat menentukan font "ganda" yang terpisah menggunakan -fd .
xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"
Perhatikan bahwa jika Anda tidak memiliki font tertentu yang diinstal, bahkan jika Anda menggunakan LimitFontsets: 0, Anda akan ditampilkan font pengganti. Sekali lagi, Anda dapat menggunakan xft_debug untuk mencari tahu apa yang sedang terjadi.
XFT_DEBUG=3 xterm -fs 24 -fa DroidSansMono -fd DroidSansFallback -xrm "XTerm*vt100.limitFontsets: 0"