aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/handlekeys.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--handlekeys.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/handlekeys.c b/handlekeys.c
index 4938039..e605966 100644
--- a/handlekeys.c
+++ b/handlekeys.c
@@ -276,6 +276,8 @@ void handle_keys(long extra, int (*handle_event)(long extra, struct keyevent *ev
276 if (pendingEsc) continue; 276 if (pendingEsc) continue;
277 277
278 // Check if it's a CSI before we check for the known key sequences. 278 // Check if it's a CSI before we check for the known key sequences.
279 // C29B is the UTF8 encoding of CSI.
280 // In all cases we reduce CSI to 9B to keep the keys table shorter.
279 if ((('\x1B' == buffer[0]) && ('[' == buffer[1])) 281 if ((('\x1B' == buffer[0]) && ('[' == buffer[1]))
280 || (('\xC2' == buffer[0]) && ('\x9B' == buffer[1]))) 282 || (('\xC2' == buffer[0]) && ('\x9B' == buffer[1])))
281 { 283 {
@@ -305,25 +307,32 @@ void handle_keys(long extra, int (*handle_event)(long extra, struct keyevent *ev
305 if (csi) 307 if (csi)
306 { 308 {
307 /* ECMA-048 section 5.2 defines this, and is unreadable. 309 /* ECMA-048 section 5.2 defines this, and is unreadable.
308 * General CSI format - CSI [private] n1 ; n2 [extra] final 310 * So I'll include some notes here that tries to simplify that.
309 * private 0x3c to 0x3f "<=>?" If first byte is one of these, 311 *
310 * this is a private command, if it's 312 * The CSI format is - CSI [private] n1 ; n2 [extra] final
311 * one of the other n1 ones, 313 * Each of those parts, except for the initial CSI bytes, is an ordinary
312 * it's not private. 314 * ASCII character.
313 * n1 0x30 to 0x3f "01234567890:;<=>?" 315 *
314 * ASCII digits forming a "number" 316 * The optional [private] part is one of these characters "<=>?".
315 * 0x3a ":" Used for floats, not expecting any. 317 * If the first byte is one of these, then this is a private command, if
316 * Could also be used as some other sort of 318 * it's one of the other n1 ones, it's not private.
317 * inter digit separator. 319 *
318 * 0x3b [;] Separates the parameters. 320 * Next is a semi colon separated list of parameters (n1, n2, etc), which
319 * extra 0x20 to 0x2f [ !"#$%&'()*+,-./] 321 * can be any characters from this set "01234567890:;<=>?". What the non
320 * Can be multiple, likely isn't. 322 * digit ones mean is up to the command. Parameters can be left out, but
321 * final 0x40 to 0x7e "@A .. Z[\]^_`a .. z{|}~" 323 * their defaults are command dependant.
322 * It's private if 0x70 to 0x7e "p .. z{|}~" 324 *
323 * Though the "private" ~ is used for key codes. 325 * Next is an optional [extra] part from this set of characters
324 * We also have SS3 "\x1BO" for other keys, 326 * "!#$%&'()*+,-./", which includes double quotes. Can be many of these,
325 * but that's not a CSI. 327 * likely isn't.
326 * C0 controls, DEL (0x7f), or high characters are undefined. 328 *
329 * Finally is the "final" from this set of characters "@[\]^_`{|}~", plus
330 * upper and lower case letters. It's private if it's one of these
331 * "pqrstuvwxyz{|}~". Though the "private" ~ is used for key codes.
332 *
333 * A full CSI command is the private, extra, and final parts.
334 *
335 * Any C0 controls, DEL (0x7f), or higher characters are undefined.
327 * TODO - So abort the current CSI and start from scratch on one of those. 336 * TODO - So abort the current CSI and start from scratch on one of those.
328 */ 337 */
329 338