ปลดล็อกความเทพของคีย์บอร์ดแมค (สำหรับ Developer) ด้วย Karabiner-Elements และ Goku
This heavily mess up keyboard usage. You have been warned.
บทความนี้เขียนหลังจาก Apple เปิดตัว MacBook Pro 16" ที่มาพร้อมกับ Keyboard แบบเก่า และเจียดพื้นที่บน Touch Bar เล็กน้อยกลับมาให้ปุ่ม Escape สร้างความฮือฮา (?) ให้กลับเหล่าผู้ใช้แมค และคนรอแซะในระดับนึง
แต่มันไม่มีผลกับผม เพราะผมแทบไม่ได้แตะปุ่ม Escape อีกเลยหลังจากได้รู้จักกับ Karabiner-Elements

Karabiner-Elements
Karabiner-Elements (ชื่อเก่าคือ Karabiner, KeyRemap4MacBook) เป็นโปรแกรมบนแมคที่ใช้ Remap ปุ่มได้แบบ Low-level มากกว่าโปรแกรมทั่วไป เพราะมันรวมทำงานเกือบถึงระดับ Hardware ซึ่งรวมไปถึงปุ่ม Modifiers ต่างๆ เช่น Control, Shift, Command, Capslock เป็นต้น ดาวน์โหลดได้ที่นี่ https://pqrs.org/osx/karabiner/
หน้าตาของ Karabiner-Elements ในโหมดธรรมดาจะ Remap จาก From key
ไป To key
เฉยๆ ไม่มีอะไรซับซ้อน ตามภาพนี้

ความพิเศษของมันจะอยู่ในโหมด Complex modifications
ที่เป็นจุดขายหลักของโปรแกรมนี้เลย (แต่คนไม่ค่อยนิยม เพราะใช้ยากและซับซ้อนตามชื่อ)

ตัว Rule ต่างๆ จะอยู่ในรูปแบบของ JSON และรวมอยู่ใน ~/.config/karabiner/karabiner.json
เราสามารถเขียนเองได้โดยดูจาก Document บนเว็บ https://pqrs.org/osx/karabiner/json.html หรือดาวน์โหลด Rule ของคนอื่นที่ทำมาเสร็จแล้วก็ได้ https://pqrs.org/osx/karabiner/complex_modifications/

สิ่งที่ตัว Rule ทำได้นั้นมีเยอะมาก อันที่ผมชอบใช้ที่สุดจะเป็นเรื่องของการทำให้ปุ่ม Modifiers ต่างๆ ที่ปกติต้องกดควบคู่กับปุ่มอื่น มี Action ในตัวมันเองเมื่อกดเดี่ยวๆ เช่น :
- Shift : เมื่อกดค้าง เป็น Shift ตามปกติ แต่ถ้ากด Shift แล้วปล่อยทันที จะกลายเป็น
(
สำหรับ Shift ซ้าย และเป็น)
สำหรับ Shift ขวา ใช้บ่อยมากๆ ตอนเขียนโค้ด

- Command ⌘ ซ้าย : กดแล้วปล่อยเป็น Underscore
_
- Command ⌘ ขวา : กดแล้วเป็น Backspace
- Backspace : กดแล้วไม่ติด บังคับให้ใช้ Command ขวาแทน
ใช้นิ้วก้อยลบไม่ถนัด ปรับเป็นนิ้วโป้งชะเลย 😏

- CapsLock : Hyper เมื่อกดค้าง, Escape เมื่อกดเดี่ยว (ใช้กับ Vim)
Hyper คือปุ่มของ Space-cadet Keyboard ซึ่งมี Modifiers เยอะกว่าคีย์บอร์ดในปัจจุบัน เลยถือว่า Hyper
= Shift
+ Control
+ Alt
+ Command
ก็คือกด Modifiers ทุกปุ่มเลยนั่นเอง แล้วเราค่อยเอา Hyper ไปใช้ในโปรแกรม Remap ปุ่มอื่นๆ อีกที เช่น Alfred, BetterTouchTool, Keyboard Maestro ส่วนตัวผมเอาไปใช้ในเซ็ต Shortcut เพื่อเรียกแอปต่างๆ ที่ใช้บ่อย

- SuperDuper mode : ส่วนตัวใช้โหมดนี้มาหลายปีแล้ว ทำให้เรากด Arrow keys ได้ด้วยการกดปุ่มใน Home row เท่านั้น ได้มาจากโพส “Toward a more useful keyboard” ของ Jason Rudolph ตอนนี้กลายสภาพเป็น Github Repo ไปแล้ว https://github.com/jasonrudolph/keyboard
การเปิดโหมดนี้จะเป็นการกดปุ่ม S กับ D พร้อมกันค้างเอาไว้ แล้วปุ่มอื่นๆ บนแป้นเหย้า (ศัพท์ดักคนแก่) จะกลายเป็นปุ่มที่ใช้ในการ Navigate หมดเลย

- Z-Dev mode : อันนี้คิดขึ้นมาเอง เพราะบางครั้งเขียน Elixir แล้วพบว่าพิมพ์
|>
ลำบาก เลยทำขึ้นมา แต่ยังใช้ไม่บ่อยเท่าไร อาจจะต้องปรับอีก
กด Z ค้างไว้แล้วปุ่มทางขวามือจะเป็นตัวอักษรที่ใช้บ่อยหน่อยในการเขียนโค้ด
Goku
ข้อเสียของ Karabiner-Elements อย่างนึงคือ Configuration ที่ยืดยาวและปรับแต่งต่อยอดได้ยาก อย่าง JSON ไฟล์ของผมก็ยาวเกิน 3000 บรรทัดไปแล้ว

เลยมีคนเขียน Goku ขึ้นมา ซึ่งมันจะทำให้เราเขียน Config ได้ในไม่กี่บรรทัด วิธีโหลดและติดต้ังดูได้ที่นี่ https://github.com/yqrashawn/GokuRakuJoudo
อย่าง Config ของผมทั้งหมดเมื่อแปลงมาเป็น karabiner.edn แล้วเหลือแค่ 100 กว่าบรรทัดเท่านั้น เวลาแก้ไขก็แก้ได้ที่ไฟล์นี้เลย แล้วตัว Goku จะแปลงเป็น karabiner.json ให้โดยอัตโนมัติ

Make your keyboard “your” keyboard
ผมรู้สึกมาตลอดว่า Keyboard Layout เป็นสิ่งที่หยุดพัฒนามานานแล้ว การที่เราปรับแต่งมันให้เข้ากับการใช้งานของเราเองจึงเป็นสิ่งที่ควรจะทำ โดยเฉพาะกับคนที่ใช้มันทำงานแทบทุกวัน วันละหลายชั่วโมง การปรับแต่งคีย์บอร์ดจะทำให้เรามี Workflow ในการทำงานที่ราบรื่นขึ้นเยอะ
ปรับเยอะขนาดนี้ แล้วจะไปใช้คอมคนอื่นได้เหรอ?
ขอบคุณสำหรับคำถาม (เจอบ่อย) แต่ทำใจได้ตั้งแต่เปลี่ยนมาใช้ Colemak กับ Pattachote แล้ว แถมคนอื่นก็จะมาใช้แมคเราไม่ได้เลยด้วย 55555
ถ้าชอบฝากกด Clap นะครับ 👏 แล้วเจอกันใหม่โพสหน้า