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
.