GNU/Linux >> Znalost Linux >  >> Linux

Proč se v klávesových zkratkách Bash nepoužívají Ctrl+m a Ctrl+q?

Nedávno jsem kontroloval klávesové zkratky bash a snažil jsem se najít vhodnou pro můj aktivační klíč tmux.

Připadá mi zajímavé, že ctrl + m a ctrl + q se nepoužívají v klávesových zkratkách bash, podle https://en.wikipedia.org/wiki/Bash_(Unix_shell).

Proč se nepoužívají? Cítím ctrl + m je docela šikovný.

Jsou tyto dvě kombinace navrženy pro DIY (define it yourself) používání? Nebo je tu jiný příběh?

Přijatá odpověď:

Ctrl+M odešle stejný znak (RET) jako klávesa Enter v terminálu. Programy je nemají jak rozlišit, takže tyto klávesy nelze konfigurovat samostatně.

Ctrl+Q se již používá pro XON ve výchozím nastavení, takže ji nemůže používat Bash, ale měli byste ji stále moci používat v tmux, protože tmux používá režim raw input.

Program GUI mohl z klávesnice přečíst, že klávesa m byla stisknuta s modifikátorem Ctrl a použít Ctrl+m jako zkratku, ale shell nebo jakýkoli terminálový program přijímá kombinace Ctrl+Key stejně jako znaky ASCII od 0 do 26

[email protected] = 0
Ctrl+A = 1
Ctrl+B = 2

a tak dále. Můžete to zkusit a zobrazit hodnoty

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

Chcete-li zadat hodnoty, stiskněte Ctrl+v před Ctrl+[a-f], aby byly neinterpretované jako nezpracovaná hodnota.

Když se podíváte na tabulku ascii(7), můžete vidět řídicí kódy v tabulce s odpovídajícími znaky @..Z vlevo. Například

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

nebo

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

Další vrstva, která interpretuje řídicí kódy před bash, je stty (změnit a vytisknout nastavení terminálu)

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;

viz stty(1) pro významy lnext nebo start a stop .

Viz také readline(3), protože bash a další programy GNU cli používají tuto knihovnu k ovládání vstupních řádků a samozřejmě bash(1) /READLINE, sekci readline manuálové stránky bash.

Související:Uzavření vs neuzavření hodnoty proměnné do uvozovek v bash?

Poznámka:XYZ(NUM) znamená manuálovou stránku XYZ ze sekce NUM, takže výsledek man NUM XYZ .


Linux
  1. Hašování hesel a proč to potřebujeme

  2. Linux – proč používáme Su – a nejen Su?

  3. Co znamená Env X=() { :;}; Command‘ Bash dělat a proč je to nejisté?

  1. Proč je to Rm -rf a ne Rmdir -rf?

  2. Proč Deis a co to je?

  3. Bash - příkaz Datum a mezera

  1. Pokračování bash line po &&a || Zdokumentováno?

  2. Proč nemohu použít CD ve skriptu Bash?

  3. Proč se stále používá Unix, když je na něm Linux založen a Linux je zdarma?