xterm ใน cygwin, UTF-8 กับฟอนต์ TrueType ภาษาไทย
www.tanabutr.co.th/photobook
วันนี้ได้ทำอะไรบางอย่างกับข้อมูลที่เก็บอยู่ใน MySQL เป็นภาษาไทยลงรหัสแบบ UTF-8. เวลาทดสอบผมก็ใช้ xterm ที่มีอยู่ใน cygwin เป็นตัวทดลอง. มันเป็นความเคยชินอย่างหนึ่งคือปรกติจะเปิด terminal ของ cygwin ซึ่งเหมือน command prompt ไว้ตัวหนึ่งแล้วเรียก xterm ตามมาใช้อีกตัว. แล้วก็จาก xterm ตัวนี้แหละที่ใช้ ssh ต่อไปที่เครื่องลินุกซ์เครื่องอื่นซึ่งอาจจะเป็น colinux หรือเครื่องลินุกซ์จริงๆ (พูดเหมือนกับว่า colinux เป็นลินุกซ์ปลอม).
ถ้ารัน xterm เฉยๆไม่มีตัวเลือกอะไรแล้วลอง query ข้อมูลที่เป็น UTF-8 ดูจะดูแปลกๆ
ถ้าจะใส่ตัวเลือกก่อนรัน xterm ก็ได้แต่ไหนๆก็ไหนๆแล้วทำตอนนี้เลยคือ กดคีย์ Ctrl ค้างไว้แล้วคลิ้กเมาส์ขวาของ xterm ก็จะมีเมนูโผล่มา. แล้วเลือก UTF-8 เพื่อที่จะให้เทอร์มินอลแสดงอักขระที่อยู่ในรูปของ UTF-8 ได้.
ที่นี้ลองใหม่ก็จะเห็นว่าแสดงภาษาไทยที่เป็น UTF-8 ได้แล้ว
ดูตรงภาษาไทยแล้วก็สวยดี. จริงๆแล้วก็ทำอย่างนี้อยู่หลายครั้งจนวันนี้เอะใจเหลือบไปเห็น "TrueType Fonts" ซึ่งเป็นสีเทาๆไม่ให้กดตรงเมนู. โอ, เข้าทางเลย. เมื่อปีที่แล้วมั้งที่เขียนเรื่องดูโปรแกรมมาตรฐานเก่าๆในระบบ X วินโดว์อีกครั้ง, มันมีตัวเลือก -fa FontName. ก็เข้าใจแล้วว่ามันใช้ TrueType ได้.
$ xterm -fa Tahoma
ก็นึกว่า Tahoma แต่ลองแสดงภาษาไทย, ทำอย่างไรก็ไม่ออก. เลยต้องไปเช็คฟอนต์ดู. ใช้ xfd -fa Tahoma แต่มันกลับกลายเป็นว่าใช้ฟอนต์ Bitstream Vera Sans แทน. ก็เข้าใจแล้วว่า fontconfig มันไม่รู้จัก Tahoma เลยจับ Bitstream Vera Sans มาให้แทน. ลองตรวจด้วย fc-list ก็ยิ่งเห็นชัดว่าไม่มี Tahoma อยู่ในรายการ.
$ fc-list.exe Luxi Serif:style=Regular Utopia:style=Bold Italic Nimbus Sans L:style=Regular Italic Bitstream Vera Sans Mono:style=Bold Luxi Serif:style=Bold Bitstream Vera Sans:style=Oblique Nimbus Sans L:style=Bold Luxi Mono:style=Bold Utopia:style=Bold Bitstream Vera Sans:style=Roman Bitstream Charter:style=Bold Italic Luxi Sans:style=Bold Nimbus Roman No9 L:style=Regular Courier:style=Bold Italic Luxi Sans:style=Regular Nimbus Sans L:style=Regular Courier:style=Regular Cursor:style=Regular Nimbus Roman No9 L:style=Medium Italic Courier 10 Pitch:style=Bold Luxi Sans:style=Bold Oblique Nimbus Mono L:style=Regular Oblique Bitstream Vera Serif:style=Bold Luxi Mono:style=Bold Oblique Courier:style=Bold Utopia:style=Regular Nimbus Mono L:style=Bold Bitstream Charter:style=Bold
ง่ายๆสุดคืออาจจะก็อปปี้ฟอนต์ Tahoma ที่อยู่ที่ /cygdrive/c/Windows/Fonts/ มาใส่ในไดเรกทอรี ~/.fonts แล้วรัน fc-cach-fv ต่อก็ได้. แต่จะเอาให้บ้ากว่านั้นก็ได้แบบนี้
$ cd $ ln -s /cygdrive/c/WINDOWS/Fonts .fonts $ runas /user:poonlap fc-cache password: $ xterm -fa Tahoma
รันคำสั่งตามตัวอย่างแล้วจะช้ามาก. ถ้าจะให้ดีก็อปปี้เอาดีกว่า. โอเค, ลองใช้ xterm กับ Tahoma แล้วปรากฏว่าไม่สวยมากๆ.
ฟอนต์ Tahoma จะดูดีเฉพาะบนเว็บ. คราวนี้เลยต้องพึ่งฟอนต์ TlwgMono ที่เคยสร้างไว้อยู่ใน Thaifont-scalable. น่าจะเป็นฟอนต์แบบ TrueType ที่แสดงบนเทอร์มินอลได้ดีทีเดียวในขณะนี้ (เพราะไม่มีใครนิยมสร้างฟอนต์ monospace กัน). ก็อปปี้ TlwgMono*.ttf มาไว้ที่ ~/.fonts แล้วก็จัดการตอนที่เขียนไปแล้ว.
$ xterm -u8 -fa TlwgMono &
แล้วก็จะใช้ xterm กับ UTF-8 กับ TrueType ฟอนต์ภาษาไทยได้.
อ่านเพิ่มเิติมเรื่องเกี่ยวกับฟอนต์ได้ที่เอกสารประกอบสัมมนา TLUG เดือนมิถุนาย 2548