Emacs C-. funktioniert nicht im Terminal

11

Ich verwende GNU Emacs, normalerweise so, wie emacs -nwdie Terminalversion gestartet wird (im Gegensatz zur GUI-Version mit Fenster).

Ich schreibe Schulzeitungen ein, LaTeXdamit ich sie flyspell-modeinnerhalb von Emacs auf Rechtschreibprüfung prüfen kann. Dies funktioniert gut in der GUI-Version, aber in einem Terminal treten Probleme mit dem Tastenanschlag C-.( Ctrl- .) auf. In einem tty tut dies nichts und in terminatoroder gnome-terminalgibt dies einfach ein "." Ein.

Was kann ich tun, damit es das tut, was es in der Fensterversion tut (Rechtschreibvorschläge für ein falsch geschriebenes Wort anzeigen)?

BEARBEITEN: In diesem Fall verwende ich Ubuntu 12.04 mit Emacs 23.3.1 (was meiner Meinung nach der Standard des 12.04-Repos ist).

cg505
quelle
1
Hier gilt das gleiche. Hast du versucht Esc- x flyspell-mode? Das funktioniert bei mir.
Masroor
Nun ja. Ich beginne immer flyspell-modemit M-x, aber es ESC xscheint keinen Unterschied zu machen.
CG505
1
Hier gilt das gleiche. Ich habe jedoch eine Standard-Tastenkombination gefunden, die für beide Versionen funktioniert ESC-TAB.
McNisse
Ja, ESC TABoder M-TABbeide arbeiten für mich. Danke für den Tipp @McNisse.
CG505

Antworten:

4

Es sieht so aus, als ob der wichtige Teil dieser Frage bereits in den Kommentaren beantwortet wurde, aber um die Grundursache anzusprechen, falls Sie neugierig sind, denke ich, Strg-. funktioniert in einem Terminal aufgrund einiger Einschränkungen der Terminalemulatoren nicht. In einem Standardterminal ist Strg definiert, um den ASCII-Code der Taste zu senden, die Sie minus 64 drücken (aus diesem Grund sendet Strg-J (74) beispielsweise Zeilenumbruch (10) und Strg-I (73) Tab (9) ). Da der ASCII-Code der Periode 46 ist, würde das Subtrahieren von 64 -18 ergeben, was ungültig ist, da es negativ ist und es keine negativen ASCII-Codes gibt und daher nichts für Emacs zu empfangen und zu verstehen ist.

Wenn Sie Emacs im Fenstermodus ausführen, wird der Terminalemulatormechanismus umgangen, und stattdessen wird die robustere Tastaturbehandlung von X11 verwendet, die dunkelere Tastenanschläge verarbeiten kann (anstatt jeden Tastenanschlag auf ein ASCII-Zeichen zu reduzieren, erhält das Programm die ursprüngliche Taste plus alle zutreffenden Modifikatoren separat). Es ist also wahrscheinlich unmöglich, tty-basierte Emacs dazu zu bringen, mit Strg- umzugehen. es sei denn, Sie nehmen benutzerdefinierte Änderungen an Ihrem Terminalemulator (und wahrscheinlich auch an Emacs) vor.

Paul
quelle
1
Diese Antwort ist wirklich interessant. Ich habe mich eingehender damit befasst und herausgefunden, dass DEC VT100 ähnlich, aber genau genommen anders funktioniert. Folgendes wird ausgeführt, wenn Steuertaste und andere Taste gleichzeitig gedrückt werden: 1) Nachschlagen der ASCII-Tabelle mit dem Tastatur-Scan-Code 2) Nachschlagen der Tabelle mit gültigen Steuercodes durch ASCII 3) Wenn sie gültig ist, maskieren Sie Bit5 und Bit6 des ASCII 4 ) versenden. Strg-J, Strg-J und Strg-* könnten also alle LF senden, aber die Gültigkeitsprüfung begrenzte die Kombinationen. Siehe Technisches Handbuch DEC VT100, Abschnitt 4-43 (PDF Seite 93).
Kenji Noguchi
Ich kann 'C-.'gut mit Emacs in xterm erfassen, aber nicht mit urxvt oder st. Irgendeine Idee, warum das so sein könnte?
StewSquared
0

Während die obige Antwort eine gute Erklärung dafür gibt, warum es nicht funktioniert, geht es nicht wirklich darum, wie es funktioniert. Für iTerm2Sie kann dies durch lösen für die Escape - Sequenz das Hinzufügen einer Tastenzuordnung . Ich stelle mir vor, es würde etwas Ähnliches in terminatoroder gebengnome-terminal

Chris
quelle