From f05e40a30a008e0197fe0c8b192f399c448a95c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Sat, 8 Aug 2015 23:51:29 +0200 Subject: Don't interpret an n* as (n-1)*- --- driver-csi.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'driver-csi.c') diff --git a/driver-csi.c b/driver-csi.c index 1873e0d..7f6b008 100644 --- a/driver-csi.c +++ b/driver-csi.c @@ -708,7 +708,7 @@ free_driver (void *info) static termo_result_t peekkey_csi (termo_t *tk, termo_csi_t *csi, - size_t introlen, termo_key_t *key, int force, size_t *nbytep) + size_t introlen, termo_key_t *key, int flags, size_t *nbytep) { (void) csi; @@ -720,7 +720,7 @@ peekkey_csi (termo_t *tk, termo_csi_t *csi, termo_result_t ret = parse_csi (tk, introlen, &csi_len, arg, &args, &cmd); if (ret == TERMO_RES_AGAIN) { - if (!force) + if (!(flags & PEEKKEY_FORCE)) return TERMO_RES_AGAIN; (*tk->method.emit_codepoint) (tk, '[', key); @@ -789,13 +789,13 @@ peekkey_csi (termo_t *tk, termo_csi_t *csi, static termo_result_t peekkey_ss3 (termo_t *tk, termo_csi_t *csi, size_t introlen, - termo_key_t *key, int force, size_t *nbytep) + termo_key_t *key, int flags, size_t *nbytep) { (void) csi; if (tk->buffcount < introlen + 1) { - if (!force) + if (!(flags & PEEKKEY_FORCE)) return TERMO_RES_AGAIN; (*tk->method.emit_codepoint) (tk, 'O', key); @@ -847,7 +847,7 @@ peekkey_ss3 (termo_t *tk, termo_csi_t *csi, size_t introlen, static termo_result_t peekkey (termo_t *tk, void *info, - termo_key_t *key, int force, size_t *nbytep) + termo_key_t *key, int flags, size_t *nbytep) { if (tk->buffcount == 0) return tk->is_closed ? TERMO_RES_EOF : TERMO_RES_NONE; @@ -857,14 +857,16 @@ peekkey (termo_t *tk, void *info, // Now we're sure at least 1 byte is valid unsigned char b0 = CHARAT (0); + if (b0 == 0x1b && tk->buffcount == 1) + return TERMO_RES_AGAIN; if (b0 == 0x1b && tk->buffcount > 1 && CHARAT (1) == '[') - return peekkey_csi (tk, csi, 2, key, force, nbytep); + return peekkey_csi (tk, csi, 2, key, flags, nbytep); if (b0 == 0x1b && tk->buffcount > 1 && CHARAT (1) == 'O') - return peekkey_ss3 (tk, csi, 2, key, force, nbytep); + return peekkey_ss3 (tk, csi, 2, key, flags, nbytep); if (b0 == 0x8f) - return peekkey_ss3 (tk, csi, 1, key, force, nbytep); + return peekkey_ss3 (tk, csi, 1, key, flags, nbytep); if (b0 == 0x9b) - return peekkey_csi (tk, csi, 1, key, force, nbytep); + return peekkey_csi (tk, csi, 1, key, flags, nbytep); return TERMO_RES_NONE; } -- cgit v1.2.3