Código de control inverso busca terminales

Tengo entendido que los terminales a menudo usan códigos de control ANSI para representar secuencias de caracteres no alfanuméricos. Por ejemplo, al editar .inputrc para Bash en Linux, es fácil encontrar secuencias de código que se vean de la siguiente manera:

 "\e[A": history-search-backward "\e[B": history-search-forward "\e[C": forward-char "\e[D": backward-char "\e[1~": beginning-of-line "\e[4~": end-of-line "\e[3~": delete-char "\e[2~": quoted-insert "\e[5C": forward-word "\e[5D": backward-word 

Los commands anteriores definen enlaces de teclas para los commands Bash history-search-backward , etc.

Ahora, en bash, puedo usar la read para ver cómo los caracteres escritos en mi keyboard se asignan a los códigos de control ANSI. Por ejemplo, si ejecuto read , y luego ingreso Ctrl-P , obtengo: ^P Del mismo modo, si ingreso Alt-W , obtengo: ^[W

Mi pregunta es: ¿hay algún progtwig, herramienta o website que haga lo contrario? Es decir, una herramienta que muestra o muestra la secuencia de teclas del keyboard que necesito escribir en mi keyboard para get una secuencia de código de control ANSI determinada. Por ejemplo, ingresar ^[W debería dar salida: Alt-W

¡Gracias!

infocmp puede ayudar. Escribe escape como \E lugar de \e ^[ .

Por ejemplo, para encontrar \e[A , que es su historial de búsqueda hacia atrás:

 $ infocmp -1x | grep -F '=\E[A,' cuu1=\E[A, $ man 5 terminfo | grep ' cuu1 ' cursor_up cuu1 up up one line 

Lo que le indica que presione el cursor hacia arriba, también conocido como flecha hacia arriba.

Tenga en count que necesitará el indicador -x (mostrado arriba) para mostrar algunas combinaciones, por ejemplo, Ctrl + <- .

Estas keys extendidas no son parte del estándar, por lo que no se enumeran en la página man de terminfo, pero están documentadas en el file terminfo .

También tenga en count que las secuencias de control varían según el terminal que utilice.

Puede get información sobre un terminal diferente utilizando infocmp -1x <terminal> , por ejemplo, infocmp -1x rxvt , infocmp -1x putty , etc.

Una vez que descubras cuál terminfo cree que tienes, las cosas serán más fáciles si configuras tu variable TERM para que coincida.

La function de cat es la forma habitual de hacerlo, ya que puede usarlo para mostrar lo que su keyboard realmente envía. Bash no utiliza ninguna de la información extendida en la database del terminal (usa un subset de las capacidades de termcap convencionales).

El inconveniente de usar cat , por supuesto, es determinar si

 ^[[A 

es ^ [ A o escape A (notando que bash proporciona un \e imprimible para representar el carácter de escape ).

En la práctica, puede ignorar lo anterior: esencialmente nadie envía los tres caracteres literales, "todos" envían ese ^[ como el carácter de escape ].

Otras lecturas:

  • ¿Cómo puedo ver lo que envía mi keyboard? (preguntas frecuentes de ncurses)
  • unmap (un progtwig que traduce escape a \E ).