
พิมพ์ตัวละคร unicode ทุกตัว ดูร่ายมนตร์ที่เป็นไปได้ทั้งหมดในเทอร์มินัลของคุณ
¹ดี ... ไม่ใช่ตัวละคร ทุกตัว เราไม่ต้องการรหัสควบคุมและเช่นนี้ดังนั้นอักขระในหมวดหมู่ C , M และ Z จะไม่ถูกพิมพ์ (ดูตารางของค่าหมวดหมู่ทั่วไปในตอนท้ายของสคริปต์)
หากคุณไม่มี /usr/share/unicode/UnicodeData.txt บนระบบของคุณเวอร์ชันที่แคชในสคริปต์นี้จะถูกใช้โดยอัตโนมัติ (v14.0.0, ปัจจุบัน ณ เดือนกันยายน 2564 จาก unicode.org)
ในขณะที่ Fonttable ส่งอักขระ Unicode ที่พิมพ์ได้ทั้งหมดไปยัง stdout ตัวละครที่แสดง จริง ขึ้นอยู่กับตัวอักษรที่คุณติดตั้งในระบบของคุณและหากเทอร์มินัลของคุณถูกตั้งค่าให้ใช้งาน
ทางเลือกหนึ่งสามารถระบุแบบอักษรเฉพาะที่ใช้ -f fontname เพื่อ จำกัด การแสดงผลเป็น glyphs ที่กำหนดไว้ในตัวอักษรนั้น (ต้องใช้กราฟิก FontConfig และ Sixel)
หมายเหตุ: ไฟล์ "unicodedata.txt" ของ Unicode Consortium ไม่ได้แสดงรายการอักขระ 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 นอกจากนี้ยังมีอักขระ CJK ที่รู้จักกันมากกว่า 70,000 ตัวในฐานข้อมูล UNIHAN
$ ./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 เป็นเหมือนตัวเลือกช่วง แต่จะแสดงเฉพาะ codePoints ที่กำหนดไว้ในแบบอักษรที่เฉพาะเจาะจง (และที่ทำเครื่องหมายเป็นอักขระปกติที่พิมพ์ได้ใน Unicode) ตัวอย่างเช่น:
fonttable -f NotoSans
แบบอักษรอาจถูกระบุโดยชื่อไฟล์:
fonttable -f /usr/share/fonts/X11/misc/neep-iso10646-1-10x20.pcf.gz
Fonttable ใช้กราฟิก Sixel เพื่อวาดตัวอักษรที่ร้องขอ ใช้ตัวเลือก -d FONT หากคุณต้องการใช้แบบอักษรที่เฉพาะเจาะจงเพื่อ จำกัด codepoints ที่จะแสดง แต่ยังคงแสดงในตัวอักษรเริ่มต้น
Bug: ปัจจุบันการจัดการ 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!
อย่างไรก็ตามด้วยความพยายามบางอย่างเราสามารถย้ายร่ายมนตร์ดังกล่าวไปยังจุดรหัส Unicode โดยใช้โปรแกรมเช่น Fontforge

โปรแกรมเทอร์มินัลและฟอนต์ที่แตกต่างกันจะให้ผลลัพธ์ที่แตกต่างอย่างมาก
xxx todo
ส่วนนี้จะต้องมีการทำซ้ำเนื่องจากเทอร์มินัลที่ทดสอบแล้วค่อนข้างเก่า


Gnome-terminal-3.38.3 ใช้แบบอักษรหลายแบบโดยใช้ Freetype สำหรับตัวละครบางตัวเช่น⑫ (วงกลมวงกลมสิบสอง) ร่ายมนตร์กว้างเกินไปสำหรับเซลล์ตัวละครและซ้อนกันไม่ดี ดูเหมือนว่าจะไม่มีการตั้งค่าที่จะบอก Gnome-terminal ให้หดตัวหรือตัดทุ่งออกกว้างมากเกินไป

เทอร์มินัล Gnome มีการตั้งค่าที่ผู้ใช้สามารถตั้งค่าได้น้อยมาก แต่คุณสามารถตั้งค่าตัวละคร "ความกว้างที่คลุมเครือ" ให้กว้าง (สองเซลล์) แทนที่จะแคบ สิ่งนี้ช่วยได้ค่อนข้างน้อยอย่างน้อยในการทดสอบการทรมานนี้

