From 4bdb4a0d8b0762faff0be5a415f3b97f5685c635 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 25 Apr 2014 22:05:04 -0400 Subject: implement insert/delete characters --- src/screen.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/screen.c b/src/screen.c index 94e70f9..5eef957 100644 --- a/src/screen.c +++ b/src/screen.c @@ -201,9 +201,15 @@ void runes_screen_kill_line_backward(RunesTerm *t) void runes_screen_insert_characters(RunesTerm *t, int count) { - UNUSED(t); - UNUSED(count); - fprintf(stderr, "insert_characters nyi\n"); + RunesScreen *scr = &t->scr; + struct runes_row *row = &scr->rows[scr->cur.row]; + + memmove( + &row->cells[scr->cur.col + count], &row->cells[scr->cur.col], + (scr->max.col - scr->cur.col - count) * sizeof(struct runes_cell)); + memset( + &row->cells[scr->cur.col], 0, + count * sizeof(struct runes_cell)); } void runes_screen_insert_lines(RunesTerm *t, int count) @@ -215,9 +221,15 @@ void runes_screen_insert_lines(RunesTerm *t, int count) void runes_screen_delete_characters(RunesTerm *t, int count) { - UNUSED(t); - UNUSED(count); - fprintf(stderr, "delete_characters nyi\n"); + RunesScreen *scr = &t->scr; + struct runes_row *row = &scr->rows[scr->cur.row]; + + memmove( + &row->cells[scr->cur.col], &row->cells[scr->cur.col + count], + (scr->max.col - scr->cur.col - count) * sizeof(struct runes_cell)); + memset( + &row->cells[scr->max.col - count], 0, + count * sizeof(struct runes_cell)); } void runes_screen_delete_lines(RunesTerm *t, int count) -- cgit v1.2.3-54-g00ecf