Emacs C-. no funciona en la terminal

11

Yo uso GNU Emacs, generalmente como el emacs -nwque lanza la versión del terminal (a diferencia de la versión GUI en ventana).

Escribo documentos escolares, LaTeXasí que los uso flyspell-modepara la corrección ortográfica en emacs. Esto funciona bien en la versión GUI, pero en un terminal, me encuentro con problemas con la pulsación de tecla C-.( Ctrl- .). En un tty, esto no hace nada, y en terminatoro gnome-terminal, esto simplemente ingresa un ".".

¿Qué puedo hacer para que haga lo que hace en la versión en ventana (mostrar sugerencias de ortografía para una palabra mal escrita)?

EDITAR: en caso de que esto sea importante, estoy usando Ubuntu 12.04 con Emacs 23.3.1 (que creo que es el valor predeterminado del repositorio 12.04).

cg505
fuente
1
Igual que aquí. ¿Usted intentó Esc- x flyspell-mode? Esto funciona para mi.
Masroor
Bueno, sí. Siempre comienzo flyspell-modecon M-x, pero ESC xno parece hacer la diferencia.
cg505
1
Igual que aquí. Sin embargo, encontré una combinación de teclas predeterminada que funciona para ambas versiones ESC-TAB.
McNisse
Sí, ESC TABo M-TABambos funcionan para mí. Gracias por el consejo @McNisse.
cg505

Respuestas:

4

Parece que la parte importante de esta pregunta ya se respondió en los comentarios, pero para abordar la causa raíz en caso de que tenga curiosidad, creo que ctrl-. no funciona en una terminal debido a algunas limitaciones de los emuladores de terminal. En un terminal estándar, ctrl se define para enviar el código ASCII de la tecla que presiona menos 64 (es por eso que ctrl-J (74) envía nueva línea (10) y ctrl-I (73) envía la pestaña (9), por ejemplo ) Como el código ASCII del período es 46, restar 64 daría -18, lo que no es válido porque es negativo y no hay códigos ASCII negativos y, por lo tanto, nada para que emacs reciba y comprenda.

Cuando ejecuta emacs en modo de ventana, se omite el mecanismo del emulador de terminal y, en su lugar, se utiliza el manejo más robusto del teclado de X11, que puede manejar pulsaciones de teclas más oscuras (en lugar de reducir cada pulsación de tecla a un carácter ASCII, el programa recibe la tecla original más todos los modificadores aplicables, por separado). Por lo tanto, probablemente sea imposible hacer que emacs basado en tty maneje ctrl-. a menos que realice modificaciones personalizadas en su emulador de terminal (y probablemente también en emacs).

Pablo
fuente
1
Esta respuesta es realmente interesante. Profundicé más y descubrí que DEC VT100 funciona de manera similar pero diferente, estrictamente hablando. Esto es lo que hace cuando la tecla de control y otras teclas se presionan juntas: 1) buscar en la tabla ASCII por el código de escaneo del teclado 2) buscar la tabla de códigos de control válidos por el ASCII 3) si es válido, enmascarar bit5 y bit6 del ASCII 4 ) mandar. Entonces ctrl-J, ctrl-j y ctrl- * podrían enviar LF pero la verificación de validez limitó las combinaciones. Consulte la sección 4-43 del manual técnico DEC VT100 (PDF página 93).
Kenji Noguchi
Puedo capturar 'C-.'muy bien con emacs en xterm pero no con urxvt o st. ¿Alguna idea de por qué ese podría ser el caso?
stewSquared