GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué no se usan Ctrl+m y Ctrl+q en los accesos directos de Bash?

Recientemente estuve revisando las teclas de atajos de bash y tratando de encontrar una adecuada para mi tecla de activación tmux.

Me parece interesante que ctrl + m y ctrl + q no se usan en atajos de bash, según https://en.wikipedia.org/wiki/Bash_(Unix_shell).

¿Por qué no se usan? me siento ctrl + m es bastante útil.

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

Respuesta aceptada:

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 forma 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 atajo, pero un shell o cualquier programa de terminal recibe las combinaciones Ctrl+Tecla como caracteres ASCII del 0 al 26

[email protected] = 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+[a-f] para que no se interpreten como un valor sin procesar.

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 (cambiar e imprimir 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 lnext o start y stop .

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

Relacionado:¿Encerrar o no encerrar el valor de una variable entre comillas en bash?

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


Linux
  1. Linux:¿por qué usamos Su y no solo Su?

  2. ¿Por qué no puedo usar Cd en un script Bash?

  3. ¿Por qué Regex en Bash funciona solo si es una variable y no directamente?

  4. ¿Por qué es Rm -rf y no Rmdir -rf?

  5. ¿Por qué Deis y qué es?

Sintaxis y ejemplos de declaraciones de caso Bash

Bash For Loop Guía y ejemplos

Bash romper y continuar

Comando de salida de Bash y códigos de salida

¿Qué es el comando Grep en Linux? ¿Por qué se usa y cómo funciona?

Bash - Comando de fecha y espacio