¿Cómo envío C- / (es decir, barra de control) al terminal?

12

Estoy tratando de ejecutar Emacs en una terminal. He activado la "opción de uso como meta" en las preferencias del terminal, por lo que funciona alrededor del 95%.

La secuencia de teclas ctrl- / (o en la notación de Emacs C- /) es "deshacer". Esta secuencia de teclas solo hace que el terminal haga sonar una campana. ¿Cómo puedo solucionar esto?

Kevin Peterson
fuente
FWIW, esto funciona en iTerm2, iterm2.com, pero creo que me volveré a entrenar para usar ^ _ en todas partes, para ser más portátil.
Steven R. Loomis
@ StevenR.Loomis portátil? ni control- / ni control-_ funcionan bajo Android ...
Michael
@Michael dije portátil porque es representable en ASCII (ver respuesta aceptada) y por lo tanto puede transitar conexiones de red sin problemas. Además, parece ser utilizable en la mayoría de los teclados físicos que he visto. No intenté emparejar un teclado con el dispositivo Android, ¿te refieres a un teclado suave o duro?
Steven R. Loomis
@ StevenR.Loomis software ... la parte de control parece ignorarse, lo que resulta en intentos de deshacer la inserción de una barra diagonal o un guión bajo.
Michael

Respuestas:

18

El control/ no forma parte del conjunto de códigos de control estándar . No es directamente representable como una pulsación de tecla en muchas emulaciones de terminal. Tal pulsación de tecla solo es detectable correctamente en ciertos "modos de código de escaneo" o "modo de GUI" específicos de la plataforma (donde la API le dice exactamente qué teclas y modificadores se están utilizando). Su emulador de terminal está sonando porque es efectivamente una pulsación de tecla inválida.

Los códigos de control estándar solo cubren las versiones de "Control" de

  • @ A- Z [\]^_(ASCII 0 - 31), y
  • ? (ASCII 127)

En la mayoría de los programas de emulador de terminal que se ejecutan con la mayoría de los diseños de claves de EE. UU., Es posible que deba presionar Shiftpara generar algunos de los "códigos de control":

  • C- @ es ControlShift2(ya que @es Shift2)
  • C- ^ es ControlShift6(ya que ^es Shift6)
  • C-_ es ControlShift-(ya que _es Shift-)
  • Sin embargo, C-? puede no ser siempre ControlShift/(como ?es Shift/); C-? generalmente se genera por Backspace(en los teclados de Apple, la tecla etiquetada simplemente "eliminar" sin el símbolo adicional ⌦) o Delete(la que tiene ⌦ en los teclados de Apple).

En Emacs basado en tty, generalmente puede usar C-_ para en undolugar de C- /.

Chris Johnsen
fuente
1
Gracias por la respuesta completa. Voy a intentar jugar con diferentes tipos de terminales para ver si puedo hacer que funcione.
Kevin Peterson
1
¿"Diferentes tipos de terminales"? ¿Te refieres a diferentes programas de emulador de terminal, o te refieres al valor de $ TERM, que en Terminal se establece a través de Terminal> Preferencias> Configuración> [perfil]> Avanzado> Declarar terminal como ? (Todo lo que hace esa preferencia es establecer el valor de $ TERM. No cambia la operación de la emulación de terminal). Control- / es una característica de X11 y no es compatible con Cocoa o Terminal.
Chris Page
3

Ctrl- / envía 0x1f que es equivalente a Ctrl-_ desde los días de VT102. Hay muchos emuladores VT100 pero en realidad son emuladores VT102. iTerm2 funciona porque sigue este comportamiento.

Solo los emuladores que se ajustan estrictamente a la especificación VT100 no pueden enviar Ctrl- /. Creo que la aplicación Terminal es una de ellas.

VT100 enmascara 2 bits más significativos de ASCII de 7 bits cuando se presiona la tecla de control. / es 0x2f, o es 0x6f. Cuando los 2 bits están enmascarados, ambos son 0x0f. VT100 puede enviar Ctrl-o pero no Ctrl- /.

Kenji Noguchi
fuente
Esta debería ser la respuesta aceptada.
ocodo