ฉันสงสัยว่าทำไม 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) เมื่อเสร็จสิ้น