นี่คือลำดับของอักขระที่ส่งโดยเทอร์มินัลของคุณเมื่อคุณกดปุ่มที่กำหนด ไม่มีอะไรเกี่ยวข้องกับการทุบตีหรือ readline ต่อ se แต่คุณต้องการที่จะรู้ว่าลำดับของตัวละครที่ได้รับคีย์หรือการรวมกันของคีย์ที่ส่งถ้าคุณต้องการกำหนดค่าreadline
ให้ทำอะไรบางอย่างเมื่อกดปุ่มที่กำหนด
เมื่อคุณกดAปุ่มโดยทั่วไปเทอร์มินัลส่งa
อักขระ (0x61) หากคุณกด<Ctrl-I>
หรือ<Tab>
โดยทั่วไปแล้วจะส่ง^I
อักขระที่รู้จักกันในชื่อTAB
หรือ\t
(0x9) ส่วนใหญ่ของการทำงานและการนำกุญแจทั่วไปส่งลำดับของตัวละครที่เริ่มต้นด้วย^[
(ควบคุม [) ยังเป็นที่รู้จักESC
หรือ\e
(0x1b, 033 ฐานแปด) แต่ลำดับที่แน่นอนแตกต่างกันไปจากสถานีไปยังสถานี
วิธีที่ดีที่สุดในการค้นหาว่าคีย์หรือคีย์ผสมส่งอะไรให้เทอร์มินัลของคุณทำงานsed -n l
หรือพิมพ์ตามด้วยEnterคีย์บอร์ด จากนั้นคุณจะเห็นสิ่งที่ชอบ:
$ sed -n l
^[[1;5A
\033[1;5A$
บรรทัดแรกเกิดจากสถานีภายในที่echo
ทำโดยอุปกรณ์ปลายทาง (อาจไม่น่าเชื่อถือเนื่องจากการตั้งค่าอุปกรณ์ปลายทางจะส่งผลกระทบต่อ)
sed
บรรทัดที่สองคือการส่งออกโดย $
ไม่ได้ที่จะถูกรวมอยู่ก็เพียงเพื่อที่จะแสดงให้คุณที่ท้ายบรรทัดคือ
ดังกล่าวข้างต้นหมายถึงว่าCtrl-Up(ซึ่งผมได้กด) ส่ง 6 ตัวอักษรESC
, [
, 1
, ;
, 5
และA
(0x1b 0x5b 0x31 0x3b 0x35 0x41)
terminfo
ฐานข้อมูลบันทึกจำนวนของลำดับสำหรับจำนวนของคีย์ที่พบบ่อยสำหรับจำนวนของขั้ว (ขึ้นอยู่กับ$TERM
ค่า)
ตัวอย่างเช่น
TERM=rxvt tput kdch1 | sed -n l
จะบอกคุณว่าลำดับหนีคือการส่งโดยrxvt
เมื่อกดDeleteคีย์
คุณสามารถค้นหาคีย์ที่สอดคล้องกับลำดับที่กำหนดกับเทอร์มินัลปัจจุบันของคุณด้วยinfocmp
(นี่คือncurses
infocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
การผสมคีย์เช่นCtrl-Upไม่มีรายการที่สอดคล้องกันในterminfo
ฐานข้อมูลดังนั้นเพื่อค้นหาสิ่งที่พวกเขาส่งอ่านแหล่งข้อมูลหรือเอกสารประกอบสำหรับเทอร์มินัลที่เกี่ยวข้องหรือลองใช้ด้วยsed -n l
วิธีที่อธิบายไว้ข้างต้น
bind -p
ของเปลือกเป็น