¿Por qué no se usan Ctrl + my Ctrl + q en los accesos directos de bash?

15

Recientemente he estado revisando las teclas de acceso directo de bash e intentando encontrar una adecuada para mi tecla de activación tmux.

Me parece interesante ctrl + my ctrl + qno se utilizan en los accesos directos de bash, de acuerdo con https://en.wikipedia.org/wiki/Bash_(Unix_shell) .

¿Por qué no se usan? Siento que ctrl + mes bastante útil.

¿Estas dos combinaciones están diseñadas por el diseño para su DIY (define it yourself)uso? ¿O hay otra historia?

zen
fuente
1
Usar ALT + mes aún más conveniente en mi humilde opinión.
Rolf

Respuestas:

16

Ctrl + M envía el mismo carácter (RET) que la tecla Intro en la terminal. Los programas no tienen forma de distinguirlos, por lo que estas teclas no se pueden configurar por separado.

Ctrl + Q ya se usa para XON de manera predeterminada, por lo que Bash no puede usarlo, pero aún debería poder usarlo en tmux, porque tmux usa el modo de entrada sin formato.

Un programa GUI podría leer desde el teclado, que la tecla m ha sido presionada con el modificador Ctrl y usar Ctrl + m como acceso directo, pero un shell o cualquier programa de terminal recibe las combinaciones Ctrl + Key como caracteres ascii de 0 a 26

Ctrl+@ = 0
Ctrl+A = 1
Ctrl+B = 2

y así. Puedes probar esto para ver los valores

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  \n

Para ingresar los valores, presione Ctrl + v antes de Ctrl + [af] para que no se interpreten como un valor bruto.

Cuando observa la tabla ascii (7), puede ver los códigos de control en una tabla con los caracteres correspondientes @ .. Z a la izquierda. Por ejemplo

015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M

o

011   9     09    HT  '\t' (horizontal tab)   111   73    49    I

La siguiente capa que interpreta los códigos de control antes de bash es stty (cambia e imprime la configuración del terminal)

stty -a
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

ver stty (1) para los significados de lnexto starty stop.

Vea también readline (3) ya que bash y otros programas GNU cli usan esa biblioteca para controlar las líneas de entrada y, por supuesto, bash (1) / READLINE, la sección readline de la página de manual de bash.

Nota: XYZ (NUM) significa la página de manual XYZ de la sección NUM, por lo que el resultado de man NUM XYZ.

user4098326
fuente
1
Bash tiene un enlace predeterminado para Cs (XOFF), por lo que podrían haber puesto también uno para Cq.
Gilles 'SO- deja de ser malvado'
En realidad, por defecto, la biblioteca GNU Readline que Bash usa se une C-qa lo mismo que C-vun clon de la función Emacs quoted-insertque es útil para descubrir los códigos de escape generados por las teclas y los combos de teclas. Aquí está la parte relevante del manual de Readline
ssokolow