From 180799d2c504ab77fd1ded226b1ce6e231daff6c Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Mon, 18 Sep 2017 22:01:42 +0200 Subject: [PATCH] support the REP escape code. Closes T6042 --- src/bin/termpty.h | 1 + src/bin/termptyesc.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/bin/termpty.h b/src/bin/termpty.h index 6de8d79a..309aa4b8 100644 --- a/src/bin/termpty.h +++ b/src/bin/termpty.h @@ -93,6 +93,7 @@ struct _Termpty int circular_offset2; Eina_Unicode *buf; size_t buflen; + Eina_Unicode last_char; unsigned char oldbuf[4]; Termsave *back; size_t backsize, backpos; diff --git a/src/bin/termptyesc.c b/src/bin/termptyesc.c index 027559ba..800cdce3 100644 --- a/src/bin/termptyesc.c +++ b/src/bin/termptyesc.c @@ -1004,6 +1004,16 @@ _handle_esc_csi(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) case 'm': // color set _handle_esc_csi_color_set(ty, &b); break; + case 'b': // repeat last char + if (ty->last_char) + { + arg = _csi_arg_get(&b); + TERMPTY_RESTRICT_FIELD(arg, 1, ty->w * ty->h); + DBG("REP: repeat %d times last char %x", arg, ty->last_char); + for (i = 0; i < arg; i++) + termpty_text_append(ty, &ty->last_char, 1); + } + break; case '@': // insert N blank chars arg = _csi_arg_get(&b); TERMPTY_RESTRICT_FIELD(arg, 1, ty->w * ty->h); @@ -2049,6 +2059,7 @@ int termpty_handle_seq(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) { Eina_Unicode *cc; + Eina_Unicode last_char = 0; int len = 0; /* @@ -2163,7 +2174,10 @@ termpty_handle_seq(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) } DBG("]"); termpty_text_append(ty, c, len); + if (len > 0) + last_char = c[len-1]; end: + ty->last_char = last_char; return len; }