ประวัติเกี่ยวกับปุ่ม Shift + Arrow ในเทอร์มินัลคืออะไร


21

ฉันสงสัยว่าทำไม Shift+ Arrow Keyผลในหนึ่งในA, B, CหรือDตัวอักษร

ทำไมไม่ใช้ตัวอักษรอื่น? ทำไมต้องมีจดหมายใด ๆ


ที่รัก: D เดิมพันของฉัน? จะทำอย่างไรกับการเล่นเกมด้วยข้อความ: D
Rinzwind

2
เพียงแค่การสังเกต: ใน tty Shift + Arrow Keysไม่ได้ทำอะไรเลย
Radu Rădeanu

@Rinzwind: :)))
Radu Rădeanu

1
ฉันถามคำถามนี้ใน Unix / Linux Stack Exchange มีคำตอบที่เป็นประโยชน์ บางทีคุณอาจต้องการดูพวกเขา unix.stackexchange.com/questions/73669/…
yfklon

คำตอบ:


27

เทอร์มินัลอีมูเลเตอร์เช่นgnome-terminal("เทอร์มินัล" ในอูบุนตู) แต่มีxtermและurxvtชื่อ "อีมูเลเตอร์" เพราะพวกมันสร้างพฤติกรรมของเทอร์มินัลรุ่นเก่าซึ่งเป็นจอแสดงผลคอมพิวเตอร์เพียงเครื่องเดียว เทอร์มินัลดังกล่าวสื่อสารกับคอมพิวเตอร์ด้วยโปรโตคอลแบบข้อความและได้รับการออกแบบมาเพื่อรับข้อความเท่านั้น ต้องการการควบคุมที่รวดเร็วยิ่งขึ้น: จะลบบรรทัดได้อย่างไร ใช้สีหรือไม่ หรือเปลี่ยนตำแหน่งเคอร์เซอร์?

เทอร์มินัล VT-100 ที่มา: ศิลปะการใช้งาน Unix - อินเตอร์เฟสบรรทัดคำสั่ง

Escape sequences ได้รับการออกแบบมาสำหรับทุกเครื่องในการทำสิ่งต่าง ๆ พวกเขาจะถูกตั้งชื่อหลบหนีเพราะพวกเขาเริ่มต้นด้วยการหลบหนีรหัส ASCII 33นี้: ไม่มีทางที่จะพิมพ์ตัวละครดังกล่าวได้โดยตรงซึ่งทำให้มันเหมาะกับลำดับดังกล่าว เมื่อเรายังต้องการแสดงตัวอักษรนี้^[[ถูกใช้และนี่คือสิ่งที่ฉันจะใช้ในคำอธิบายของฉัน

เมื่อเทอร์มินัลได้รับ^[[Aมันไม่ได้แปลว่า "พิมพ์ ^ [[A" แต่ "ผู้ใช้กดปุ่มลูกศรขึ้น" "A" ตรงนี้เองมันเป็นแค่จดหมายที่ทุกคนเห็นด้วยเพราะนั่นคือสิ่งที่ DEC VT-52 และผู้สืบทอดใช้ VT-100 เทอร์มินัลยอดนิยม

DEC VT-52 มานูเอลบำรุงรักษา 1976

ที่มา: คู่มือการบำรุงรักษา DEC VT-52 1976

สิ่งนี้ยังคงเป็นวิธีที่เทอร์มินัลอีมูเลเตอร์ทำงานในปัจจุบัน: ขึ้นอยู่กับ$TERMตัวแปรชื่อฐานข้อมูลterminfoมีหน้าที่รับผิดชอบในการบอกว่าควรส่งรหัสใดไปยังเชลล์ (bash, sh, zsh ... ) ซึ่งรับผิดชอบการทำความเข้าใจและตอบสนอง ถึงพวกเขา.

ตอนนี้โค้ดสำหรับShift+ upเกิดขึ้นเป็น^[[1;2A: เทอร์มินัลอีมูเลเตอร์ส่งรหัสนี้ไปยังเชลล์ซึ่งพยายามตีความ^[[1;2แต่ไม่แสดงอะไรเลยเพราะไม่รู้เกี่ยวกับลำดับหลบหนีนั้น แต่Aถูกทิ้งไว้และแสดง


5
ว้าวน่าสนใจ ตอนนี้สิ่งเหล่านั้น^[[Aสมเหตุสมผลเมื่อฉันคลิกปุ่มลูกศรในขณะที่กระบวนการกำลังทำงานบนเทอร์มินัล
ด่าน

4
คุณอาจกด CTRL-v ก่อนที่คุณจะกด SHIFT-UpArrow เพื่อ 'ดู' ลำดับการหลบหนีในรูปแบบดิบ เว้นแต่คุณได้เปลี่ยนค่าเริ่มต้น ESC ควรปรากฏบนหน้าจอเทอร์มินัลเป็น ^ [
arielf

@arielf คุณสามารถเรียกใช้cat >/dev/nullจากนั้นพิมพ์แล้วกด Ctrl + C (หรือ Enter แล้วกด Ctrl + D) เมื่อเสร็จสิ้น
wjandrea
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.