Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: key codes table.
So, using a tweaked zkbd I came up with this, I think it's pretty near
all of them:
BEGINNER'S GUIDE TO ZSH KEYBOARD ASSIGNMENTS, AKA 'KEYBOARD
BINDINGS'.
(comments, improvements, bitter denunciations welcome: rayandrews at
eastlink dot ca)
'Available' key combinations on a '101' PC keyboard attached to a PC
running 'zsh' under xfce4 under Debian Linux (I don't know who's 'in
charge'). All combinations that produce duplicate codes within the
'grey' keys have been removed except for the simplest avatar which is
shown. Note, some grey keys/combinations have '^letter' duplicates, like
'Enter' == '^M', these have not been removed. Other active combinations
were not 'available' since used by the system, even from console, eg.
'Alt+Function' keys switch terminals. Perhaps the 'Meta' key would do
more, but this is with a 101 KB. Interesting that there are far more
combinations available in DOS, such as Ctrl+Function -- all available in
DOS, none of them available in Linux, so it seems. None of the triple
key combinations (eg. 'Ctrl+Alt+Up') produced any unique codes within
the grey keys, but they do produce codes in the white keys. Interesting
anomalies: '^[[22' '^[[27' '^[[30' are 'missing', you hafta wonder why
those numbers were skipped. (Which is to say that you might expect 'F11'
to be '^[[22' not '^[[23'.)
The key codes shown are as they would be output by 'showkeys -a' or
'bindkey' at CLI. However, for some reason if you use 'bindkey' within a
script (as in '.zshrc') ' ^[ ' must be replaced with ' \e ', thus at CLI:
bindkey -s '^[[[A' 'my-command \C-m'
... bind 'F1' to 'my-command' and execute it (the ' \C-m ' simulates the
'Enter' key).
in '.zshrc':
bindkey -s '\e[25' 'my-command1 ; my command2 \C-m'
... bind 'Shift-F1' to 'my-command1' followed by 'my-command2' and
execute both of them.
COMBINATIONS USING JUST THE 'GREY' KEYS:
key[F1] = '^[[[A'
key[F2] = '^[[[B'
key[F3] = '^[[[C'
key[F4] = '^[[[D'
key[F5] = '^[[[E'
key[F6] = '^[[17~'
key[F7] = '^[[18~'
key[F8] = '^[[19~'
key[F9] = '^[[20~'
key[F10] = '^[[21~'
key[F11] = '^[[23~'
key[F12] = '^[[24~'
key[Shift-F1] = '^[[25~'
key[Shift-F2] = '^[[26~'
key[Shift-F3] = '^[[28~'
key[Shift-F4] = '^[[29~'
key[Shift-F5] = '^[[31~'
key[Shift-F6] = '^[[32~'
key[Shift-F7] = '^[[33~'
key[Shift-F8] = '^[[34~'
key[Insert] = '^[[2~'
key[Delete] = '^[[3~'
key[Home] = '^[[1~'
key[End] = '^[[4~'
key[PageUp] = '^[[5~'
key[PageDown] = '^[[6~'
key[Up] = '^[[A'
key[Down] = '^[[B'
key[Right] = '^[[C'
key[Left] = '^[[D'
key[Bksp] = '^?'
key[Bksp-Alt] = '^[^?'
key[Bksp-Ctrl] = '^H' console only.
key[Esc] = '^['
key[Esc-Alt] = '^[^['
key[Enter] = '^M'
key[Enter-Alt] = '^[^M'
key[Tab] = '^I' or '\t' unique form! can be bound, but does not
'showkey -a'.
key[Tab-Alt] = '^[\t'
COMBINATIONS USING THE WHITE KEYS:
Anomalies:
'Ctrl+`' == 'Ctrl+2', and 'Ctrl+1' == '1' in xterm.
Several 'Ctrl+number' combinations are void at console, but return codes
in xterm. OTOH Ctrl+Bksp returns '^H' at console, but is identical to
plain 'Bksp' in xterm. There are no doubt more of these little glitches
however, in the main:
White key codes are easy to understand, each of these 'normal' printing
keys has six forms:
A = 'a' (duhhh)
A-Shift = 'A' (who would have guessed?)
A-Alt = '^[a'
A-Ctrl = '^A'
A-Alt-Ctrl = '^[^A'
A-Alt-Shift = '^[A'
A-Ctrl-Shift = '^A' (Shift has no effect)
Don't forget that:
/-Shift-Ctrl = Bksp = '^?'
[-Ctrl = Esc = '^['
M-Ctrl = Enter = '^M'
I-Ctrl = Tab = '^I' or '\t'
And, we can 'stack' keybindings:
bindkey -s '^Xm' "My mistress\' eyes are nothing like the sun."
... Bind 'Ctrl-X' followed by 'm' to a nice line of poetry.
And we can flirt with madness:
bindkey -s '^Pletmenot' 'Let me not, to the marriage of true minds'
... but you hafta start something like that with a 'modifier'
character. Try it, if you like keyboard shortcuts, you can really go to
town.
QUESTIONS:
Where is it written that 'Ctrl-Bksp' gives one code at console, another
in in xterm?
Are these assignments changable?
Who designed all this, and what were they thinking at the time?
Why is it 'Alt-Function' to change terminals *at* a terminal, but
'Alt-Ctrl-Function' to change *to* a terminal from GUI?
How/where is 'Alt-Ctrl-Delete' defined?
=======================================================
Messages sorted by:
Reverse Date,
Date,
Thread,
Author