Memo: Hotkeys in Thai locale for TextAdept

ไม่รู้มีใครใช้กับเขาหรือเปล่า Text editor ตัวโปรดของผมตัวนี้จุดเด่นคือ เล็ก เร็ว และ portable แต่ไม่ถึงกับ hard core ขนาดพวก Text-based UI text editor ยังมี GUI มีเมนู เปิดใช้หลายแทปได้ ดูได้หลายวิวพร้อมกัน ใช้เม้าส์ได้ ความสามารถในการจัดการข้อความก็ดี ทำ multiple edit, column edit ได้ มี syntax highlight, code completion, word completion, snippets, macro, run command ฯลฯ ไม่ต่างจากที่ text editor ส่วนใหญ่มี แถมยังปรับแต่งได้ด้วยการใช้ Lua กับ api ของตัว TextAdept หรือจะสร้างเป็นโมดูลเสริมก็ได้
เอาล่ะก่อนที่จะโฆษณาไปมากกว่านี้ก็มาถึงปัญหาที่เป็นที่มาของบทความนี้เลยแล้วกันครับ

สำหรับคนที่ใช้ภาษาอังกฤษล้วนคงไม่มีปัญหานี้แต่สำหรับคนไทยอย่างเราๆ ที่ต้องคอยสลับภาษาไปมาแล้วถ้าเป็นในโปรแกรมอื่นทั่วๆ ไปก็สามารถใช้ short cut หรือ hotkey ได้ปกติไม่ว่าจะอยู่ในภาษาไหนแต่ตัว TextAdept มันไม่รู้จักคีย์ภาษาอื่น ท้าวความก่อนเวลากำหนด hotkey ต่างๆ จะใช้รูปแบบดังนี้
keys[key_symbol] = function เช่น ctrl+alt+r ก็ใช้ 'car' ซึ่งจะต้องแมพสัญลักษณ์กับคีย์โค้ดเช่น
KEYSYMS[0xFFFF] = 'del' หรือ KEYSYMS[13] = '\n' เป็นต้น ซึ่ง table นี้อยู่ในโมดูล keys ของ TextAdept เราสามารถเพิ่มค่าได้ในไฟล์ keys.lua ได้เลยหรือไม่ก็ใส่ค่าใน init.lua ซึ่งปลอดภัยและแก้ไขได้สะดวกกว่าโดยเรียกผ่าน _G.keys.KEYSYMS[] ดังนี้

  1. --[[
  2. สำหรับโปรแกรม TextAdept
  3. โค้ดช่วยให้ใช้ short cut ได้เวลาสลับภาษาเป็นภาษาไทยเอาไปใส่ใน init.lua ในโฟลเดอร์ .textadept
  4. ยังใช้ไม่ได้ทุกคำสั่งเช่น 'Z' แป้นภาษาไทยเป็น '(' ตรงกับตัว '(' ในแป้นภาษาอังกฤษทำให้สับสนให้เปลี่ยนไปใช้คีย์อื่น
  5. ที่ยังว่างอยู่แทนเช่นเปลี่ยนจาก ctrl+Z ไปเป็น alt+z แทนแล้วสร้าง short cut ใหม่เป็น
  6. keys['az'] = คำสั่งนั้นๆ
  7. ส่วนคีย์อื่นที่เป็นตัวพิมพ์ใหญ่เช่น ctrl+S ก็ต้องสร้าง short cut ใหม่เพราะของเดิมใช้ 'cS' แต่ในแป้นภาษาไทยต้องใส่เป็น
  8. ctrl+shift+S คือใช้ 'csS'
  9. อีกปัญหาใน linux คือคีย์ที่ใช้ alt+shift หรือ ctrl+alt+shift ใช้ไม่ได้ต้องไปเปลี่ยนใช้คีย์อื่นแทน
  10. ไม่แน่ใจว่าเปลี่ยนปุ่มสลับภาษาเป็นคีย์อื่นแทนจะใช้ได้หรือเปล่า
  11. ]]
  12. _G.keys.KEYSYMS[0xdbf] = 'a'
  13. _G.keys.KEYSYMS[0xdd4] = 'b'
  14. _G.keys.KEYSYMS[0xde1] = 'c'
  15. _G.keys.KEYSYMS[0xda1] = 'd'
  16. _G.keys.KEYSYMS[0xdd3] = 'e'
  17. _G.keys.KEYSYMS[0xdb4] = 'f'
  18. _G.keys.KEYSYMS[0xde0] = 'g'
  19. _G.keys.KEYSYMS[0xde9] = 'h'
  20. _G.keys.KEYSYMS[0xdc3] = 'i'
  21. _G.keys.KEYSYMS[0xde8] = 'j'
  22. _G.keys.KEYSYMS[0xdd2] = 'k'
  23. _G.keys.KEYSYMS[0xdca] = 'l'
  24. _G.keys.KEYSYMS[0xdb7] = 'm'
  25. _G.keys.KEYSYMS[0xdd7] = 'n'
  26. _G.keys.KEYSYMS[0xdb9] = 'o'
  27. _G.keys.KEYSYMS[0xdc2] = 'p'
  28. _G.keys.KEYSYMS[0xde6] = 'q'
  29. _G.keys.KEYSYMS[0xdbe] = 'r'
  30. _G.keys.KEYSYMS[0xdcb] = 's'
  31. _G.keys.KEYSYMS[0xdd0] = 't'
  32. _G.keys.KEYSYMS[0xdd5] = 'u'
  33. _G.keys.KEYSYMS[0xdcd] = 'v'
  34. _G.keys.KEYSYMS[0xde4] = 'w'
  35. _G.keys.KEYSYMS[0xdbb] = 'x'
  36. _G.keys.KEYSYMS[0xdd1] = 'y'
  37. _G.keys.KEYSYMS[0xdbc] = 'z'
  38. _G.keys.KEYSYMS[0xdc4] = 'A'
  39. _G.keys.KEYSYMS[0xdda] = 'B'; keys['csB'] = textadept.run.build
  40. _G.keys.KEYSYMS[0xda9] = 'C'
  41. _G.keys.KEYSYMS[0xdaf] = 'D'; keys['csD'] = textadept.editing.select_word
  42. _G.keys.KEYSYMS[0xdae] = 'E'
  43. _G.keys.KEYSYMS[0xde2] = 'F'
  44. _G.keys.KEYSYMS[0xdac] = 'G'; keys['csG'] = ui.find.find_prev
  45. _G.keys.KEYSYMS[0xde7] = 'H'
  46. _G.keys.KEYSYMS[0xdb3] = 'I'
  47. _G.keys.KEYSYMS[0xdeb] = 'J'; keys['csJ'] = textadept.editing.join_lines
  48. _G.keys.KEYSYMS[0xdc9] = 'K'
  49. _G.keys.KEYSYMS[0xdc8] = 'L'; keys['csL'] = textadept.file_types.select_lexer
  50. --_G.keys.KEYSYMS[] = 'M'
  51. _G.keys.KEYSYMS[0xdec] = 'N'; keys['csN'] = textadept.editing.select_line
  52. _G.keys.KEYSYMS[0xdcf] = 'O'; keys['csO'] = io.reload_file
  53. _G.keys.KEYSYMS[0xdad] = 'P'; keys['csP'] = textadept.editing.select_paragraph
  54. _G.keys.KEYSYMS[0xdf0] = 'Q'; keys['csS'] = io.save_file_as
  55. _G.keys.KEYSYMS[0xdb1] = 'R'; keys['csR'] = textadept.run.compile
  56. _G.keys.KEYSYMS[0xda6] = 'S'
  57. _G.keys.KEYSYMS[0xdb8] = 'T'
  58. _G.keys.KEYSYMS[0xdea] = 'U'
  59. _G.keys.KEYSYMS[0xdce] = 'V'; keys['csV'] = textadept.editing.paste_reindent
  60. --_G.keys.KEYSYMS[] = 'W'
  61. --_G.keys.KEYSYMS[] = 'X'
  62. _G.keys.KEYSYMS[0xded] = 'Y'
  63. --_G.keys.KEYSYMS[] = 'Z'
  64. _G.keys.KEYSYMS[0xdb5] = '9'
  65. _G.keys.KEYSYMS[0xda8] = '0'
  66. _G.keys.KEYSYMS[0xda2] = '-'
  67. _G.keys.KEYSYMS[0xdaa] = '='
  68. _G.keys.KEYSYMS[0xda5] = '|'
  69. _G.keys.KEYSYMS[0xdc1] = ','
  70. _G.keys.KEYSYMS[0xde3] = '.'
  71. _G.keys.KEYSYMS[0xdbd] = '/'
  72. _G.keys.KEYSYMS[0xdf6] = '('
  73. _G.keys.KEYSYMS[0xdb0] = '{'
  74. _G.keys.KEYSYMS[0xdba] = '['
  75. _G.keys.KEYSYMS[0xdb2] = '<'
  76. _G.keys.KEYSYMS[0xdcc] = '>'
  77. _G.keys.KEYSYMS[0xda7] = "'"

แค่นี้ก็สามารถใช้ hotkeys ได้ส่วนใหญ๋แล้วครับขอให้สนุกกับการเขียนโค้ด
Cr. https://foicica.com/lists/code/201309/1152.html

ความคิดเห็น