อย่างไรก็ตามการตั้งค่าความกว้างที่คลุมเครือเป็นกว้างไม่ใช่ยาครอบจักรวาล ตัวอย่างเช่นหาก Glyph ถูกแทนที่ด้วยตัวอักษรของอัตราส่วนที่แตกต่างกันมากจากค่าเริ่มต้นของคุณ ตัวอย่างเช่นนี่คือสิ่งที่เกิดขึ้นเมื่อเลือกแบบอักษร "DEC Terminal" (ซึ่งสูงเป็นสองเท่าเท่าที่กว้าง):

ขอให้สังเกตว่าด้วยตัวอักษรเริ่มต้นนี้ร่ายมนตร์จะทับซ้อนกันแม้ว่าความกว้างที่คลุมเครือจะถูกตั้งค่าให้กว้าง
เช่นเดียวกับ Gnome -terminal Xterm ยังใช้แบบอักษรหลายตัวเมื่อเลือกแบบอักษร antialiased (เวกเตอร์) ( -fa Inconsolata -fs 18 ) เติมด้วยแบบอักษรระบบอื่น ๆ หากฟอนต์ที่เลือกมี จำกัด เกินไป Xterm ยังสามารถทำงานกับบิตแมปแบบอักษรได้ แต่มันก็ค่อนข้างยุ่งยาก
XTERM จะใช้แบบอักษรเดียวเท่านั้นหากคุณระบุแบบอักษรบิตแมปโดยใช้ -fn นั่นหมายความว่าคุณจะต้องค้นหาแบบอักษรหนึ่งตัวที่ครอบคลุมทุกส่วนของ Unicode ที่คุณใช้ นี่ไม่ใช่เรื่องง่ายเสมอไป
ตัวอักษร XTERM เริ่มต้นที่เรียกว่า "แก้ไข" ดูเหมือนว่าเป็นตัวเลือกที่แย่มากเนื่องจากมีอักขระ Unicode น้อยมาก อย่างไรก็ตามนั่นเป็นเพราะ xterm ใช้เวอร์ชันละติน -1 โดยค่าเริ่มต้น มีเวอร์ชัน "คงที่" ของ Unicode (10646) ซึ่งไม่เลวในแง่ของความครอบคลุม "แก้ไข" ยังมาในเวอร์ชันกว้างสำหรับอักขระเอเชียซึ่ง XTERM ตรวจจับและใช้งานโดยอัตโนมัติ ดังนั้นไม่ใช่ตัวเลือกที่ไม่ดีและมันมาก่อนติดตั้ง
xterm -fn '*fixed-medium-r-normal--20*10646*'

XTERM เติมเต็มไปตามร่ายมนตร์ที่หายไปสำหรับคุณโดยใช้แบบอักษรอื่น ๆ เมื่อคุณระบุแบบอักษร antialiased โดยใช้ -fa (ใช้ -fs เพื่อระบุขนาดจุด) หมายเหตุ: Antialiased เป็นวิธีที่ XTERM อ้างถึงแบบอักษรเวกเตอร์เช่น Truetype, Opentype และ Type 1
ในขณะที่ Xterm และ Gnome-terminal ทั้งคู่ใช้ Freetype เพื่อแสดงผลแบบอักษร antialiased ซึ่งแตกต่างจาก Gnome-terminal Xterm บังคับใช้ขอบเขตของเซลล์อักขระและไม่ปล่อยให้ glyphs ซ้อนทับกัน แต่ร่ายมนตร์กว้างเกินไปถูกตัดทอน ไม่ว่าจะดีกว่าหรือไม่เป็นเรื่องของรสชาติ

โปรดทราบว่าค่าเริ่มต้น XTERT เพื่อใช้สีแบบอักษรที่ระบุโดยผู้ใช้มากกว่าสีที่สร้างขึ้นเป็นแบบอักษร อีกครั้งนี่เป็นเรื่องของรสนิยม แต่ควรสังเกตว่าฟอนต์อิโมจิส่วนใหญ่ในปัจจุบันได้รับการออกแบบ เฉพาะสีเท่านั้น ดังนั้นฟอนต์สีเดียวสำหรับบางช่วงอาจดูล้าสมัยหรือหายไปร่ายมนตร์
หากคุณต้องการดูว่าแบบอักษรใดที่กำลังโหลดอยู่ในขณะที่คุณใช้ Fonttable ให้ตั้งค่าตัวแปรสภาพแวดล้อม 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 จะพยายามตรวจสอบโดยอัตโนมัติว่าตัวอักษรของคุณพร้อมใช้งานในเวอร์ชันคู่ (สำหรับ CJK) หรือไม่ หากไม่พบคุณสามารถระบุแบบอักษร "doublesize" แยกต่างหากโดยใช้ -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"