Emacs ไม่รู้จัก Shift + Up ในเทอร์มินัล


15

บ่อยครั้งที่ฉันใช้Shift+ Up/Downเพื่อเลือกภูมิภาคใน Emacs มันทำงานได้ดีในโหมด GUI แต่เมื่อemacsถูกเรียกใช้ด้วย-nwตัวเลือกฉันสามารถเลือกบรรทัดด้วยShift+ Downเท่านั้น Shift+ Upไม่ทำงานผมได้รับข้อความแสดงข้อผิดพลาดใน minibuffer นี้:

<select> is undefined

ฉันจะแก้ปัญหานี้ได้อย่างไร

คำตอบ:


13

เทอร์มินัลข้อความส่งเฉพาะอักขระ (แม่นยำยิ่งขึ้นไบต์) ไม่ใช่ปุ่ม คีย์และคีย์เชน (คีย์ที่มีตัวดัดแปลง) ถูกเข้ารหัสเป็นลำดับอักขระ แป้นที่แทรกตัวอักขระที่พิมพ์ได้จะถูกส่งเป็นตัวเอง ปุ่มฟังก์ชั่นจะถูกส่งเป็นลำดับการยกเว้น ลำดับการยกเว้นส่วนใหญ่ประกอบด้วยอักขระ Escape ( ?\eในไวยากรณ์ Emacs) ตามด้วยอักขระที่พิมพ์ได้ตั้งแต่สองตัวขึ้นไป ดูการควบคุมและปุ่มขึ้น / ลงในเครื่องเทอร์มินัลเพื่อใช้งานโดย emacsและการป้อนข้อมูลด้วยแป้นพิมพ์และการส่งข้อความทำงานอย่างไร? สำหรับข้อมูลเพิ่มเติม.

Emacs มีกลไกในการแปลลำดับการหลบหนีเป็นแนวคิดของกุญแจ ตารางการแปลinput-decode-mapจะเริ่มต้นเมื่อ Emacs เริ่มต้นขึ้น (หรือแม่นยำยิ่งขึ้นเมื่อเปิดเฟรมใหม่: ตัวแปรนี้มีค่าแตกต่างกันในแต่ละเทอร์มินัล) บางครั้ง Emacs ไม่ทราบลำดับการหลบหนีทั้งหมดที่ส่งมาจากเครื่อง

ในกรณีของคุณก็ปรากฏว่า Emacs มีการตีความที่ไม่ถูกต้องสำหรับลำดับหนีที่ส่งมาจาก+Shift Upคุณจำเป็นต้องบอกว่ามันจะตีความว่ามันเป็นมากกว่าS-up selectก่อนอื่นให้หาว่าลำดับการหลบหนีคืออะไร ใน*scratch*บัฟเฟอร์กดCtrl+ Qแล้ว+Shift Upคำสั่งC-qทำให้อักขระตัวถัดไปซึ่งเป็นอักขระ escape ถูกแทรกตามตัวอักษรตามด้วยส่วนที่เหลือของลำดับ escape สมมติว่ามีการส่งShift+ ในระบบของเราจากนั้นคุณจะต้องกำหนดรายการที่เกี่ยวข้องใน:Up\e[1;2Ainput-mode-map

(define-key input-decode-map "\e[1;2A" [S-up])

โดยหลักการแล้วinput-decode-mapควรตั้งค่าต่อเทอร์มินัล ในทางปฏิบัติมันเป็นเรื่องยากมากที่จะมีเทอร์มินัลสองตัวที่ลำดับการหลบหลีกเดียวกันเข้ารหัสคีย์ที่แตกต่างกันดังนั้นการตั้งค่าระดับโลกจะทำงานได้ดี


คำตอบของคุณดูเหมือนว่าจะตอบคำถามของฉันที่นี่ - emacs.stackexchange.com/questions/33988 Are the (define-key ...)คำสั่งควรจะเข้าสู่ init.el? มีตัวอย่างโดยละเอียดที่ฉันสามารถดูได้ไหม?
vfclists

define-keyคำสั่ง@vfclists เข้าสู่ไฟล์ init ของคุณ ที่สามารถเป็น~/.emacs.d/init.elหรือสองสถานที่อื่น ๆ คุณจะพบตัวอย่างมากมายของการใช้งานdefine-keyโดยการค้นหาdefine-keyแต่การค้นหาแผนที่ที่จะผูกเป็นเรื่องอื่น global-mapแผนที่หลายมีส่วนร่วม: input-decode-map, function-key-map, keyboard-translate-map, ฉันไม่รู้วิธีตอบคำถามของคุณเพราะฉันไม่รู้ Spacemacs ฉันไม่แนะนำให้ใช้แพคเกจเช่น Spacemacs ที่กำหนดอินเทอร์เฟซมาตรฐานให้เป็นระเบียบ
Gilles 'หยุดความชั่วร้าย'

ฉันเปลี่ยนเป็น emacs ปกติเพื่อเรียนรู้โหมด org และฉันจัดการเพื่อทำงานด้วยinput-decode-mapหลังจากหาตัวอย่าง ฉันสามารถนำไปinput-decode-mapใช้เมื่อผู้ใช้ป้อนข้อความลงในบัฟเฟอร์ได้หรือไม่?
vfclists

@vfclists input-decode-mapเป็นหนึ่งในคีย์แม็พที่ใช้ ดูคู่มือสำหรับรายละเอียด
Gilles 'SO- หยุดความชั่วร้าย'

5

ใน emacs พื้นที่จะถูกคั่นด้วยจุด (เคอร์เซอร์) และเครื่องหมาย (ตำแหน่งก่อนหน้าของเคอร์เซอร์ซึ่งถูก "ทำเครื่องหมาย")

ดังนั้นเพื่อ "เลือกภูมิภาค" คุณต้องวางเครื่องหมายนั้นแล้วเลื่อนจุดของคุณไปรอบ ๆ

C-SPCวิธีที่ง่ายที่สุดที่จะวางเครื่องหมายคือการกด จากนั้นเพียงเลื่อนเคอร์เซอร์ไปรอบ ๆ คุณจะเห็น "ภูมิภาค" ขยายตามที่คุณทำ

หากต้องการ "ยกเลิกการเลือกภูมิภาค" คุณสามารถกดC-SPCอีกครั้ง

เนื่องจาก "shift + Movement" เป็นปุ่มลัดทั่วไปในซอฟต์แวร์อื่น ๆ โดยค่าเริ่มต้นมันจะเลียนแบบพฤติกรรม "เลือกภูมิภาค" นี้ อย่างไรก็ตามมันไม่ทำงานในเทอร์มินัลเนื่องจากกะไม่สามารถส่งไปยัง emacs เป็นคีย์ตัวดัดแปลง

โปรดทราบว่าโดยทั่วไปแล้วC-SPCวิธีการนี้มีประสิทธิภาพมากกว่าวิธีอื่น ๆ ในการเลือกภูมิภาค: คุณไม่ จำกัด การขึ้น / ลง / ซ้าย / ขวาสำหรับการเคลื่อนไหว (คุณสามารถใช้การค้นหาตัวอย่าง ... ) และไม่จำเป็นต้องใช้ คุณคงการใช้งานคีย์ผสมที่ไม่สะดวกสบายเป็นเวลานาน

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