Readline ยังให้คุณสามารถจับคู่ (Map) Keybinding (การผูกคีย์) แบบกำหนดเอง (Custom) ได้ โดยการแก้ไข ไฟล์การกำหนดค่า .inputrc ในไดเรกทอรี Home ของคุณ
ต่อไปนี้คือ 2 ประเภทของ Custom keybindings ที่คุณสามารถกำหนดได้:
- Macros (แมโคร)
- Functions (ฟังก์ชัน)
Macros (แมโคร)
คุณสามารถกำหนด Keybinding ที่เมื่อรัน จะ เติมสตริงตัวอักษร (String of characters) ที่ตำแหน่งเคอร์เซอร์ (Cursor) ปัจจุบัน เพื่อทำเช่นนี้ ให้เพิ่มบรรทัดต่อไปนี้ในไฟล์ .inputrc (หรือสร้างไฟล์ถ้ายังไม่มี):
<key combination>: "<string of characters>"
เช่น สมมติว่าผมพบว่าตัวเอง Redirect (เปลี่ยนทิศทาง) เอาต์พุทไปไฟล์ "~/debug_output.txt" บ่อยครั้ง ผมสามารถกำหนด Macro ใน .inputrc โดยเพิ่มบรรทัดนี้:
Control-g: " > ~/debug_output.txt"
ตอนนี้ ทุกครั้งที่ผมพิมพ์ Key combination Control-g คำสั่ง Redirect จะถูกเพิ่มหลังเคอร์เซอร์ ทำให้ผมนำไปต่อท้ายคำสั่งอื่นๆ ได้ง่าย
จดจำข้อต่อไปนี้เมื่อสร้าง Macro:
- สามารถเขียน Key combination ภาษาอังกฤษได้ (รายละเอียดเพิ่มเติม ดู man page ของ bash ค้นหาส่วน "Readline Key Bindings")
- ลำดับตัวอักษรที่ Macro จะแทรก ต้องห่อหุ้มด้วย Double quotes (")
- การเลือก Control-g เป็น arbitrary (สุ่ม/ตามใจชอบ) คุณสามารถเลือก Combination ที่มีความหมายกับคุณมากกว่า
- เป็นไปได้ที่จะ Override (ทับ) Keybinding เริ่มต้น (Default) จงระลึกถึงสิ่งนี้เมื่อกำหนดของตัวเอง
- เพื่อให้ Keybinding เริ่มทำงาน ต้อง เริ่ม Shell instance ใหม่ (.inputrc ถูกอ่านตอน Shell เริ่มต้น)
Functions (ฟังก์ชัน)
คุณยังสามารถสร้าง Keybinding ที่เมื่อรัน จะ เรียกใช้ฟังก์ชัน (Call a function) Readline จัดเตรียม Pre-defined functions (ฟังก์ชันที่กำหนดไว้ล่วงหน้า) จำนวนมากให้เลือก เพื่อ Map key combination ไปยัง Pre-defined function:
<key combination>: <function-name>
สำหรับรายการ Pre-defined functions ที่มีอยู่ ดู GNU Readline manual
ยังเป็นไปได้ที่จะกำหนด Custom functions เอง แต่ต้องเขียนด้วยภาษา C และอยู่นอกขอบเขตของบทช่วยสอน (Tutorial) นี้ อาจครอบคลุมใน Tutorial แยกภายหลัง
Pre-defined function ที่มีประโยชน์คือ menu-complete มันให้พฤติกรรม Auto-completion แบบใหม่
พฤติกรรมเริ่มต้นของ Auto-completion (ผูกกับปุ่ม TAB) คือ:
- เติมคำสั่ง/ไดเรกทอรี/ไฟล์ ที่พิมพ์บางส่วน หากมี Match (ตรงกัน) เพียงตัวเดียว
- แสดงรายการ Matches ที่เป็นไปได้ เมื่อมีมากกว่า 1 ตัว
menu-complete จะแทนที่จะ Cycle (วนลูป) ผ่านรายการ Matches ที่เป็นไปได้ เติม Match ถัดไปทุกครั้งที่ฟังก์ชันถูกเรียก พฤติกรรมนี้สะดวก โดยเฉพาะตอน Auto-complete ชื่อไฟล์ยาว เพื่อ Remap ปุ่ม TAB ให้ใช้พฤติกรรมนี้ ให้เพิ่มบรรทัดนี้ใน .inputrc:
TAB: menu-complete
โปรดทราบ: Keybinding ใหม่นี้ จะไม่มีผลใน Shell ปัจจุบัน ต้องเริ่ม Instance ใหม่เพื่อโหลด .inputrc ใหม่
ในบทช่วยสอนนี้ เราเรียนรู้ว่า Keybinding คำสั่งบรรทัดคำสั่ง (Command line) ของ Linux ถูกขับเคลื่อนโดยเครื่องมือชื่อ Readline Keybinding สามารถเป็น 1 ใน 2 ประเภท:
- Macro: ขยายลำดับตัวอักษร
- Function: ดำเนินการกระทำ
Readline ให้ชุด Default keybindings แต่อย่างไรก็ตาม ยังให้ความยืดหยุ่นสร้างของตัวเองในไฟล์ .inputrc สุดท้าย เพื่อดู Keybinding ปัจจุบันทั้งหมด ใช้คำสั่ง 'bind':
bind -p