Theppitak's blog

My personal blog.

21 มิถุนายน 2554

Thai Numpad Experiment

จาก กรณีฟอนต์ Sarabun IT9 ที่ผมได้ทิ้งท้ายไว้เรื่องวิธีแก้ปัญหาที่ถูกหลักการ โดยควรแก้ที่ระบบป้อนข้อความ (input method) ผมจึงทดลองดัดแปลงผังแป้นพิมพ์ไทยให้สามารถล็อคแป้นตัวเลข (numpad) ให้เป็นเลขไทยได้

เพื่อกำหนด spec เบื้องต้น ผมจึงได้ขอความเห็นสมาชิก DebianClub Gang ใน Facebook ดู ซึ่งมีความเห็นทั้งแบบที่เห็นว่าควรให้แป้นตัวเลขพิมพ์เลขไทยในโหมดภาษาไทยไปเลย, แบบที่เสนอว่าควรให้มีตัวเลือก config ผังแบบปกติและแบบพิมพ์เลขไทย และแบบที่เสนอว่าควรให้มีปุ่มสำหรับล็อคตัวเลขไทย

ก็ทดลองทำทีละขั้น ได้ผังรุ่นต่าง ๆ ดังนี้:

  1. สร้างผังอีกชุดหนึ่งต่างหาก (basic_thaipad, pat_thaipad, tis_thaipad) ซึ่งแป้นตัวเลขจะกดได้เลขไทยเสมอในโหมดภาษาไทย วิธีนี้ผู้ใช้ต้องเลือก layout พิเศษเอาเองตอน config
  2. ใช้ XKB option "keypad:aldig" ในการเพิ่มการป้อนเลขไทยเข้าในผังชุดเดิม แทนการเปลี่ยน layout วิธีนี้ผู้ใช้ไม่ต้องแก้ config ส่วน layout แต่ต้องเพิ่ม XKB option เอา
  3. กำหนดปุ่ม ScrollLock เพื่อใช้ล็อคแป้นตัวเลขในโหมดภาษาไทยให้กดได้เลขไทย ถ้าไม่ล็อคก็ได้เลขอารบิกเหมือนเดิม (เสนอโดย Dr.Mamazaki J. Kasookie) วิธีนี้ผู้ใช้ไม่ต้อง config อะไรเพิ่มเลย

รุ่นสุดท้ายนี้เอง ที่เป็นรุ่นที่เริ่มเผยแพร่ให้ทดลองใช้เพื่อขอความเห็น โดยได้แปะประกาศไว้ที่ debianclub

รายละเอียดทางเทคนิคของผังนี้ก็คือ ต้องใช้ปุ่มแบบ 8 ระดับ โดยต้องเพิ่ม type ของปุ่มแบบ "EIGHT_LEVEL_KEYPAD" ที่ยังไม่มีข้อกำหนดใน XKB ปัจจุบัน

สาเหตุที่ต้องใช้ปุ่มแบบ 8 ระดับก็เพราะจำเป็นต้องหลบปุ่มระดับ 3 ที่ใช้ในผัง tis ที่ใช้ป้อนอังคั่นคู่ (๚) ซึ่งถ้ากำหนดให้ใช้เลขไทยที่ระดับ 3 แล้วใช้ ScrollLock ล็อคที่ระดับ 3 ก็จะทำให้ปุ่ม [น/ฯ] ถูกล็อคเป็น [๚] ตลอด ทำให้ป้อน น และ ฯ โดยไม่ปลด ScrollLock ไม่ได้ และจะใช้งานในกรณีปกติไม่สะดวก ส่วนระดับ 4 นั้น มีไว้สำหรับระดับ 3 ที่มีการกด Shift ดังนั้นจึงต้องเลื่อนขึ้นไปใช้ระดับ 5 ซึ่งจะมีในข้อกำหนดของปุ่มแบบ 8 ระดับที่เริ่มมีใน X protocol ตั้งแต่ xorg 7.0.8 เป็นต้นมา

และเนื่องจาก XKB มีแต่ข้อกำหนด 8 ระดับสำหรับปุ่มปกติเท่านั้น ยังไม่มีข้อกำหนดสำหรับสำหรับ numpad จึงต้องกำหนดขึ้นเอง ซึ่งผมออกแบบไว้อย่างนี้ ซึ่งอาจตรงตามความต้องการของกรณีเรา แต่ภาษาอื่นจะว่าอย่างไรคงต้องถกกันอีกที:

ShiftNumLockLevel3Level5ผลลัพธ์
nonononolevel 1
yesnononolevel 2
noyesnonolevel 2
yesyesnonolevel 1
nonoyesnolevel 3
yesnoyesnolevel 4
noyesyesnolevel 3
yesyesyesnolevel 4
nononoyeslevel 1
yesnonoyeslevel 5
noyesnoyeslevel 5
yesyesnoyeslevel 1
nonoyesyeslevel 6
yesnoyesyeslevel 7
noyesyesyeslevel 7
yesyesyesyeslevel 6

หลักการคือ:

  • ปุ่ม NumLock จะใช้สลับโหมดระหว่างตัวเลข (level 2-7) กับลูกศร (level 1) ถ้า NumLock ล็อคอยู่ ปุ่ม numpad จะได้ตัวเลข แต่ถ้า NumLock ไม่ล็อค numpad จะกลายเป็นปุ่มลูกศร
  • ปุ่ม Shift ใช้เปลี่ยนปุ่ม numpad ให้เป็นโหมดตัวเลข มีค่าเท่ากับการล็อค NumLock แต่ถ้า NumLock กำลังล็อคอยู่ ปุ่ม Shift จะมีผลยกเลิก NumLock ซึ่งนี่เป็นพฤติกรรมปกติของ XKB
  • ปุ่ม Level3 (ปกติจะใช้ Right_Alt) จะยกแคร่ปุ่ม numpad ขึ้นสู่ระดับ 3 และถ้ามีการกด Shift ร่วมด้วย ก็จะยกแคร่ขึ้นสูร่ะดับ 4 ส่วนปุ่ม NumLock ไม่มีผลใด ๆ กับระดับ 3 ซึ่งนี่ก็เป็นพฤติกรรมปกติของ XKB เช่นกัน (นัยว่าระดับ 3 มักเป็นการยกแคร่ชั่วคราว ไม่ใช่การล็อค จึงมีผลทับการล็อคของ NumLock)
  • ปุ่ม Level5 (ในกรณีของเราใช้ ScrollLock) จะล็อคปุ่ม numpad ไว้ที่ระดับ 5 แต่จะมีผลหลังพิจารณา NumLock/Shift แล้วเท่านั้น การให้ NumLock มีความสำคัญสูงกว่าก็เพื่อความสะดวกในการสลับไปมาระหว่างการป้อนตัวเลขกับการใช้ปุ่มลูกศรนั่นเอง
  • ในระดับ 5 นี้ ปุ่ม Level3 จะมีผลในการยกแคร่ปุ่ม numpad จากระดับ 1 (NumLock ไม่ล็อค) ขึ้นสู่ระดับ 6 และจากระดับ 5 (NumLock ล็อคอยู่) ขึ้นสู่ระดับ 7 ตามลำดับ
  • ระดับ 8 ยังไม่มีที่ใช้

การกำหนด XKB type ของปุ่ม ต้องกำหนดไว้ละเอียดเพื่อ (พยายาม) ให้ครอบคลุมกรณีของภาษาต่าง ๆ แต่ในการกำหนดผังของเรา เราก็เพียงกำหนดระดับการยกแคร่ของปุ่ม numpad ง่าย ๆ แบบนี้:

  • ระดับ 1: เป็นปุ่มลูกศร, Home, End, PgUp, PgDn, Ins, Del
  • ระดับ 2: เป็นเลขอารบิก, จุดทศนิยม
  • ระดับ 3-8: เป็นเลขไทย, จุดทศนิยม

แต่ปุ่ม 8 ระดับนี้ จะมีผลเฉพาะเมื่ออยู่ในโหมดภาษาไทยเท่านั้น ส่วนเมื่ออยู่ในโหมดภาษาอังกฤษ ก็จะมีเพียง 2 ระดับแรกเท่านั้นตามปกติ

ดังนั้น โดยสรุปสำหรับผู้ใช้ในกรณีใช้งานปกติก็คือ:

NumLockภาษาScrollLockผลลัพธ์
ไม่ล็อค**ลูกศร
ล็อคUS*เลขอารบิก
ล็อคTHไม่ล็อคเลขอารบิก
ล็อคTHล็อคเลขไทย

หากต้องการทดสอบ ผม build deb สำหรับ xkb-dataเอาไว้ที่ debclub repository โดยอ่านข้อมูลสรุปสำหรับผู้ใช้ได้ที่ บทความที่ debianclub

