Emacs C- ไม่ทำงานในสถานี


11

ฉันใช้ GNU Emacs ซึ่งโดยปกติแล้วจะเหมือนกับรุ่นemacs -nwที่เปิดตัวเทอร์มินัล (ตรงข้ามกับเวอร์ชัน GUI ของหน้าต่าง)

ฉันเขียนบทความโรงเรียนLaTeXเพื่อใช้flyspell-modeในการตรวจสอบการสะกดคำภายใน emacs สิ่งนี้ใช้ได้ดีในเวอร์ชัน GUI แต่ในเทอร์มินัลฉันพบปัญหาเกี่ยวกับการกดแป้นพิมพ์C-.( Ctrl- .) ใน tty สิ่งนี้ไม่ทำอะไรเลยและในterminatorหรือgnome-terminalนี่ก็แค่ใส่ "."

ฉันจะทำอย่างไรเพื่อให้มันทำในสิ่งที่มันทำในเวอร์ชันที่มีหน้าต่าง (แสดงคำแนะนำการสะกดคำสำหรับคำที่สะกดผิด)

แก้ไข: ในกรณีนี้ฉันใช้ Ubuntu 12.04 กับ Emacs 23.3.1 (ซึ่งฉันเชื่อว่าเป็นค่าเริ่มต้นจาก repo 12.04)


1
กันที่นี่ คุณลองEsc- x flyspell-mode? มันใช้งานได้สำหรับฉัน
Masroor

ก็ใช่ ฉันมักจะเริ่มต้นflyspell-modeด้วยM-xแต่ESC xดูเหมือนจะไม่สร้างความแตกต่าง
cg505

1
กันที่นี่ ESC-TABแต่ผมพบว่าเริ่มต้นปุ่มลัดสำหรับผลงานที่ทั้งสองรุ่น
McNisse

ใช่ESC TABหรือM-TABทั้งสองอย่างทำงานให้ฉัน ขอบคุณสำหรับเคล็ดลับ @McNisse
cg505

คำตอบ:


4

ดูเหมือนว่าส่วนสำคัญของคำถามนี้ได้ตอบไปแล้วในความคิดเห็น แต่เพื่อที่จะบอกสาเหตุที่แท้จริงในกรณีที่คุณอยากรู้อยากเห็นฉันคิดว่า ctrl- ไม่ทำงานในเทอร์มินัลเนื่องจากข้อ จำกัด ของเทอร์มินัลอีมูเลเตอร์ ในเทอร์มินัลมาตรฐาน ctrl ถูกกำหนดให้ส่งรหัส ASCII ของคีย์ที่คุณกดลบ 64 (นี่คือเหตุผลที่ ctrl-J (74) ส่งขึ้นบรรทัดใหม่ (10) และ ctrl-I (73) ส่งแท็บ (9) เช่น ) เนื่องจากรหัส ASCII ของรอบระยะเวลาคือ 46 การลบ 64 จะให้ -18 ซึ่งไม่ถูกต้องเนื่องจากเป็นค่าลบและไม่มีรหัส ASCII เชิงลบดังนั้นจึงไม่มีสิ่งใดที่ emacs จะรับและเข้าใจ

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


1
คำตอบนี้น่าสนใจจริงๆ ฉันขุดลึกลงไปและพบว่า DEC VT100 ทำงานคล้ายกัน แต่พูดต่างกันอย่างเคร่งครัด นี่คือสิ่งที่จะทำเมื่อกดปุ่มควบคุมและคีย์อื่น ๆ เข้าด้วยกัน: 1) ตาราง ASCII ค้นหาโดยสแกนรหัสแป้นพิมพ์ 2) ค้นหาตารางของรหัสควบคุมที่ถูกต้องโดย ASCII 3) ถ้าถูกต้องหน้ากาก bit5 และ bit6 ของ ASCII 4 ) ส่งออกไป. ดังนั้น ctrl-J, ctrl-j และ ctrl- * ทุกคนสามารถส่ง LF ได้ แต่การตรวจสอบความถูกต้องของการ จำกัด ชุดค่าผสม ดูคู่มือทางเทคนิค DEC VT100ส่วนที่ 4-43 (หน้า PDF 93)
Kenji Noguchi

ฉันสามารถจับได้'C-.'ดีกับ emacs ใน xterm แต่ไม่ใช่กับ urxvt หรือ st ความคิดใด ๆ ที่อาจเป็นสาเหตุ?
stewSquared

0

ในขณะที่คำตอบข้างต้นให้คำอธิบายที่ดีเกี่ยวกับสาเหตุที่ใช้งานไม่ได้ แต่ก็ไม่ได้อธิบายถึงวิธีการใช้งานจริง ๆ สำหรับiTerm2คุณสามารถแก้ปัญหานี้โดยการเพิ่มการทำแผนที่ที่สำคัญสำหรับลำดับหนี ฉันคิดว่าจะมีบางสิ่งที่คล้ายกันในterminatorหรือgnome-terminal

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