นี่คือลำดับของอักขระที่ส่งโดยเทอร์มินัลของคุณเมื่อคุณกดปุ่มที่กำหนด ไม่มีอะไรเกี่ยวข้องกับการทุบตีหรือ 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(นี่คือncursesinfocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
การผสมคีย์เช่นCtrl-Upไม่มีรายการที่สอดคล้องกันในterminfoฐานข้อมูลดังนั้นเพื่อค้นหาสิ่งที่พวกเขาส่งอ่านแหล่งข้อมูลหรือเอกสารประกอบสำหรับเทอร์มินัลที่เกี่ยวข้องหรือลองใช้ด้วยsed -n lวิธีที่อธิบายไว้ข้างต้น
bind -pของเปลือกเป็น