อย่างไรก็ดี การใช้งานอาจเกิดปัญหากับการใช้งาน IM module ของ GTK+ บางตัว กล่าวคือ:

  • ถ้าใช้ X Input Method (ค่าปริยาย) จะใช้ผังแป้นพิมพ์ใหม่นี้ได้ทันที
  • ถ้าใช้ Thai-Lao input method (มีมาใน GTK+ ให้เลือกได้) จะต้องใช้ GTK+ 2 และ GTK+ 3 ที่แพตช์แก้บั๊กแล้วจาก debclub repo จนกว่าบั๊ก GNOME #652720 จะแก้ไขที่ต้นน้ำ
  • ถ้าใช้ Thai (libthai) จากแพกเกจ gtk-im-libthai หรือ gtk3-im-libthai จะต้องเป็นรุ่น 0.2.0 ขึ้นไป ขณะที่เขียนนี้ได้ upload เข้า unstable (sid) แล้ว แต่ยังต้องรอครบกำหนดจึงจะย้ายเข้า testing (wheezy)

ดังนั้น สำหรับตอนนี้จึงขอแนะนำให้ติดตั้งผ่าน debclub repository จะสะดวกที่สุดครับ ทดลองแล้วต้องการปรับแก้อะไรก็แนะนำเข้ามาได้ครับ ถ้าใช้การได้ดี ก็จะได้ผลักดันแพตช์ต่าง ๆ เข้าที่ต้นน้ำเพื่อให้มีผลกับทุก distro ต่อไป

ป้ายกำกับ: , , , ,

5 ความเห็น:

  • 21 มิถุนายน 2554 เวลา 22:15 , Blogger Gowza แถลง…

    อันนี้ออกแบบมาสำหรับ linux อย่างเดียวหรือเปล่าครับ?

    เพราะถ้ามีคนทำผังแบบนี้มาสำหรับ Windows อาจจะมีปัญหา เพราะ MS Excel บน Windows ปุ่ม Scroll Lock จะเป็นการเลือกระหว่าง:
    - การให้ลูกศรเลื่อนหน้าจอ, กับ
    - การให้ลูกศรเลื่อน Cell ที่ถูกเลือก

    Caps Lock แทนที่ Scroll Lock น่าจะดีกว่าไหมครับ? อันนี้จะมีปัญหาทางเทคนิคหรือเปล่าครับ?

    ผมลองเสนอความคิดเห็นมาเฉยๆ น่ะครับ ผมไม่ได้เป็นผู้ใช้แต่อย่างใด

     
  • 21 มิถุนายน 2554 เวลา 22:45 , Blogger Thep แถลง…

    ตอนนี้ทดลองบนลินุกซ์ก่อนครับ เรื่องวินโดวส์ยังไม่ได้คิด แต่ถ้าเป็นที่ยอมรับแล้วมีนักพัฒนาทำบนวินโดวส์ด้วยก็เป็นอีกเรื่องหนึ่ง

    เรื่องใช้ ScrollLock เข้าโหมดเลื่อนหน้าจอ ฟังดูแล้วเหมือนจะเป็นหน้าที่ของ "Scroll" lock จริง ๆ นะครับ ไม่แน่ใจว่ามี app อื่นที่ทำแบบนี้อีกหรือเปล่า

    ใช้ CapsLock ก็ไม่ใช่เป็นไปไม่ได้ครับ แต่ประเด็นก็คือ ปกติ CapsLock จะใช้ล็อคยกแคร่สำหรับภาษาอังกฤษ ถ้า overload การล็อคเลขไทยเข้าไปด้วยจะซ้ำซ้อนกัน ทำให้เวลาที่ผู้ใช้สลับภาษาไปโหมดอังกฤษจะคีย์ได้แต่ตัวพิมพ์ใหญ่ ต้องปิด CapsLock เพิ่มอีกขั้นตอนหนึ่ง น่าจะทำให้ทำงานยุ่งยากขึ้นครับ

     
  • 22 มิถุนายน 2554 เวลา 21:36 , Blogger Gowza แถลง…

    เห็นด้วยครับ การใช้ Caps Lock ทำให้ยุ่งยากกว่าจริง

     
  • 27 ธันวาคม 2554 เวลา 17:19 , Blogger นาว แถลง…

    มีโปรแกรมพิมพ์ดีดีภาษาพม่าไหมครับ
    อยากพิมพ์เป็น

     
  • 28 ธันวาคม 2554 เวลา 09:40 , Blogger Thep แถลง…

    ถ้าใช้ลินุกซ์ก็มี keyboard layout ภาษาพม่าอยู่แล้วครับ ชื่อว่า "mm" อาจจะตั้งค่าจาก control panel ได้เลย หรือถ้าต้องการหรูกว่านั้น พม่าเขามี ibus engine สำหรับภาษาพม่าเลยครับ ผมเคยพูดถึงไว้นิดหน่อยที่นี่:

    http://thep.blogspot.com/2011/09/yangon-visit.html

     

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem