aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
5* color definition in CSI 5* color definition in CSI
6 * implement CSI parsing 6 * implement CSI parsing
7* make the keypad keys really work 7* make the keypad keys really work
8 * kf0 .. kf44 8 * kel, kfnd, ked, kext
9 * kend, kel, kent, kfnd, ked, kext
10 * kNXT, kPRV
11 * ka1, ka3, kb2
12* add arrow keys handling
13 9
14code & interface 10code & interface
15---------------- 11----------------
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;
77/* key, mask, output, keypad, cursor, crlf */ 77/* key, mask, output, keypad, cursor, crlf */
78static Key key[] = { 78static Key key[] = {
79 /* keysym mask string keypad cursor crlf */ 79 /* keysym mask string keypad cursor crlf */
80 { XK_KP_Home, XK_NO_MOD, "\033[H", 0, 0, 0},
81 { XK_KP_Home, ShiftMask, "\033[1;2H", 0, 0, 0},
82 { XK_KP_Up, XK_NO_MOD, "\033Ox", +1, 0, 0},
83 { XK_KP_Up, XK_NO_MOD, "\033[A", 0, -1, 0},
84 { XK_KP_Up, XK_NO_MOD, "\033OA", 0, +1, 0},
85 { XK_KP_Down, XK_NO_MOD, "\033Or", +1, 0, 0},
86 { XK_KP_Down, XK_NO_MOD, "\033[B", 0, -1, 0},
87 { XK_KP_Down, XK_NO_MOD, "\033OB", 0, +1, 0},
88 { XK_KP_Left, XK_NO_MOD, "\033Ot", +1, 0, 0},
89 { XK_KP_Left, XK_NO_MOD, "\033[D", 0, -1, 0},
90 { XK_KP_Left, XK_NO_MOD, "\033OD", 0, +1, 0},
91 { XK_KP_Right, XK_NO_MOD, "\033Ov", +1, 0, 0},
92 { XK_KP_Right, XK_NO_MOD, "\033[C", 0, -1, 0},
93 { XK_KP_Right, XK_NO_MOD, "\033OC", 0, +1, 0},
94 { XK_KP_Prior, XK_NO_MOD, "\033[5~", 0, 0, 0},
95 { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0, 0},
96 { XK_KP_Begin, XK_NO_MOD, "\033[E", 0, 0, 0},
97 { XK_KP_End, XK_NO_MOD, "\033[4~", 0, 0, 0},
98 { XK_KP_End, ShiftMask, "\033[1;2F", 0, 0, 0},
99 { XK_KP_Next, XK_NO_MOD, "\033[6~", 0, 0, 0},
100 { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
101 { XK_KP_Insert, XK_NO_MOD, "\033[2~", 0, 0, 0},
102 { XK_KP_Insert, ShiftMask, "\033[2;2~", 0, 0, 0},
103 { XK_KP_Delete, XK_NO_MOD, "\033[3~", 0, 0, 0},
104 { XK_KP_Delete, ShiftMask, "\033[3;2~", 0, 0, 0},
105 { XK_KP_Multiply, XK_NO_MOD, "\033Oj", +1, 0, 0},
106 { XK_KP_Add, XK_NO_MOD, "\033Ok", +1, 0, 0},
107 { XK_KP_Enter, XK_NO_MOD, "\033OM", +1, 0, 0},
108 { XK_KP_Enter, XK_NO_MOD, "\n", -1, 0, -1},
109 { XK_KP_Enter, XK_NO_MOD, "\r\n", -1, 0, 0},
110 { XK_KP_Subtract, XK_NO_MOD, "\033Om", +1, 0, 0},
111 { XK_KP_Decimal, XK_NO_MOD, "\033On", +1, 0, 0},
112 { XK_KP_Divide, XK_NO_MOD, "\033Oo", +1, 0, 0},
113 { XK_KP_0, XK_NO_MOD, "\033Op", +1, 0, 0},
114 { XK_KP_1, XK_NO_MOD, "\033Oq", +1, 0, 0},
115 { XK_KP_2, XK_NO_MOD, "\033Or", +1, 0, 0},
116 { XK_KP_3, XK_NO_MOD, "\033Os", +1, 0, 0},
117 { XK_KP_4, XK_NO_MOD, "\033Ot", +1, 0, 0},
118 { XK_KP_5, XK_NO_MOD, "\033Ou", +1, 0, 0},
119 { XK_KP_6, XK_NO_MOD, "\033Ov", +1, 0, 0},
120 { XK_KP_7, XK_NO_MOD, "\033Ow", +1, 0, 0},
121 { XK_KP_8, XK_NO_MOD, "\033Ox", +1, 0, 0},
122 { XK_KP_9, XK_NO_MOD, "\033Oy", +1, 0, 0},
80 { XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0}, 123 { XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0},
81 { XK_Up, XK_NO_MOD, "\033[A", 0, -1, 0}, 124 { XK_Up, XK_NO_MOD, "\033[A", 0, -1, 0},
82 { XK_Up, XK_NO_MOD, "\033OA", 0, +1, 0}, 125 { XK_Up, XK_NO_MOD, "\033OA", 0, +1, 0},
@@ -98,28 +141,85 @@ static Key key[] = {
98 { XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0}, 141 { XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0},
99 { XK_Right, ControlMask, "\033[1;5C", 0, 0, 0}, 142 { XK_Right, ControlMask, "\033[1;5C", 0, 0, 0},
100 { XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0}, 143 { XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0},
144 { XK_Tab, ShiftMask, "\033[Z", 0, 0, 0},
101 { XK_Return, XK_NO_MOD, "\n", 0, 0, -1}, 145 { XK_Return, XK_NO_MOD, "\n", 0, 0, -1},
102 { XK_Return, XK_NO_MOD, "\r\n", 0, 0, +1}, 146 { XK_Return, XK_NO_MOD, "\r\n", 0, 0, +1},
103 { XK_Return, Mod1Mask, "\033\n", 0, 0, -1}, 147 { XK_Return, Mod1Mask, "\033\n", 0, 0, -1},
104 { XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1}, 148 { XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1},
105 { XK_Insert, XK_NO_MOD, "\033[2~", 0, 0, 0}, 149 { XK_Insert, XK_NO_MOD, "\033[2~", 0, 0, 0},
150 { XK_Insert, ShiftMask, "\033[2;2~", 0, 0, 0},
106 { XK_Delete, XK_NO_MOD, "\033[3~", 0, 0, 0}, 151 { XK_Delete, XK_NO_MOD, "\033[3~", 0, 0, 0},
107 { XK_Home, XK_NO_MOD, "\033[1~", 0, 0, 0}, 152 { XK_Delete, ShiftMask, "\033[3;2~", 0, 0, 0},
153 { XK_Home, XK_NO_MOD, "\033[H", 0, 0, 0},
154 { XK_Home, ShiftMask, "\033[1;2H", 0, 0, 0},
108 { XK_End, XK_NO_MOD, "\033[4~", 0, 0, 0}, 155 { XK_End, XK_NO_MOD, "\033[4~", 0, 0, 0},
156 { XK_End, ShiftMask, "\033[1;2F", 0, 0, 0},
109 { XK_Prior, XK_NO_MOD, "\033[5~", 0, 0, 0}, 157 { XK_Prior, XK_NO_MOD, "\033[5~", 0, 0, 0},
110 { XK_Next, XK_NO_MOD, "\033[6~", 0, 0, 0}, 158 { XK_Next, XK_NO_MOD, "\033[6~", 0, 0, 0},
159 { XK_Next, ShiftMask, "\033[6;2~", 0, 0, 0},
111 { XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0}, 160 { XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0},
161 { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0, 0},
162 { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0, 0},
163 { XK_F1, /* F37 */ Mod2Mask, "\033[1;6P", 0, 0, 0},
164 { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0, 0},
165 { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0, 0},
112 { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0}, 166 { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0},
167 { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0, 0},
168 { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0, 0},
169 { XK_F2, /* F38 */ Mod2Mask, "\033[1;6Q", 0, 0, 0},
170 { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0, 0},
171 { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0, 0},
113 { XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0}, 172 { XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0},
173 { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0, 0},
174 { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0, 0},
175 { XK_F3, /* F39 */ Mod2Mask, "\033[1;6R", 0, 0, 0},
176 { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0, 0},
177 { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0, 0},
114 { XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0}, 178 { XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0},
179 { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0, 0},
180 { XK_F4, /* F28 */ ShiftMask, "\033[1;5S", 0, 0, 0},
181 { XK_F4, /* F40 */ Mod2Mask, "\033[1;6S", 0, 0, 0},
182 { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0, 0},
115 { XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0}, 183 { XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0},
184 { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0, 0},
185 { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0, 0},
186 { XK_F5, /* F41 */ Mod2Mask, "\033[15;6~", 0, 0, 0},
187 { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0, 0},
116 { XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0}, 188 { XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0},
189 { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0, 0},
190 { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0, 0},
191 { XK_F6, /* F42 */ Mod2Mask, "\033[17;6~", 0, 0, 0},
192 { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0, 0},
117 { XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0}, 193 { XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0},
194 { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0, 0},
195 { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0, 0},
196 { XK_F7, /* F43 */ Mod2Mask, "\033[18;6~", 0, 0, 0},
197 { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0, 0},
118 { XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0}, 198 { XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0},
199 { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0, 0},
200 { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0, 0},
201 { XK_F8, /* F44 */ Mod2Mask, "\033[19;6~", 0, 0, 0},
202 { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0, 0},
119 { XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0}, 203 { XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0},
204 { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0, 0},
205 { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0, 0},
206 { XK_F9, /* F45 */ Mod2Mask, "\033[20;6~", 0, 0, 0},
207 { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0, 0},
120 { XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0}, 208 { XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0},
209 { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0, 0},
210 { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0, 0},
211 { XK_F10, /* F46 */ Mod2Mask, "\033[21;6~", 0, 0, 0},
212 { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0, 0},
121 { XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0}, 213 { XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0},
214 { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0, 0},
215 { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0, 0},
216 { XK_F11, /* F47 */ Mod2Mask, "\033[23;6~", 0, 0, 0},
217 { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0, 0},
122 { XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0}, 218 { XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0},
219 { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0, 0},
220 { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0, 0},
221 { XK_F12, /* F48 */ Mod2Mask, "\033[24;6~", 0, 0, 0},
222 { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0, 0},
123}; 223};
124 224
125/* Internal shortcuts. */ 225/* 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,
49 invis=\E[8m, 49 invis=\E[8m,
50 is2=\E[4l\E>, 50 is2=\E[4l\E>,
51 it#8, 51 it#8,
52 ka1=\E[E,
53 ka3=\E[5~,
54 kc1=\E[4~,
55 kc3=\E[6~,
52 kbs=\177, 56 kbs=\177,
57 kcbt=\E[Z,
58 kb2=\EOu,
53 kcub1=\EOD, 59 kcub1=\EOD,
54 kcud1=\EOB, 60 kcud1=\EOB,
55 kcuf1=\EOC, 61 kcuf1=\EOC,
56 kcuu1=\EOA, 62 kcuu1=\EOA,
63 kDC=\E[3;2~,
64 kent=\EOM,
65 kEND=\E[1;2F,
66 kIC=\E[2;2~,
67 kNXT=\E[6;2~,
68 kPRV=\E[5;2~,
69 kHOM=\E[1;2H,
57 kLFT=\E[1;2D, 70 kLFT=\E[1;2D,
58 kRIT=\E[1;2C, 71 kRIT=\E[1;2C,
59 kind=\E[1;2B, 72 kind=\E[1;2B,
@@ -61,9 +74,6 @@ st| simpleterm,
61 kdch1=\E[3~, 74 kdch1=\E[3~,
62 kich1=\E[2~, 75 kich1=\E[2~,
63 kend=\E[4~, 76 kend=\E[4~,
64 kf10=\E[21~,
65 kf11=\E[23~,
66 kf12=\E[24~,
67 kf1=\EOP, 77 kf1=\EOP,
68 kf2=\EOQ, 78 kf2=\EOQ,
69 kf3=\EOR, 79 kf3=\EOR,
@@ -73,6 +83,60 @@ st| simpleterm,
73 kf7=\E[18~, 83 kf7=\E[18~,
74 kf8=\E[19~, 84 kf8=\E[19~,
75 kf9=\E[20~, 85 kf9=\E[20~,
86 kf10=\E[21~,
87 kf11=\E[23~,
88 kf12=\E[24~,
89 kf13=\E[1;2P,
90 kf14=\E[1;2Q,
91 kf15=\E[1;2R,
92 kf16=\E[1;2S,
93 kf17=\E[15;2~,
94 kf18=\E[17;2~,
95 kf19=\E[18;2~,
96 kf20=\E[19;2~,
97 kf21=\E[20;2~,
98 kf22=\E[21;2~,
99 kf23=\E[23;2~,
100 kf24=\E[24;2~,
101 kf25=\E[1;5P,
102 kf26=\E[1;5Q,
103 kf27=\E[1;5R,
104 kf28=\E[1;5S,
105 kf29=\E[15;5~,
106 kf30=\E[17;5~,
107 kf31=\E[18;5~,
108 kf32=\E[19;5~,
109 kf33=\E[20;5~,
110 kf34=\E[21;5~,
111 kf35=\E[23;5~,
112 kf36=\E[24;5~,
113 kf37=\E[1;6P,
114 kf38=\E[1;6Q,
115 kf39=\E[1;6R,
116 kf40=\E[1;6S,
117 kf41=\E[15;6~,
118 kf42=\E[17;6~,
119 kf43=\E[18;6~,
120 kf44=\E[19;6~,
121 kf45=\E[20;6~,
122 kf46=\E[21;6~,
123 kf47=\E[23;6~,
124 kf48=\E[24;6~,
125 kf49=\E[1;3P,
126 kf50=\E[1;3Q,
127 kf51=\E[1;3R,
128 kf52=\E[1;3S,
129 kf53=\E[15;3~,
130 kf54=\E[17;3~,
131 kf55=\E[18;3~,
132 kf56=\E[19;3~,
133 kf57=\E[20;3~,
134 kf58=\E[21;3~,
135 kf59=\E[23;3~,
136 kf60=\E[24;3~,
137 kf61=\E[1;4P,
138 kf62=\E[1;4Q,
139 kf63=\E[1;4R,
76 khome=\E[1~, 140 khome=\E[1~,
77 knp=\E[6~, 141 knp=\E[6~,
78 kmous=\E[M, 142 kmous=\E[M,