Author: mesyeti <mesyeti@mesyeti.uk>
add CSI n P
source/event.h | 2 ++ source/interpreter/vt100.c | 18 ++++++++++++++++++
diff --git a/source/event.h b/source/event.h index 0882518027eaba14daeae24780aac4164687e5d6..e48735a52a1dc69fc52a9f5df8fd223f4c2347a3 100644 --- a/source/event.h +++ b/source/event.h @@ -16,6 +16,8 @@ #define EVENT_QUIT 6 #define EVENT_WINDOW_RESIZE 7 #define EVENT_TEXT_INPUT 8 +// NOTE: when my gpu crashes it spams event 1 + typedef uint8_t Event_Type; typedef struct { diff --git a/source/interpreter/vt100.c b/source/interpreter/vt100.c index d1cc1b6a2b46cd8a4ec53465ccca1d54fddce41d..a6516b8e5f4f4f0511727b4cbc468feed0d06acc 100644 --- a/source/interpreter/vt100.c +++ b/source/interpreter/vt100.c @@ -365,6 +365,24 @@ terminal->cursor = (Vec2) {x, y + TermTop(terminal)}; break; } + case 'P': { + int num = 1; + + if (num >= 1) { + num = atoi(parts[0]); + } + + BufCell* src = Buffer_Get(&terminal->buffer, terminal->cursor.x + num, terminal->cursor.y); + BufCell* dest = Buffer_Get(&terminal->buffer, terminal->cursor.x, terminal->cursor.y); + + memmove(dest, src, (terminal->buffer.width - terminal->cursor.x - num) * sizeof(BufCell)); + + Buffer_HLine( + &terminal->buffer, terminal->buffer.width - num, terminal->cursor.y, num, + BufCell_New(' ', terminal->attr) + ); + break; + } case 'J': { int op = 0;