Add missed key definitions
This patch adds the keys for the keypad (in both modes, application mode or ansi mode) and function keys. It uses the same convention than xterm and instead of using the XK_Fxx values it generates them using F1-F12 and modifiers. For example: F1 -> ^[OP F1 + Shift = F13 -> ^[[1;2P F1 + Control = F25 -> ^[[1;5P F1 + Mod2 = F37 -> ^[[1;6P F1 + Mod1 = F49 -> ^[[1;3P F1 + Mod3 = F61 -> ^[[1;4P It is also important notice than the terminfo capability kIC (shifted insert key) only can be generated using the keypad keyboard, because the shorcut for selection paste is using the same combination. After this path the number of elements in the Key array becomes high, and maybe a sequencial search is not enough efficient now. --- TODO | 6 +--- config.def.h | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- st.info | 70 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 169 insertions(+), 9 deletions(-)dev
parent
44597b359e
commit
620e3bb39e
6
TODO
6
TODO
|
@ -5,11 +5,7 @@ vt emulation
|
||||||
* color definition in CSI
|
* color definition in CSI
|
||||||
* implement CSI parsing
|
* implement CSI parsing
|
||||||
* make the keypad keys really work
|
* make the keypad keys really work
|
||||||
* kf0 .. kf44
|
* kel, kfnd, ked, kext
|
||||||
* kend, kel, kent, kfnd, ked, kext
|
|
||||||
* kNXT, kPRV
|
|
||||||
* ka1, ka3, kb2
|
|
||||||
* add arrow keys handling
|
|
||||||
|
|
||||||
code & interface
|
code & interface
|
||||||
----------------
|
----------------
|
||||||
|
|
102
config.def.h
102
config.def.h
|
@ -77,6 +77,49 @@ static unsigned int defaultucs = 257;
|
||||||
/* key, mask, output, keypad, cursor, crlf */
|
/* key, mask, output, keypad, cursor, crlf */
|
||||||
static Key key[] = {
|
static Key key[] = {
|
||||||
/* keysym mask string keypad cursor crlf */
|
/* keysym mask string keypad cursor crlf */
|
||||||
|
{ XK_KP_Home, XK_NO_MOD, "\033[H", 0, 0, 0},
|
||||||
|
{ XK_KP_Home, ShiftMask, "\033[1;2H", 0, 0, 0},
|
||||||
|
{ XK_KP_Up, XK_NO_MOD, "\033Ox", +1, 0, 0},
|
||||||
|
{ XK_KP_Up, XK_NO_MOD, "\033[A", 0, -1, 0},
|
||||||
|
{ XK_KP_Up, XK_NO_MOD, "\033OA", 0, +1, 0},
|
||||||
|
{ XK_KP_Down, XK_NO_MOD, "\033Or", +1, 0, 0},
|
||||||
|
{ XK_KP_Down, XK_NO_MOD, "\033[B", 0, -1, 0},
|
||||||
|
{ XK_KP_Down, XK_NO_MOD, "\033OB", 0, +1, 0},
|
||||||
|
{ XK_KP_Left, XK_NO_MOD, "\033Ot", +1, 0, 0},
|
||||||
|
{ XK_KP_Left, XK_NO_MOD, "\033[D", 0, -1, 0},
|
||||||
|
{ XK_KP_Left, XK_NO_MOD, "\033OD", 0, +1, 0},
|
||||||
|
{ XK_KP_Right, XK_NO_MOD, "\033Ov", +1, 0, 0},
|
||||||
|
{ XK_KP_Right, XK_NO_MOD, "\033[C", 0, -1, 0},
|
||||||
|
{ XK_KP_Right, XK_NO_MOD, "\033OC", 0, +1, 0},
|
||||||
|
{ XK_KP_Prior, XK_NO_MOD, "\033[5~", 0, 0, 0},
|
||||||
|
{ XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0, 0},
|
||||||
|
{ XK_KP_Begin, XK_NO_MOD, "\033[E", 0, 0, 0},
|
||||||
|
{ XK_KP_End, XK_NO_MOD, "\033[4~", 0, 0, 0},
|
||||||
|
{ XK_KP_End, ShiftMask, "\033[1;2F", 0, 0, 0},
|
||||||
|
{ XK_KP_Next, XK_NO_MOD, "\033[6~", 0, 0, 0},
|
||||||
|
{ XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
|
||||||
|
{ XK_KP_Insert, XK_NO_MOD, "\033[2~", 0, 0, 0},
|
||||||
|
{ XK_KP_Insert, ShiftMask, "\033[2;2~", 0, 0, 0},
|
||||||
|
{ XK_KP_Delete, XK_NO_MOD, "\033[3~", 0, 0, 0},
|
||||||
|
{ XK_KP_Delete, ShiftMask, "\033[3;2~", 0, 0, 0},
|
||||||
|
{ XK_KP_Multiply, XK_NO_MOD, "\033Oj", +1, 0, 0},
|
||||||
|
{ XK_KP_Add, XK_NO_MOD, "\033Ok", +1, 0, 0},
|
||||||
|
{ XK_KP_Enter, XK_NO_MOD, "\033OM", +1, 0, 0},
|
||||||
|
{ XK_KP_Enter, XK_NO_MOD, "\n", -1, 0, -1},
|
||||||
|
{ XK_KP_Enter, XK_NO_MOD, "\r\n", -1, 0, 0},
|
||||||
|
{ XK_KP_Subtract, XK_NO_MOD, "\033Om", +1, 0, 0},
|
||||||
|
{ XK_KP_Decimal, XK_NO_MOD, "\033On", +1, 0, 0},
|
||||||
|
{ XK_KP_Divide, XK_NO_MOD, "\033Oo", +1, 0, 0},
|
||||||
|
{ XK_KP_0, XK_NO_MOD, "\033Op", +1, 0, 0},
|
||||||
|
{ XK_KP_1, XK_NO_MOD, "\033Oq", +1, 0, 0},
|
||||||
|
{ XK_KP_2, XK_NO_MOD, "\033Or", +1, 0, 0},
|
||||||
|
{ XK_KP_3, XK_NO_MOD, "\033Os", +1, 0, 0},
|
||||||
|
{ XK_KP_4, XK_NO_MOD, "\033Ot", +1, 0, 0},
|
||||||
|
{ XK_KP_5, XK_NO_MOD, "\033Ou", +1, 0, 0},
|
||||||
|
{ XK_KP_6, XK_NO_MOD, "\033Ov", +1, 0, 0},
|
||||||
|
{ XK_KP_7, XK_NO_MOD, "\033Ow", +1, 0, 0},
|
||||||
|
{ XK_KP_8, XK_NO_MOD, "\033Ox", +1, 0, 0},
|
||||||
|
{ XK_KP_9, XK_NO_MOD, "\033Oy", +1, 0, 0},
|
||||||
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0},
|
{ XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0},
|
||||||
{ XK_Up, XK_NO_MOD, "\033[A", 0, -1, 0},
|
{ XK_Up, XK_NO_MOD, "\033[A", 0, -1, 0},
|
||||||
{ XK_Up, XK_NO_MOD, "\033OA", 0, +1, 0},
|
{ XK_Up, XK_NO_MOD, "\033OA", 0, +1, 0},
|
||||||
|
@ -98,28 +141,85 @@ static Key key[] = {
|
||||||
{ XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0},
|
{ XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0},
|
||||||
{ XK_Right, ControlMask, "\033[1;5C", 0, 0, 0},
|
{ XK_Right, ControlMask, "\033[1;5C", 0, 0, 0},
|
||||||
{ XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0},
|
{ XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0},
|
||||||
|
{ XK_Tab, ShiftMask, "\033[Z", 0, 0, 0},
|
||||||
{ XK_Return, XK_NO_MOD, "\n", 0, 0, -1},
|
{ XK_Return, XK_NO_MOD, "\n", 0, 0, -1},
|
||||||
{ XK_Return, XK_NO_MOD, "\r\n", 0, 0, +1},
|
{ XK_Return, XK_NO_MOD, "\r\n", 0, 0, +1},
|
||||||
{ XK_Return, Mod1Mask, "\033\n", 0, 0, -1},
|
{ XK_Return, Mod1Mask, "\033\n", 0, 0, -1},
|
||||||
{ XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1},
|
{ XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1},
|
||||||
{ XK_Insert, XK_NO_MOD, "\033[2~", 0, 0, 0},
|
{ XK_Insert, XK_NO_MOD, "\033[2~", 0, 0, 0},
|
||||||
|
{ XK_Insert, ShiftMask, "\033[2;2~", 0, 0, 0},
|
||||||
{ XK_Delete, XK_NO_MOD, "\033[3~", 0, 0, 0},
|
{ XK_Delete, XK_NO_MOD, "\033[3~", 0, 0, 0},
|
||||||
{ XK_Home, XK_NO_MOD, "\033[1~", 0, 0, 0},
|
{ XK_Delete, ShiftMask, "\033[3;2~", 0, 0, 0},
|
||||||
|
{ XK_Home, XK_NO_MOD, "\033[H", 0, 0, 0},
|
||||||
|
{ XK_Home, ShiftMask, "\033[1;2H", 0, 0, 0},
|
||||||
{ XK_End, XK_NO_MOD, "\033[4~", 0, 0, 0},
|
{ XK_End, XK_NO_MOD, "\033[4~", 0, 0, 0},
|
||||||
|
{ XK_End, ShiftMask, "\033[1;2F", 0, 0, 0},
|
||||||
{ XK_Prior, XK_NO_MOD, "\033[5~", 0, 0, 0},
|
{ XK_Prior, XK_NO_MOD, "\033[5~", 0, 0, 0},
|
||||||
{ XK_Next, XK_NO_MOD, "\033[6~", 0, 0, 0},
|
{ XK_Next, XK_NO_MOD, "\033[6~", 0, 0, 0},
|
||||||
|
{ XK_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
|
||||||
{ XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0},
|
{ XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0},
|
||||||
|
{ XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0, 0},
|
||||||
|
{ XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0, 0},
|
||||||
|
{ XK_F1, /* F37 */ Mod2Mask, "\033[1;6P", 0, 0, 0},
|
||||||
|
{ XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0, 0},
|
||||||
|
{ XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0, 0},
|
||||||
{ XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0},
|
{ XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0},
|
||||||
|
{ XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0, 0},
|
||||||
|
{ XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0, 0},
|
||||||
|
{ XK_F2, /* F38 */ Mod2Mask, "\033[1;6Q", 0, 0, 0},
|
||||||
|
{ XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0, 0},
|
||||||
|
{ XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0, 0},
|
||||||
{ XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0},
|
{ XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0},
|
||||||
|
{ XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0, 0},
|
||||||
|
{ XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0, 0},
|
||||||
|
{ XK_F3, /* F39 */ Mod2Mask, "\033[1;6R", 0, 0, 0},
|
||||||
|
{ XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0, 0},
|
||||||
|
{ XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0, 0},
|
||||||
{ XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0},
|
{ XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0},
|
||||||
|
{ XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0, 0},
|
||||||
|
{ XK_F4, /* F28 */ ShiftMask, "\033[1;5S", 0, 0, 0},
|
||||||
|
{ XK_F4, /* F40 */ Mod2Mask, "\033[1;6S", 0, 0, 0},
|
||||||
|
{ XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0, 0},
|
||||||
{ XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0},
|
{ XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0},
|
||||||
|
{ XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0, 0},
|
||||||
|
{ XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0, 0},
|
||||||
|
{ XK_F5, /* F41 */ Mod2Mask, "\033[15;6~", 0, 0, 0},
|
||||||
|
{ XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0, 0},
|
||||||
{ XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0},
|
{ XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0},
|
||||||
|
{ XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0, 0},
|
||||||
|
{ XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0, 0},
|
||||||
|
{ XK_F6, /* F42 */ Mod2Mask, "\033[17;6~", 0, 0, 0},
|
||||||
|
{ XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0, 0},
|
||||||
{ XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0},
|
{ XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0},
|
||||||
|
{ XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0, 0},
|
||||||
|
{ XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0, 0},
|
||||||
|
{ XK_F7, /* F43 */ Mod2Mask, "\033[18;6~", 0, 0, 0},
|
||||||
|
{ XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0, 0},
|
||||||
{ XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0},
|
{ XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0},
|
||||||
|
{ XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0, 0},
|
||||||
|
{ XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0, 0},
|
||||||
|
{ XK_F8, /* F44 */ Mod2Mask, "\033[19;6~", 0, 0, 0},
|
||||||
|
{ XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0, 0},
|
||||||
{ XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0},
|
{ XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0},
|
||||||
|
{ XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0, 0},
|
||||||
|
{ XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0, 0},
|
||||||
|
{ XK_F9, /* F45 */ Mod2Mask, "\033[20;6~", 0, 0, 0},
|
||||||
|
{ XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0, 0},
|
||||||
{ XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0},
|
{ XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0},
|
||||||
|
{ XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0, 0},
|
||||||
|
{ XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0, 0},
|
||||||
|
{ XK_F10, /* F46 */ Mod2Mask, "\033[21;6~", 0, 0, 0},
|
||||||
|
{ XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0, 0},
|
||||||
{ XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0},
|
{ XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0},
|
||||||
|
{ XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0, 0},
|
||||||
|
{ XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0, 0},
|
||||||
|
{ XK_F11, /* F47 */ Mod2Mask, "\033[23;6~", 0, 0, 0},
|
||||||
|
{ XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0, 0},
|
||||||
{ XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0},
|
{ XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0},
|
||||||
|
{ XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0, 0},
|
||||||
|
{ XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0, 0},
|
||||||
|
{ XK_F12, /* F48 */ Mod2Mask, "\033[24;6~", 0, 0, 0},
|
||||||
|
{ XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Internal shortcuts. */
|
/* Internal shortcuts. */
|
||||||
|
|
70
st.info
70
st.info
|
@ -49,11 +49,24 @@ st| simpleterm,
|
||||||
invis=\E[8m,
|
invis=\E[8m,
|
||||||
is2=\E[4l\E>,
|
is2=\E[4l\E>,
|
||||||
it#8,
|
it#8,
|
||||||
|
ka1=\E[E,
|
||||||
|
ka3=\E[5~,
|
||||||
|
kc1=\E[4~,
|
||||||
|
kc3=\E[6~,
|
||||||
kbs=\177,
|
kbs=\177,
|
||||||
|
kcbt=\E[Z,
|
||||||
|
kb2=\EOu,
|
||||||
kcub1=\EOD,
|
kcub1=\EOD,
|
||||||
kcud1=\EOB,
|
kcud1=\EOB,
|
||||||
kcuf1=\EOC,
|
kcuf1=\EOC,
|
||||||
kcuu1=\EOA,
|
kcuu1=\EOA,
|
||||||
|
kDC=\E[3;2~,
|
||||||
|
kent=\EOM,
|
||||||
|
kEND=\E[1;2F,
|
||||||
|
kIC=\E[2;2~,
|
||||||
|
kNXT=\E[6;2~,
|
||||||
|
kPRV=\E[5;2~,
|
||||||
|
kHOM=\E[1;2H,
|
||||||
kLFT=\E[1;2D,
|
kLFT=\E[1;2D,
|
||||||
kRIT=\E[1;2C,
|
kRIT=\E[1;2C,
|
||||||
kind=\E[1;2B,
|
kind=\E[1;2B,
|
||||||
|
@ -61,9 +74,6 @@ st| simpleterm,
|
||||||
kdch1=\E[3~,
|
kdch1=\E[3~,
|
||||||
kich1=\E[2~,
|
kich1=\E[2~,
|
||||||
kend=\E[4~,
|
kend=\E[4~,
|
||||||
kf10=\E[21~,
|
|
||||||
kf11=\E[23~,
|
|
||||||
kf12=\E[24~,
|
|
||||||
kf1=\EOP,
|
kf1=\EOP,
|
||||||
kf2=\EOQ,
|
kf2=\EOQ,
|
||||||
kf3=\EOR,
|
kf3=\EOR,
|
||||||
|
@ -73,6 +83,60 @@ st| simpleterm,
|
||||||
kf7=\E[18~,
|
kf7=\E[18~,
|
||||||
kf8=\E[19~,
|
kf8=\E[19~,
|
||||||
kf9=\E[20~,
|
kf9=\E[20~,
|
||||||
|
kf10=\E[21~,
|
||||||
|
kf11=\E[23~,
|
||||||
|
kf12=\E[24~,
|
||||||
|
kf13=\E[1;2P,
|
||||||
|
kf14=\E[1;2Q,
|
||||||
|
kf15=\E[1;2R,
|
||||||
|
kf16=\E[1;2S,
|
||||||
|
kf17=\E[15;2~,
|
||||||
|
kf18=\E[17;2~,
|
||||||
|
kf19=\E[18;2~,
|
||||||
|
kf20=\E[19;2~,
|
||||||
|
kf21=\E[20;2~,
|
||||||
|
kf22=\E[21;2~,
|
||||||
|
kf23=\E[23;2~,
|
||||||
|
kf24=\E[24;2~,
|
||||||
|
kf25=\E[1;5P,
|
||||||
|
kf26=\E[1;5Q,
|
||||||
|
kf27=\E[1;5R,
|
||||||
|
kf28=\E[1;5S,
|
||||||
|
kf29=\E[15;5~,
|
||||||
|
kf30=\E[17;5~,
|
||||||
|
kf31=\E[18;5~,
|
||||||
|
kf32=\E[19;5~,
|
||||||
|
kf33=\E[20;5~,
|
||||||
|
kf34=\E[21;5~,
|
||||||
|
kf35=\E[23;5~,
|
||||||
|
kf36=\E[24;5~,
|
||||||
|
kf37=\E[1;6P,
|
||||||
|
kf38=\E[1;6Q,
|
||||||
|
kf39=\E[1;6R,
|
||||||
|
kf40=\E[1;6S,
|
||||||
|
kf41=\E[15;6~,
|
||||||
|
kf42=\E[17;6~,
|
||||||
|
kf43=\E[18;6~,
|
||||||
|
kf44=\E[19;6~,
|
||||||
|
kf45=\E[20;6~,
|
||||||
|
kf46=\E[21;6~,
|
||||||
|
kf47=\E[23;6~,
|
||||||
|
kf48=\E[24;6~,
|
||||||
|
kf49=\E[1;3P,
|
||||||
|
kf50=\E[1;3Q,
|
||||||
|
kf51=\E[1;3R,
|
||||||
|
kf52=\E[1;3S,
|
||||||
|
kf53=\E[15;3~,
|
||||||
|
kf54=\E[17;3~,
|
||||||
|
kf55=\E[18;3~,
|
||||||
|
kf56=\E[19;3~,
|
||||||
|
kf57=\E[20;3~,
|
||||||
|
kf58=\E[21;3~,
|
||||||
|
kf59=\E[23;3~,
|
||||||
|
kf60=\E[24;3~,
|
||||||
|
kf61=\E[1;4P,
|
||||||
|
kf62=\E[1;4Q,
|
||||||
|
kf63=\E[1;4R,
|
||||||
khome=\E[1~,
|
khome=\E[1~,
|
||||||
knp=\E[6~,
|
knp=\E[6~,
|
||||||
kmous=\E[M,
|
kmous=\E[M,
|
||||||
|
|
Loading…
Reference in New Issue