Por que as teclas Ctrl + me Ctrl + q não são usadas nos atalhos do bash?

14

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

Acho interessante que ctrl + m e ctrl + q não sejam usados em atalhos do bash, de acordo com link .

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) usage? Ou há outra história?

    
por Zen 04.07.2015 / 07:12

1 resposta

15

Ctrl + M envia o mesmo caractere (RET) que a 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 XON por padrão, por isso não pode ser usado pelo Bash, mas você ainda deve ser capaz de usá-lo no tmux, porque o tmux usa o modo de entrada bruto.

Um programa GUI pode ler do teclado, a tecla m foi pressionada com o modificador Ctrl e usar Ctrl + m como um atalho, mas um shell ou qualquer programa terminal recebe as combinações Ctrl + Key como 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 + [a-f] para obtê-los não interpretados como um valor bruto.

Quando você olha para a tabela ascii (7) você 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 (alterar e imprimir 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 lnext ou start e stop .

Veja também readline (3) como 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 página de manual XYZ da seção NUM, então o resultado de man NUM XYZ .

    
por 04.07.2015 / 07:50