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).


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).


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.