Por que Ctrl + me Ctrl + q não são usados ​​nos atalhos do bash?

15

Recentemente, estive revisando as teclas de atalhos do bash e tentando encontrar uma apropriada para a minha chave de ativação do tmux.

Acho interessante isso ctrl + me ctrl + qnão é usado em atalhos do bash, de acordo com https://en.wikipedia.org/wiki/Bash_(Unix_shell) .

Por que eles não são usados? Eu sinto que ctrl + mé bastante útil.

Essas duas combinações são projetadas para DIY (define it yourself)uso em design ? Ou há outra história?

zen
fonte
1
Usar ALT + mé ainda mais conveniente.
Rolf

Respostas:

16

Ctrl + M envia o mesmo caractere (RET) da tecla Enter no terminal. Os programas não têm como diferenciá-los, portanto, essas chaves não podem ser configuradas separadamente.

Ctrl + Q já é usado para o XON por padrão, portanto, não pode ser usado pelo Bash, mas você ainda deve poder usá-lo no tmux, porque o tmux usa o modo de entrada bruta.

Um programa da GUI pode ler do teclado que a tecla m foi pressionada com o modificador Ctrl e usar Ctrl + m como atalho, mas um shell ou qualquer programa do terminal recebe as combinações de teclas Ctrl + Key da mesma forma que caracteres ascii de 0 a 26

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

e assim por diante. Você pode tentar isso para ver os valores

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

Para inserir os valores, pressione Ctrl + v antes de Ctrl + [af] para que eles não sejam interpretados como um valor bruto.

Quando você olha para a tabela ascii (7), pode ver os códigos de controle em uma tabela com os caracteres correspondentes @ .. Z à esquerda. Por exemplo

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

ou

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

A próxima camada que interpreta os códigos de controle antes do bash é stty (altere e imprima as configurações do 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;

veja stty (1) para os significados de lnextou starte stop.

Veja também o readline (3), pois o bash e outros programas GNU cli usam essa biblioteca para controlar as linhas de entrada e, claro, o bash (1) / READLINE, a seção readline da página de manual do bash.

Nota: XYZ (NUM) significa a página de manual XYZ da seção NUM, portanto, o resultado de man NUM XYZ.

user4098326
fonte
1
O Bash tem uma ligação padrão para Cs (XOFF), então eles também podem ter colocado uma para Cq.
Gilles 'SO- stop be evil'
Na verdade, por padrão, a biblioteca GNU Readline usada pelo Bash se liga C-qà mesma coisa que C-vum clone da função Emacs, quoted-insertútil para descobrir os códigos de escape gerados por chaves e combinações de teclas. Aqui está a parte relevante do manual Readline: tiswww.case.edu/php/chet/readline/readline.html#SEC9
ssokolow