พิมพ์อักขระอะไรเมื่อกดแป้น Alt + Arrow


13

เมื่อฉันกดAltUp, Aพิมพ์หน้าจอขั้ว สิ่งเดียวกันเกิดขึ้นเมื่อฉันกดAltDownแต่Bพิมพ์แทน

ตัวละครอื่น ๆ ที่ฉันรู้

AltLeft= DและAltRight=C

วัตถุประสงค์ของคำสั่งเหล่านี้คืออะไร?

คำตอบ:


14

ขึ้นอยู่กับว่าสถานีมีการกำหนดค่าการพิมพ์Alt+Keyเป็นเหมือนการพิมพ์EscและKeyปุ่มในลำดับดังนั้นจึงส่งตัวอักษรปุ่ม ESC (aka \eหรือ^[หรือ\033) Keyตามด้วยตัวอักษรหรือลำดับของตัวอักษรที่ส่งไปเมื่อกดที่

เมื่อทำการกดตัวUpเลียนแบบเครื่องเทอร์มินัลส่วนใหญ่จะส่งอักขระสามตัว\033[Aหรือ\033OAขึ้นอยู่กับว่าพวกเขาอยู่ในโหมดแป้นพิมพ์ของแอปพลิเคชันหรือไม่

อันแรกตรงกับลำดับหนีซึ่งเมื่อออกไปยังเทอร์มินัลให้เลื่อนเคอร์เซอร์ขึ้น ถ้าคุณทำ:

printf '\nfoo\033[Abar\n\n'

คุณจะเห็นbarเขียนหลังจากfooแถวหนึ่งขึ้นไป ถ้าคุณทำ:

stty -echoctl; tput rmkx; read foo

คุณจะเห็นว่าปุ่มลูกศรเลื่อนเคอร์เซอร์ไปมา

เมื่อโปรแกรมประยุกต์เหมือนzshหรือviอ่านลำดับของตัวละครจากสถานีนั้นก็ตีความว่าเป็น "ขึ้น" การกระทำเพราะมันรู้จากฐานข้อมูลที่ terminfo ( kcuu1ความสามารถ) Upว่ามันเป็นลำดับหนีส่งเมื่อกด

ตอนนี้สำหรับAlt-Upอาคารบางอย่างเช่นrxvtและอนุพันธ์ของมันเช่นetermส่ง\033ตามลำดับหนีสำหรับUp(นั่นคือ\033\033[Aหรือ\033\033OA) ในขณะที่คนอื่น ๆ บางคนชอบxtermหรือgnome-terminalมีลำดับหนีแยกต่างหากสำหรับประเภทที่ของคีย์เมื่อนำมาใช้กับการรวมกันปุ่มชอบAlt, ,ShiftCtrl

ผู้ที่มักจะจะส่งเมื่อ\033[1;3AAlt-Up

เมื่อส่งไปยังเทอร์มินัลลำดับนั้นจะเลื่อนเคอร์เซอร์ขึ้น (พารามิเตอร์ที่สอง (3) จะถูกละเว้น) ไม่มีที่สอดคล้องกันเป็นปุ่มกดที่สำคัญดังนั้นจึงเป็นลำดับเดียวกันส่งเมื่อAlt-Upเข้าหรือออกจากโหมดปุแอพลิเคชัน

ตอนนี้ไม่ว่าจะเป็น\033\033[Aหรือ\033[1;3Aแอปพลิเคชันจำนวนมากไม่รู้ว่าลำดับเหล่านั้นมีไว้เพื่ออะไร ฐานข้อมูล terminfo จะไม่ช่วยให้พวกเขาเพราะไม่มีความสามารถดังกล่าวที่กำหนดสิ่งที่ตัวละครที่ส่งคีย์ผสม

พวกเขาจะพยายามอย่างเต็มที่เพื่อตีความลำดับนั้น bashเช่นจะแปลเป็นลำดับหนีไม่ทราบอะไรเกี่ยวกับมันจึงไม่ทำอะไรเลยตามมาด้วย\033[1;3 จะหยุดอ่านทันทีที่พบว่าไม่มีลำดับอักขระที่ตรงกันที่ทราบ ไม่มีลำดับการหลบหนีที่รู้ว่าเริ่มต้นด้วยดังนั้นมันจะข้ามสิ่งนั้นและอ่านส่วนที่เหลือ: และแทรกส่วนนั้นในตัวแก้ไขบรรทัดAzsh\033[1;3A

การใช้งานหลายคนต้องการvi, zshหรือreadlineตามคนที่ชอบgdbหรือbash( แต่ระวังbashการใช้งานฉบับแก้ไขreadline) ช่วยให้คุณสามารถเพิ่มการผูกลำดับของตัวอักษรใด ๆ

ยกตัวอย่างเช่นในzshคุณอาจต้องการที่จะผูกAlt-Up, Alt-Downเช่น:

bindkey '\e[1;3A' history-beginning-search-backward
bindkey '\e[1;3B' history-beginning-search-forward

สิ่งเหล่านี้คือการค้นหาประวัติย้อนหลังและไปข้างหน้าสำหรับบรรทัดคำสั่งที่เริ่มต้นอย่างใดอย่างหนึ่งในปัจจุบันจนถึงตำแหน่งปัจจุบันของเคอร์เซอร์ซึ่งค่อนข้างสะดวกในการจำคำสั่งก่อนหน้า


3

คุณสามารถใช้Crtl+ vเพื่อส่งคืนรหัสอินพุตของแป้นพิมพ์ของคุณ ถ้าคุณทำที่สำหรับปุ่มลูกศร, คุณจะได้รับ[[D^, [[C^, [[A^และ[[Bค่า ไม่มีการผูกค่าเริ่มต้นสำหรับAlt+ แป้นลูกศรดังนั้นดูเหมือนว่าการกระทำที่ดำเนินการจะพิมพ์รหัสตัวอักษรเพียงอย่างเดียว ถ้าคุณสร้างไฟล์กำหนดค่าไลบรารี Readline ในท้องถิ่นของคุณ:

$ cp /etc/inputrc ~/.inputrc

และเพิ่มบรรทัด:

"\e[1;3C": "sometexthere"

[1;3Cรหัสป้อนข้อมูลของAlt+ อยู่ที่ไหน(คุณสามารถรับแบบเดียวกับก่อนใช้Crtl+ vทางลัด) จากนั้นรีสตาร์ทเครื่องจากนั้นทางลัดCrtl+ จะคืนข้อความให้คุณ "บางครั้ง" และAltปุ่มลัด + ลูกศรอื่น ๆจะหยุดส่งคืนอักขระ

ข้อความแทนคุณสามารถส่งคำสั่ง bindable ได้จากhttp://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commandsเช่น

"\e[1;3C": unix-line-discard

เพื่อให้มีผลเหมือนกันเช่นCrtl+ u(ลบบรรทัด)

ข้อมูลเพิ่มเติมที่นี่: http://cnswww.cns.cwru.edu/php/chet/readline/readline.html


3

Altที่สำคัญมักจะถูกนำมาใช้เป็นmetaปรับปรุง เคอร์เซอร์ - และฟังก์ชั่น - ปุ่มถูกอ้างถึงว่าเป็นคีย์พิเศษเนื่องจากมันอาจส่งหลายตัวอักษร - และตัวอักษรที่ถูกส่งสามารถเปลี่ยนแปลงได้

ผู้ใช้บางคนเช่นbashคาดว่าการกดAltจะส่งคีย์นำหน้าด้วยอักขระเลี่ยง ฟีเจอร์ "meta" ที่ทำเป็นเอกสาร (ดูterminfo(5)) เกี่ยวข้องกับบิตที่แปด:

หากเทอร์มินัลมี "เมตาคีย์" ซึ่งทำหน้าที่เป็นปุ่ม Shift ให้ตั้งค่าบิตที่ 8 ของอักขระใด ๆ ที่ส่งความจริงข้อนี้สามารถระบุkmได้ มิฉะนั้นซอฟต์แวร์จะถือว่าบิตที่ 8 เป็นพาริตี้และโดยปกติจะถูกล้าง ถ้าสตริงที่มีอยู่เพื่อเปิดการทำงานนี้โหมด "เมตา" และปิดที่พวกเขาจะได้รับเป็นและsmmrmm

bashรู้เกี่ยวกับสิ่งนั้นเช่นกัน (ดูคำถามที่พบบ่อยเกี่ยวกับncurses ) แต่มีผู้ใช้ไม่กี่คนที่สนใจคุณสมบัตินี้ อย่างไรก็ตามพวกเขาคุ้นเคยกับการอ้างถึงAltเป็น "เมตา" แม้ว่าโหมดเมตาจะถูกปิด ทั้ง rxvt และ xterm มีคุณลักษณะนี้ตั้งแต่ (อย่างน้อย) ต้นปี 1990

ผู้ใช้รายอื่น (นับตั้งแต่xtermเปิดตัวฟีเจอร์ในแพ็ตช์ # 94, 1999 ) อาจคาดว่าข้อมูลตัวดัดแปลงจะถูกเข้ารหัสเป็นพารามิเตอร์ในลำดับของอักขระที่คีย์พิเศษจะส่ง เอกสารของ XTerm อ้างถึงคีย์ที่ปรับเปลี่ยนเหล่านี้เป็นปุ่มฟังก์ชั่น"PC-style"เพื่อแยกความแตกต่างจาก"VT220-style" (ซึ่งไม่มีตัวดัดแปลง) เคอร์เซอร์คีย์ที่ไม่มีการแก้ไขอาจส่งESC[Aแต่ก็เป็นเรื่องถูกกฎหมายที่จะมีพารามิเตอร์เช่นESC[5Aซึ่งแอปพลิเคชันควรเข้าใจว่าการทำซ้ำห้าครั้งนั้น รุ่นแรกของxterm's พีซีแบบปุ่มใช้ว่า '5' เพื่อแสดงถึงcontrolและรุ่นที่ใหม่กว่าเปลี่ยนไปเพื่อหลีกเลี่ยงความสับสนกับจำนวนการทำซ้ำ ดังนั้น...

ESC[5A

แนะนำว่าแอพพลิเคชั่นเลื่อนเคอร์เซอร์ขึ้น 5 แถวขณะที่

ESC[1;5A

แนะนำว่ามันเลื่อนขึ้นหนึ่งแถวโดยบอกแอปพลิเคชันว่าcontrolกดแป้นแล้ว

ชุดค่าผสมที่มีประโยชน์อยู่ในฐานข้อมูล ncurses terminfo ตั้งแต่ปี 2004 :

# 2004-07-17
#       * add xterm-pc-fkeys -TD

ฐานข้อมูล terminfo แสดงเวอร์ชันปัจจุบันของxterm + pcfkeysพร้อมความคิดเห็นที่แสดงวิธีเข้ารหัสตัวดัดแปลง:

# This fragment describes as much of XFree86 xterm's "pc-style" function
# keys as will fit into terminfo's 60 function keys.
# From ctlseqs.ms:
#    Code     Modifiers
#  ---------------------------------
#     2       Shift
#     3       Alt
#     4       Shift + Alt
#     5       Control
#     6       Shift + Control
#     7       Alt + Control
#     8       Shift + Alt + Control
#  ---------------------------------
# The meta key may also be used as a modifier in this scheme, adding another
# bit to the parameter.

(Alt และเมตาไม่จำเป็นต้องเป็นคีย์เดียวกัน) นั่นคือBuilding Block (ซึ่งประกอบไปด้วย Building Block อื่น ๆ ) ซึ่งxtermจะอธิบายคำอธิบายขั้ว มันใช้ส่วนขยายที่ให้ไว้ใน ncurses ตั้งแต่ปี 1999ซึ่งช่วยให้ชื่อที่ผู้ใช้กำหนด เนื่องจาก termcap สนับสนุนชื่อ 2 อักขระเท่านั้นและคำอธิบาย 1,023- ไบต์จึงไม่มีเหตุผลที่จะทำให้ชื่อเพิ่มเติมเหล่านี้พร้อมใช้งานผ่านทางอินเตอร์เฟสtermcap พร้อมใช้งานสำหรับแอปพลิเคชันที่ใช้อินเตอร์เฟสterminfo

ตอนนี้เป็นเรื่องยาก: มีหลายวิธีที่แอปพลิเคชั่นจะกำหนดลำดับคีย์ดังนี้:

  1. วิเคราะห์ลำดับของอักขระอย่างสมบูรณ์
  2. วิเคราะห์บางส่วนและทิ้งcontrolตัวดัดแปลงหากไม่ต้องการ
  3. เพียงเปรียบเทียบลำดับของอักขระกับพจนานุกรมโดยหวังว่าจะตัดสินความหมายในแบบนั้น

ไม่กี่โปรแกรมที่จะทำก่อน บางบรรณาธิการข้อความจะทำสอง (ที่จริงผมทำนี้สำหรับdedในช่วงปลายทศวรรษ 1980 ) นักพัฒนาสำหรับการใช้งานเช่นการbashเลือกเส้นทางที่สามโดยสมมติว่าข้อมูลส่วนใหญ่อยู่ในtermcap อีกทางเลือกหนึ่งพวกเขาอาจเลือกที่จะสร้างตารางที่มีข้อมูล termcap / terminfo และใช้อินเตอร์เฟสที่ให้ข้อมูลที่ดีที่สุด xtermทำสิ่งนี้สำหรับคุณลักษณะtcap-queryโดยvimมีการกำหนดคีย์ฟังก์ชันจริง

เนื่องจากไม่มีสตริงที่bashเปรียบเทียบกับการจับคู่สตริงที่ได้รับจึงอาจสับสนสร้างการจับคู่บางส่วน (เช่นตัวอักขระเลี่ยงเอง)

อ่านเพิ่มเติม:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.