2016-03-30 9 views
3

Ich versuche zu verstehen, wie die Hex-Code-Sequenz für Tastaturtastenkombinationen generiert wird. So kann ich diese verwenden, um bestimmte Schlüssel an eine vim-Sitzung zu senden, die innerhalb von tmux läuft, was in iTerm2 durch die "Send Hex Code" -Funktion von iTerm2 geschieht. Dies wird jedoch sehr unübersichtlich.Ermitteln der Hex-Code-Sequenz für eine Tastenkombination

Ich habe mit diesem Artikel beginnt: iTerm2 keymaps for tmux

So, als eine Konstante und als Ausgangspunkt Ich weiß, dass CTRL-b kann als Hex-Code von 0x02 dargestellt werden.

Ich habe getestet, dass, und es funktioniert, wenn ich dies in iTerm2 einen zufälligen Schlüssel zuordnen, kann ich sehen, dass es als CTRL-b

Aber wie weiß ich den Hex-Code anderer Schlüssel zum tmux gesendet wird Kombinationen, zum Beispiel was ist der Hex-Code für SHIFT-F10? oder STRG-F5? oder STRG-m-Leerzeichen?

Ich habe eine andere Frage auf diese Frage hier im Zusammenhang gestellt: Key escape sequences not working for tmux

Antwort

4

Sie das Kommandozeilen-Tool verwenden können xxd dafür. Er liest aus STDIN und gibt einen Hex-Dump neben dem ursprünglichen Eingang, etwa so:

$ echo -n "hello world" | xxd 
0000000: 6865 6c6c 6f20 776f 726c 64    hello world 

Ein weiterer praktischer Trick ist zu wissen, dass, wenn Sie direkt ein Steuerzeichen eingeben möchten, können Sie oft in einen temporären „raw wechseln Modus "durch Voranstellen der Taste/s durch Ctrl-V (^V).Zum Beispiel kann die Hex-Codes zu erhalten, die Ctrl-b, liefen xxd darstellen, traf Ctrl-v, dann Ctrl-b, dann Enter (visuell die Eingabe von xxd ‚s Ausgang trennen), dann Ctrl-d ein EOF zu senden:

$ xxd 
^B 
0000000: 020a          .. 

der Ausgang kann so interpretiert werden, wie:

  • ersten Spalte (0000000) die
  • Offset
  • dann sehen wir 20, welcher für ^B
  • nächste ist 0a (LF)
  • und in der letzten Spalte wir der ursprüngliche Eingang entsprechende mit dem Hex-Ausgang (Punkte in diesem Fall anzeigen, nicht sichtbare Zeichen) siehe

Testing F5 und Shift- F5 auf Linux, innen tmux:

$ xxd 
^[[15~ 
^[[25~ 
0000000: 1b5b 3135 7e0a 1b5b 3235 7e0a   .[15~..[25~. 

So F5 zu interpretieren - wir sehen ESC (0x1b), gefolgt von hex-Darstellungen der aufgeführten Zeichen von einem LF beendet (0x0a):

  • 5b oder [Symbol
  • 31 oder die Zahl 1
  • 35 oder die Zahl 5
  • 7e oder das Symbol ~

Shift- F5 kann ähnlich interpretiert werden, außer dass die ANSI-Sequenz 25 anstelle von 15 verwendet.

Sie können auch den Befehl tput verwenden, siehe folgende Antwort: https://unix.stackexchange.com/a/53589

+0

Vielen Dank für die Antwort. Ich teste das jetzt. Mein Problem ist, dass ich keinen gesunden Signalfluss von der Außenwelt in die Terminalwelt bekomme. Zum Beispiel, in dem Fall oben, in iTerm2, wenn ich "xxd -p" und dann "CTRL-v" gefolgt von "F5" benutze, bekomme ich '^ [[15 ~' und einen Hex-Code. Wenn ich 'CTRL-v' gefolgt von' CTRL-F5' mache, bekomme ich '^ [[15 ~' und ein Hex. Also genau das gleiche Ergebnis. Das ist wirklich bizarr ?! :( – symbolix

+0

innerhalb des OSX nativen Terminals bekomme ich^^ [[15 ~ 'für' F5' und '^ [[25 ~' für 'SHIFT-F5', aber nichts für' STRG-F5', eigentlich für 'STRG-F5 'Ich bekomme'^M' nach einer Eingabe.So scheint es, als ob alle diese Terminals ihre eigene Art der Interpretation der Tastatursignale haben, was verwirrend ist. – symbolix