มีขั้ว linux ใดบ้างที่สามารถรองรับคีย์ผสมทั้งหมดได้?


11

ผมชอบที่จะใช้ emacs ในโหมดขั้ว ( -nw) แต่ดูเหมือนว่าส่วนใหญ่ (ทั้งหมด?) ขั้วไม่สามารถจัดการคีย์ผสมบาง - ตัวอย่างเช่นหรือC-<RET> C-M-%ฉันรู้ว่าเป็นเพราะเทอร์มินัลส่วนใหญ่เลียนแบบ VT-100 ซึ่งไม่มีชุดค่าผสมเหล่านี้ มีลินุกซ์เทอร์มินัลใดบ้าง (ควรเป็น KDE) ซึ่งสามารถรองรับคีย์ผสมเหล่านี้ได้หรือนี่เป็นข้อ จำกัด พื้นฐานของเทอร์มินัลทั้งหมดหรือไม่?

คำตอบ:


15

เมื่อคุณกดปุ่มหรือคีย์ผสมในเทอร์มินัลจะถูกส่งไปยังแอปพลิเคชันที่ทำงานในเทอร์มินัลตามลำดับอักขระหนึ่งตัวหรือมากกว่า ตัวอย่างเช่นเมื่อคุณกดแอพลิเคชันที่ได้รับa aเมื่อคุณกดEnterแอพลิเคชันที่ได้รับตัวละครCR(aka ^M(ออกเสียง“ควบคุม EMM”) หรือที่รู้จักตัวละครจำนวน 13 อาคา\rหรือ\015) คีย์ผสมที่เกี่ยวข้องAltจะถูกส่งมักจะเป็นตัวอักษรESC( a.ka. ^[aka \eหรือ\033) Altตามด้วยลำดับสำหรับคีย์หรือการรวมกันโดยไม่ต้องคีย์ ปุ่มฟังก์ชั่และชุดอื่น ๆ ที่สำคัญจะถูกส่งเป็นลำดับหนีเริ่มต้นด้วยหรือ\e[\eO

ลำดับ escapes ไม่ได้มาตรฐานอย่างสมบูรณ์และโดยทั่วไปแล้วเทอร์มินัลจะไม่สนใจคุณลักษณะบางอย่างสำหรับคีย์บางอย่าง ตัวอย่างเช่นCtrl+ Shift+ letterมักถูกส่งเหมือนCtrl+ letterโดยค่าเริ่มต้น

คุณสามารถเห็นสิ่งที่เทอร์มินัลของคุณส่งสำหรับชุดคีย์โดยกดCtrl+ Vตามด้วยชุดคีย์ในเชลล์พรอมต์หรือC-qหรือC-h cตามด้วยชุดคีย์ใน Emacs

ด้วยเทอร์มินัลอีมูเลเตอร์บางตัวคุณสามารถกำหนดค่าลำดับ escape สำหรับแต่ละคีย์ เมื่อวันที่ Xterm นี้จะทำผ่านทรัพยากร X การตั้งค่าส่วนใหญ่จะอ่านทรัพยากรจาก~/.Xresourcesเมื่อ X เริ่มทำงานและคุณสามารถโหลดไฟล์ด้วยตนเองxrdb -merge ~/.Xresourcesได้

Term.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta <key>percent: string("\033[37;6~")

หลักการทั่วไปใช้ลำดับการยกเว้นของฟอร์มESC [ number1 ; number2 ~สำหรับปุ่มฟังก์ชันที่มีตัวดัดแปลง number1แสดงให้เห็นปุ่มฟังก์ชัน ( 15เพื่อ24สำหรับF5การF12- สำหรับเหตุผลทางประวัติศาสตร์ F1 ผ่านF4มีลำดับหนีแตกต่างกัน) และnumber2แสดงให้เห็นเครื่องปรับ ( 2สำหรับShift, 3สำหรับMeta, 5สำหรับCtrl, 7สำหรับCtrl+ Metaและเพิ่ม 1 Shiftที่มีอย่างน้อยหนึ่งCtrlหรือMeta)

Emacs แปล escape sequences เป็นการนำเสนอคีย์ภายในผ่านinput-decode-mapหรือlocal-function-key-map (หรือfunction-key-mapก่อน Emacs 23)

(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])

ดังนั้นถ้าฉันเข้าใจสิ่งนี้อย่างถูกต้องฉันต้องกำหนดลำดับการหลบหนีในเทอร์มินัลของฉันซึ่งสอดคล้องกับการผสมคีย์บางอย่าง จากนั้นใน emacs ฉันต้องแมปลำดับการหลบหนีกลับไปที่คีย์ผสม ลำดับการยกเว้นสามารถอยู่ได้ตามอำเภอใจตราบใดที่มันไม่ขัดแย้งกับสิ่งที่กำหนดไว้infocmp $TERM?
Yossarian

2
@Yossarian ใช่ นอกจากจะไม่ขัดแย้งกันแล้ว escape sequences จำเป็นต้องไม่คลุมเครือนั่นคือไม่ต้องมี escape sequences ควรเป็น prefix ของอีกอันหนึ่ง ซึ่งหมายความว่าในทางปฏิบัติแล้วต้องมีอักขระตัวแรกESC(ยกเว้นกรณีที่คุณต้องการลองอักขระ≥128 แต่จะ จำกัด การเข้ารหัสอินพุตที่เป็นไปได้) และอักขระที่สองต้องเป็นสิ่งที่คุณไม่ต้องการESC fooผูกมัด
Gilles 'หยุดความชั่วร้าย'

ฉันเพิ่งจะลองสิ่งที่คุณแนะนำ ควรจะlocal-set-keyเป็นจริงdefine-key? อดีตให้ข้อผิดพลาด (จำนวนอาร์กิวเมนต์ที่ไม่ถูกต้อง) ในขณะที่หลังทำงานอย่างน้อยสำหรับ <kbd> C-Enter </kbd> ดูเหมือนว่า konsole ยังมีปัญหาในการส่ง <kbd> CM-% </kbd>
Yossarian

@Yossarian define-keyจริงมันควรจะเป็น ฉันไม่ทราบว่าสามารถกำหนดค่าคีย์ Escape ของ Konsole ได้หรือไม่ xterm น่าจะปรับได้มากกว่าทางเลือกอื่น
Gilles 'SO- หยุดความชั่วร้าย'

1
โปรดทราบว่าxterm ของ Thomas Dickeyอยู่ภายใต้การพัฒนาที่ใช้งานอยู่ ด้วยXTerm*modifyOtherKeys: 2ทรัพยากรมันจะสร้างลำดับที่ไม่ซ้ำกันแม้จะC-M-เป็นการรวมกัน แต่ด้วยการตั้งค่านั้นคุณจะต้องให้การแมปที่กำหนดเองจำนวนมาก ( XTerm*modifyOtherKeys: 1มีความสามารถน้อยลง แต่ใช้งานได้นอกกรอบ) สำหรับตัวอย่าง (ถึงแม้ว่าจะไม่ได้ผลสำหรับฉัน) ให้ดูxterm-extras.elห้องสมุด.Xresourcesและ.inputrcไฟล์ที่เกี่ยวข้องและไฟล์ในeasymacs ที่ดาวน์โหลด
phils

1

สำหรับชุดของคีย์ที่ จำกัด แต่มีความสำคัญสมมติว่า konsole ของ KDE อาจทำสิ่งต่อไปนี้เพื่อให้ทำงานได้การใช้คีย์บิทที่ซับซ้อนใน emacs -nw:

ฉันจะใช้การดำเนินงานS-<RET>เพื่อเป็นตัวอย่าง:

  1. เปิด konsole ใหม่ไปที่การตั้งค่า -> โปรไฟล์ปัจจุบัน -> คีย์บอร์ด -> แก้ไข
  2. กดเพิ่มและสร้างรายการใหม่Return+Shiftและให้ลำดับคีย์ที่มีประโยชน์ (ฉันเลือก\E[27;3ซึ่งฉันคิดว่าเป็นลำดับคีย์ที่ส่งโดย X เมื่อฉันถูก poking รอบด้วย xev แต่อาจผิด - สิ่งสำคัญที่ต้องทำคือ ตรวจสอบให้แน่ใจว่ามีการหลบหนีที่เหมาะสมและไม่ขัดแย้งกับสิ่งอื่นใด)
  3. เล่นกับมันในพื้นที่ทดสอบเล็ก ๆ ที่ด้านล่างเพื่อให้แน่ใจว่ามันใช้งานได้
  4. รีสตาร์ท konsole
  5. เริ่มต้นemacs -nwและในการประเมินบัฟเฟอร์รอยขีดข่วน:

    (read-key-sequence-vector "Type your new key:")

    จากนั้นพิมพ์คีย์ผสมใหม่ของคุณ

    • หากคุณไม่คุ้นเคยกับสิ่งนี้เขียนบรรทัดออกวางเคอร์เซอร์ที่ท้ายบรรทัดแล้วกด Cx Ce เพื่อให้ emacs เรียกใช้บรรทัดนั้นคุณควรพูดกับคุณทุกสิ่งที่คุณใส่ในเครื่องหมายคำพูดและรอให้คุณ พิมพ์บางอย่าง.
  6. ควรคายลำดับสำคัญที่คุณอาจผูก
    (มันกลับมา[27 91 50 55 59 51]ให้ฉันเมื่อเทียบกับคนเก่าที่น่าเบื่อ[13]ก่อนที่ฉันจะยุ่งกับพวงกุญแจ konsole)

  7. เพิ่มในการกำหนดค่า emacs ของคุณ:

    (define-key function-key-map [27 91 50 55 59 51] [(shift return)])
    
  8. ฉันทดสอบด้วยemacs -nwในเซสชันหน้าจอโดยใช้:

    (define-key ess-mode-map [(shift return)] #'ess-eval-line-and-step)
    (define-key sh-mode-map [(shift return)]  #'send-line-to-shell)
    

0

คำตอบสั้น ๆ ก็คือมันเป็นข้อ จำกัด พื้นฐานของอาคารทั้งหมด

คำตอบที่ยาวกว่าเล็กน้อยคือแม้ว่าบางคนสร้างเครื่องปลายทางที่คุณต้องการ Emacs เองก็ต้องการการเปลี่ยนแปลงที่สำคัญในการทำงานกับเครื่องปลายทางนี้


นั่นเป็นจุดที่ดีเกี่ยวกับ emacs ที่ไม่ได้เกิดขึ้นกับฉัน ฉันเดาว่าฉันจะเริ่มใช้ gui แทน
Yossarian

นั่นคือสิ่งที่ฉันทำ.
hruvulum

0

มีความพยายามบางอย่างในการขยายโพรโทคอล VT ในวิธีที่อนุญาตการป้อนข้อมูลด้วยคีย์บอร์ดแบบไม่สูญเสีย (ระหว่างคุณสมบัติอื่น ๆ เช่นกราฟิก)

ตัวอย่างหนึ่งคือ notty: https://github.com/withoutboats/notty

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