ฉันสงสัยว่าทำไม Shift+ Arrow Keyผลในหนึ่งในA
, B
, C
หรือD
ตัวอักษร
ทำไมไม่ใช้ตัวอักษรอื่น? ทำไมต้องมีจดหมายใด ๆ
Shift + Arrow Keys
ไม่ได้ทำอะไรเลย
ฉันสงสัยว่าทำไม Shift+ Arrow Keyผลในหนึ่งในA
, B
, C
หรือD
ตัวอักษร
ทำไมไม่ใช้ตัวอักษรอื่น? ทำไมต้องมีจดหมายใด ๆ
Shift + Arrow Keys
ไม่ได้ทำอะไรเลย
คำตอบ:
เทอร์มินัลอีมูเลเตอร์เช่นgnome-terminal
("เทอร์มินัล" ในอูบุนตู) แต่มีxterm
และurxvt
ชื่อ "อีมูเลเตอร์" เพราะพวกมันสร้างพฤติกรรมของเทอร์มินัลรุ่นเก่าซึ่งเป็นจอแสดงผลคอมพิวเตอร์เพียงเครื่องเดียว เทอร์มินัลดังกล่าวสื่อสารกับคอมพิวเตอร์ด้วยโปรโตคอลแบบข้อความและได้รับการออกแบบมาเพื่อรับข้อความเท่านั้น ต้องการการควบคุมที่รวดเร็วยิ่งขึ้น: จะลบบรรทัดได้อย่างไร ใช้สีหรือไม่ หรือเปลี่ยนตำแหน่งเคอร์เซอร์?
ที่มา: ศิลปะการใช้งาน Unix - อินเตอร์เฟสบรรทัดคำสั่ง
Escape sequences ได้รับการออกแบบมาสำหรับทุกเครื่องในการทำสิ่งต่าง ๆ พวกเขาจะถูกตั้งชื่อหลบหนีเพราะพวกเขาเริ่มต้นด้วยการหลบหนีรหัส ASCII 33
นี้: ไม่มีทางที่จะพิมพ์ตัวละครดังกล่าวได้โดยตรงซึ่งทำให้มันเหมาะกับลำดับดังกล่าว เมื่อเรายังต้องการแสดงตัวอักษรนี้^[[
ถูกใช้และนี่คือสิ่งที่ฉันจะใช้ในคำอธิบายของฉัน
เมื่อเทอร์มินัลได้รับ^[[A
มันไม่ได้แปลว่า "พิมพ์ ^ [[A" แต่ "ผู้ใช้กดปุ่มลูกศรขึ้น" "A" ตรงนี้เองมันเป็นแค่จดหมายที่ทุกคนเห็นด้วยเพราะนั่นคือสิ่งที่ DEC VT-52 และผู้สืบทอดใช้ VT-100 เทอร์มินัลยอดนิยม
ที่มา: คู่มือการบำรุงรักษา DEC VT-52 1976
สิ่งนี้ยังคงเป็นวิธีที่เทอร์มินัลอีมูเลเตอร์ทำงานในปัจจุบัน: ขึ้นอยู่กับ$TERM
ตัวแปรชื่อฐานข้อมูลterminfo
มีหน้าที่รับผิดชอบในการบอกว่าควรส่งรหัสใดไปยังเชลล์ (bash, sh, zsh ... ) ซึ่งรับผิดชอบการทำความเข้าใจและตอบสนอง ถึงพวกเขา.
ตอนนี้โค้ดสำหรับShift+ upเกิดขึ้นเป็น^[[1;2A
: เทอร์มินัลอีมูเลเตอร์ส่งรหัสนี้ไปยังเชลล์ซึ่งพยายามตีความ^[[1;2
แต่ไม่แสดงอะไรเลยเพราะไม่รู้เกี่ยวกับลำดับหลบหนีนั้น แต่A
ถูกทิ้งไว้และแสดง
^[[A
สมเหตุสมผลเมื่อฉันคลิกปุ่มลูกศรในขณะที่กระบวนการกำลังทำงานบนเทอร์มินัล
cat >/dev/null
จากนั้นพิมพ์แล้วกด Ctrl + C (หรือ Enter แล้วกด Ctrl + D) เมื่อเสร็จสิ้น