GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi Ctrl+m et Ctrl+q ne sont-ils pas utilisés dans les raccourcis Bash ?

Récemment, j'ai passé en revue les touches de raccourcis bash et j'ai essayé d'en trouver une appropriée pour ma touche d'activation tmux.

Je trouve intéressant que ctrl + m et ctrl + q ne sont pas utilisés dans les raccourcis bash, selon https://en.wikipedia.org/wiki/Bash_(Unix_shell).

Pourquoi ne sont-ils pas utilisés ? Je sens ctrl + m est très pratique.

Ces deux combinaisons sont-elles conçues par conception pour le DIY (define it yourself) usage? Ou il y a une autre histoire ?

Réponse acceptée :

Ctrl+M envoie le même caractère (RET) que la touche Entrée dans le terminal. Les programmes n'ont aucun moyen de les distinguer, donc ces touches ne peuvent pas être configurées séparément.

Ctrl+Q est déjà utilisé pour XON par défaut, il ne peut donc pas être utilisé par Bash, mais vous devriez toujours pouvoir l'utiliser dans tmux, car tmux utilise le mode d'entrée brute.

Un programme GUI pourrait lire à partir du clavier que la touche m a été enfoncée avec le modificateur Ctrl et utiliser Ctrl+m comme raccourci, mais un shell ou tout programme de terminal reçoit les combinaisons Ctrl+Touche comme des caractères ascii de 0 à 26

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

etc. Vous pouvez essayer ceci pour voir les valeurs

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

Pour entrer les valeurs, appuyez sur Ctrl+v avant Ctrl+[a-f] pour qu'elles ne soient pas interprétées comme une valeur brute.

Lorsque vous regardez le tableau ascii(7), vous pouvez voir les codes de contrôle dans un tableau avec les caractères correspondants @..Z sur la gauche. Par exemple

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

ou

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

La couche suivante qui interprète les codes de contrôle avant bash est stty (modifier et imprimer les paramètres du 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;

voir stty(1) pour la signification de lnext ou start et stop .

Voir également readline(3) car bash et d'autres programmes GNU cli utilisent cette bibliothèque pour contrôler les lignes d'entrée et bien sûr bash(1) /READLINE, la section readline de la page de manuel de bash.

Connexe:Enfermer ou ne pas enfermer la valeur d'une variable entre guillemets en bash?

Remarque :XYZ(NUM) signifie la page de manuel XYZ de la section NUM, donc le résultat de man NUM XYZ .


Linux
  1. Bash For Loop Guide et exemples

  2. Pourquoi ne puis-je pas utiliser Cd dans un script Bash ? ?

  3. Pourquoi le Regex dans Bash ne fonctionne-t-il que s'il s'agit d'une variable et pas directement ? ?

  4. Pourquoi est-ce Rm -rf et non Rmdir -rf ?

  5. Pourquoi Deis et qu'est-ce que c'est ?

Syntaxe de l'instruction bash case et exemples

Bash pause et continuer

Commande de sortie Bash et codes de sortie

Qu'est-ce que la commande Grep sous Linux ? Pourquoi est-il utilisé et comment fonctionne-t-il ?

Bash - Commande de date et espace

Pourquoi Unix est-il toujours utilisé si Linux en est basé et que Linux est gratuit ?