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