Por ejemplo:
"\e[1;5C"
"\e[Z"
"\e-1\C-i"
Solo conozco partes y piezas, como \e
soportes para escape y C-
para Ctrl, pero ¿cuáles son estos números ( 1
) y letras ( Z
)? ¿Cuáles son los ;
, [
y -
las indicaciones para?
¿Hay solo prueba y error, o hay una lista completa de códigos de teclas bash y una explicación de su sintaxis?
bind -p
.Respuestas:
Esas son secuencias de caracteres enviados por su terminal cuando presiona una tecla determinada. No tiene nada que ver con bash o readline per se, pero querrá saber qué secuencia de caracteres envía una tecla determinada o una combinación de teclas si desea configurar
readline
para hacer algo al presionar una tecla determinada.Cuando presiona la Atecla, generalmente los terminales envían el carácter
a
(0x61). Si presiona<Ctrl-I>
o<Tab>
, generalmente envía el^I
carácter también conocido comoTAB
o\t
(0x9). La mayoría de las teclas de función y navegación generalmente envían una secuencia de caracteres que comienza con^[
(control- [), también conocido comoESC
o\e
(0x1b, 033 octal), pero la secuencia exacta varía de terminal a terminal.La mejor manera de averiguar qué envía una tecla o combinación de teclas para su terminal, es ejecutarla
sed -n l
y escribirla seguido por Enterel teclado. Entonces verás algo como:La primera línea es causada por el terminal local
echo
realizado por el dispositivo terminal (puede que no sea confiable ya que la configuración del dispositivo terminal lo afectaría).La segunda línea sale por
sed
. El$
no se debe incluir, es solo para mostrarle dónde está el final de la línea.Por encima de eso significa que Ctrl-Up(que he pulsado) enviar a los 6 caracteres
ESC
,[
,1
,;
,5
yA
(0x1b 0x5b 0x31 0x35 0x41 0x3B)La
terminfo
base de datos registra una serie de secuencias para varias claves comunes para una serie de terminales (en función del$TERM
valor).Por ejemplo:
Te diría qué secuencia de escape se envía
rxvt
al presionar la Deletetecla.Puede buscar qué tecla corresponde a una secuencia dada con su terminal actual con
infocmp
(aquí suponiendoncurses
infocmp):Las combinaciones de teclas como Ctrl-Upno tienen entradas correspondientes en la
terminfo
base de datos, por lo que para saber qué envían, lea la fuente o la documentación del terminal correspondiente o pruébelo con elsed -n l
método descrito anteriormente.fuente
\e-1\C-i
es una pestaña hacia atrás, porquecontrol
ei
inserta una ficha yescape
seguido por-1
dice bash para hacerlo hacia atrás una vez (I Goggled esto y encontré algunas cosas acercadigit-arguments
).$ sed -n 1
sed: -e expression #1, char 1: missing command
tput smkx
, su terminal envía\e[OD
(kcub1
) y despuéstput rmkx
,\e[D
(cub1
, el mismo código que la secuencia que mueve el cursor hacia la izquierda, para que el eco de esas teclas mueva el cursor. Intentestty -echoctl; tput rmkx; sleep inf
y verá las teclas de flecha mueven el cursor cuando no está en modo de teclado ).Se proporciona a través de la biblioteca gnu readline. deberías buscar en man 3 readline para descubrir su descripción.
Parece que también necesita información sobre lo que significan los me gusta de los códigos de escspe
\[A
. Puede encontrar esta información en el artículo de código de escape ANSI de Wikipedia .fuente
\[A
está en la tabla "Códigos CSI" dentro de la fila: "CSI n A"[Z
,[1;5C
o-1
?¿Estos códigos provienen de la misma fuente? El último parece un enlace de línea de lectura de GNU. Eso es lo que el usuario envía a un bash (ver la respuesta de rush). Sin embargo, las dos primeras se parecen más a las secuencias de control de terminal (aunque la primera sería una de formato incorrecto). Eso es lo que bash u otro programa envían de vuelta al emulador de terminal para controlar los movimientos del cursor, los colores del texto y similares.
fuente
La forma más fácil que he encontrado para verificar qué secuencia de escape es generada por una combinación de teclas o teclas es presionar Ctrl+ ven un terminal y luego presionar la tecla / combinación que desea conocer.
Obtendrá una secuencia como
^[Oa
y usted tiene que traducir el^[
a\e
o\033
o\x1b
o cualquier otra representación de sus Espera sistema de combinación de teclas para el carácter de escape.Comenzó como una función de Emacs llamada
quoted-insert
y, dado que las combinaciones de teclas predeterminadas para Bash y Zsh imitan a Emacs, también la copiaron.Bash lo obtiene a través de la biblioteca de entrada GNU Readline que
import rlcompleter
también usan otras cosas como la mejora de Python .Aquí está la descripción del manual de Readline :
Eso debería funcionar en cualquier cosa basada en GNU Readline.
En cuanto a Zsh, que usa su propia alternativa llamada ZLE, solo respeta el
C-q
enlace original de Emacs cuando está en modo Vi, irónicamente, peroC-v
aún funciona en el modo de entrada predeterminado similar a Emacs. (Busquequoted-insert
en laszshzle
páginas de manual de o zshall` y el segundo par de resultados debe enumerar las combinaciones de teclas predeterminadas).Para un mnemotécnico, aconsejo pensar en Ctrl+ vcomo pedirlo v erbatim.
fuente