summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto E. Vargas Caballero <k0ga@shike2.com>2012-11-13 20:05:02 +0100
committerRoberto E. Vargas Caballero <k0ga@shike2.com>2012-11-13 20:05:02 +0100
commit620e3bb39ebe617b69b5cb1323b4f47c2f699527 (patch)
tree9edda47c23943e3479cf450abfac07cd9e45f5f9
parent44597b359e030d86e16ab9b6510f54366d57e5ac (diff)
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(-)
-rw-r--r--TODO6
-rw-r--r--config.def.h102
-rw-r--r--st.info70
3 files changed, 169 insertions, 9 deletions
diff --git a/TODO b/TODO
index f56a6d9..e1168a1 100644
--- a/TODO
+++ b/TODO
@@ -5,11 +5,7 @@ vt emulation
* color definition in CSI
* implement CSI parsing
* make the keypad keys really work
- * kf0 .. kf44
- * kend, kel, kent, kfnd, ked, kext
- * kNXT, kPRV
- * ka1, ka3, kb2
-* add arrow keys handling
+ * kel, kfnd, ked, kext
code & interface
----------------
diff --git a/config.def.h b/config.def.h
index 3d406d4..d6103b5 100644
--- a/config.def.h
+++ b/config.def.h
@@ -77,6 +77,49 @@ static unsigned int defaultucs = 257;
/* key, mask, output, keypad, cursor, crlf */
static Key key[] = {
/* 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_Up, XK_NO_MOD, "\033[A", 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, ControlMask, "\033[1;5C", 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, "\r\n", 0, 0, +1},
{ XK_Return, Mod1Mask, "\033\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, ShiftMask, "\033[2;2~", 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, ShiftMask, "\033[1;2F", 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, ShiftMask, "\033[6;2~", 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 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, /* 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. */
diff --git a/st.info b/st.info
index be2a47e..4a05160 100644
--- a/st.info
+++ b/st.info
@@ -49,11 +49,24 @@ st| simpleterm,
invis=\E[8m,
is2=\E[4l\E>,
it#8,
+ ka1=\E[E,
+ ka3=\E[5~,
+ kc1=\E[4~,
+ kc3=\E[6~,
kbs=\177,
+ kcbt=\E[Z,
+ kb2=\EOu,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
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,
kRIT=\E[1;2C,
kind=\E[1;2B,
@@ -61,9 +74,6 @@ st| simpleterm,
kdch1=\E[3~,
kich1=\E[2~,
kend=\E[4~,
- kf10=\E[21~,
- kf11=\E[23~,
- kf12=\E[24~,
kf1=\EOP,
kf2=\EOQ,
kf3=\EOR,
@@ -73,6 +83,60 @@ st| simpleterm,
kf7=\E[18~,
kf8=\E[19~,
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~,
knp=\E[6~,
kmous=\E[M,