Emacs C-. ne fonctionne pas dans le terminal

11

J'utilise GNU Emacs, généralement comme celui emacs -nwqui lance la version du terminal (par opposition à la version GUI fenêtrée).

J'écris des papiers scolaires LaTeXdonc j'utilise flyspell-modepour la vérification orthographique dans emacs. Cela fonctionne bien dans la version GUI, mais dans un terminal, je rencontre des problèmes avec la frappe C-.( Ctrl- .). Dans un tty, cela ne fait rien, et dans terminatorou gnome-terminal, cela entre simplement un ".".

Que puis-je faire pour lui faire faire ce qu'il fait dans la version fenêtrée (afficher les suggestions d'orthographe pour un mot mal orthographié)?

EDIT: Au cas où cela importe, j'utilise Ubuntu 12.04 avec Emacs 23.3.1 (qui, je crois, est par défaut à partir du dépôt 12.04).

cg505
la source
1
Pareil ici. Avez-vous essayé Esc- x flyspell-mode? Cela fonctionne pour moi.
Masroor
Hé bien oui. Je commence toujours flyspell-modepar M-x, mais ESC xcela ne semble pas faire de différence.
cg505
1
Pareil ici. Cependant, j'ai trouvé une liaison de touches par défaut qui fonctionne pour les deux versions ESC-TAB.
McNisse
Ouais, ESC TABou les M-TABdeux fonctionnent pour moi. Merci pour le conseil @McNisse.
cg505

Réponses:

4

Il semble que la partie importante de cette question ait déjà été répondue dans les commentaires, mais pour aborder la cause profonde au cas où vous seriez curieux, je pense ctrl-. ne fonctionne pas dans un terminal en raison de certaines limitations des émulateurs de terminaux. Dans un terminal standard, ctrl est défini pour envoyer le code ASCII de la touche sur laquelle vous appuyez moins 64 (c'est pourquoi ctrl-J (74) envoie la nouvelle ligne (10) et ctrl-I (73) envoie l'onglet (9), par exemple ). Étant donné que le code ASCII de la période est 46, la soustraction de 64 donnerait -18, ce qui n'est pas valide car il est négatif et il n'y a pas de codes ASCII négatifs et donc rien pour les emacs à recevoir et à comprendre.

Lorsque vous exécutez emacs en mode fenêtré, le mécanisme de l'émulateur de terminal est ignoré et à la place, la gestion plus robuste du clavier de X11 est utilisée, qui peut gérer des frappes plus obscures (plutôt que de réduire chaque frappe à un seul caractère ASCII, le programme reçoit la clé d'origine plus tous les modificateurs applicables, séparément). Il est donc probablement impossible de faire en sorte que les emacs basés sur tty gèrent ctrl-. sauf si vous apportez des modifications personnalisées à votre émulateur de terminal (et probablement aussi à emacs).

Paul
la source
1
Cette réponse est vraiment intéressante. J'ai creusé plus profondément et j'ai découvert que le DEC VT100 fonctionne de manière similaire mais différente à proprement parler. Voici ce qu'il fait lorsque la touche de contrôle et une autre touche sont pressées ensemble: 1) rechercher la table ASCII par le code de balayage du clavier 2) rechercher la table des codes de contrôle valides par l'ASCII 3) si elle est valide, masquer les bits 5 et 6 de l'ASCII 4 ) envoyer. Donc ctrl-J, ctrl-j et ctrl- * pouvaient tous envoyer LF mais le contrôle de validité limitait les combinaisons. Voir la section 4-43 du manuel technique du DEC VT100 (PDF page 93).
Kenji Noguchi
Je peux capturer 'C-.'très bien avec emacs dans xterm mais pas avec urxvt ou st. Une idée pourquoi cela pourrait être le cas?
stewSquared
0

Bien que la réponse ci-dessus donne une bonne explication sur la raison pour laquelle cela ne fonctionne pas, elle ne traite pas vraiment de la façon de le faire fonctionner. Car iTerm2vous pouvez résoudre ce problème en ajoutant un mappage de clé pour la séquence d'échappement . J'imagine qu'il y aurait quelque chose de similaire dans terminatorougnome-terminal

Chris
la source