Comment imprimer les raccourcis keyboard sous une forme lisible par l'homme?

Il serait très utile d'avoir un moyen convivial d'avoir une vue d'set des raccourcis keyboard actuellement définis. En d'autres termes, étant donné les lignes /etc/inputrc

 "\e[A": history-search-backward "\e[11~": backward-word 

et ~/.inputrc lignes

 "\e[A": kill-word "\e\eOD": backward-word 

il ne devrait pas être nécessaire de passer par les deux files pour comprendre que \e[A a été surchargé, qu'il y a deux raccourcis alternatifs pour le backward-word , que \e\eOD signifie … tout ce que cela signifie, et qui kill-word signifie en fait supprimer à la fin du mot courant (ou suivant). La solution idéale serait imprimer quelque chose comme

 Delete until next word boundary: Meta-A Go to the previous word boundary: F1; Ctrl-Left Search history backwards: Meta-Up 

(Espérons que quelqu'un avec une meilleure compréhension des séquences d'échappement peut résoudre les raccourcis.)

Existe-t-il un programme Linux pour imprimer ceci?

Je suppose qu'un tel programme pourrait être un OS, un kernel, ou même un keyboard dépendant, donc il faudrait peut-être une configuration étendue (un programme qui interroge l'user via showkey ou xev pour appuyer sur différentes touches pour déterminer quelles séquences d'échappement sont réellement envoyées, par exemple), mais ce serait un prix acceptable pour finalement comprendre comment utiliser efficacement les raccourcis terminaux.

La réponse courte est non, je suis sûr que ce programme n'existe pas.

Vous pourriez en principe en build un; il faudrait regarder la configuration readline et l'émulateur de terminal (le kernel et le matériel ne sont pas impliqués).

bind -P | grep 'can be found' bind -P | grep 'can be found' dans Bash répertorie les raccourcis keyboard.

 abort can be found on "\Cg", "\Cx\Cg", "\e\Cg". accept-line can be found on "\Cj", "\Cm". 

Pour avoir un nom plus descriptif pour la command, vous devez parsingr la documentation bash ou readline.

La correspondance entre les séquences de touches et les keys est déterminée par le terminal (généralement l'émulateur de terminal). Il n'est souvent pas facilement disponible, et quand c'est la méthode pour l'get est entièrement spécifique au terminal.

Vous pouvez vous rapprocher d'Emacs: lancez emacs -q -nw dans un terminal, puis appuyez sur Ctrl + H , C (la command describe-key-briefly ) puis la séquence de touches ( \e est Escape ). Cela vous montre la key de fonction reconstruite, le cas échéant, et ce que fait la key dans Emacs. Les bindings par défaut de Readline sont fortement inspirées par Emacs, si souvent la fonction dans Emacs est similaire à la fonction readline, mais pas toujours. Exemple:

 Ctrl+HC ESC [ A <up> runs the command previous-line 

J'ai eu le même problème étant incapable de digérer les plusieurs pages de la sortie de la command embeddede bind Bash, en particulier lorsque l'option -p donnée.

Je suis donc venu avec les deux fonctions suivantes que j'ai définies dans mon file .bashrc :

 alias def=function alias val="declare -r" alias var=declare alias final="readonly -f" def keyfunctions { if (( "$#" )); then var a OPTIND=1 getopts ":auI:E:" a else var a=E OPTIND=1 OPTARG='self-insert$|digit-argument$|do-lowercase-version$' fi case "$a" in a) bind -p |\ sort |\ pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))" ;; I) bind -p |\ grep -E "$OPTARG" |\ sort |\ pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))" ;; E) bind -p |\ grep -Ev '(^$)|^#|'"$OPTARG" |\ sort |\ pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))" ;; u|*) echo >&2 "$FUNCNAME: Usage: $FUNCNAME [-a|-i <eregex>|-e <eregex>]" echo >&2 "$FUNCNAME: Invoking $FUNCNAME without arguments assumes -E'self-insert$|digit-argument$|do-lowercase-version$'." val -ib="$((OPTIND-1))" if [[ "$OPTARG" == : ]]; then echo >&2 "$FUNCNAME: Error: Invalid argument \"$OPTARG\" at position $b." elif [[ "$OPTARG" == ? ]]; then echo >&2 "$FUNCNAME: Error: Invalid option \"$OPTARG\" at position $b." fi ;; esac } final keyfunctions def keymacros { bind -s |\ sort |\ pr -l1 -W"$COLUMNS" -"$(($COLUMNS/40))" } final keyfunctions 

Il suffit d'exécuter les deux définitions ci-dessus et de décider si vous aimez la sortie sortingée (sortingée) et tabulée ( pr -t ). La width des colonnes est fixée le nombre de colonnes se rapporte au rapport de $(($COLUMNS/$width)) .