aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--display.c15
-rw-r--r--display.h1
-rw-r--r--vt100.c5
3 files changed, 21 insertions, 0 deletions
diff --git a/display.c b/display.c
index 1009eff..56a2ed3 100644
--- a/display.c
+++ b/display.c
@@ -63,3 +63,18 @@ void runes_display_show_string(RunesTerm *t, char *buf, size_t len)
runes_window_backend_flush(t);
}
}
+
+void runes_display_backspace(RunesTerm *t)
+{
+ double x, y;
+ double fontx, fonty, ascent;
+
+ runes_display_move_to(t, t->row, t->col - 1);
+ cairo_set_source_rgb(t->cr, 1.0, 1.0, 1.0);
+ cairo_get_current_point(t->cr, &x, &y);
+ runes_display_get_font_dimensions(t, &fontx, &fonty, &ascent);
+ cairo_rectangle(t->cr, x, y - ascent, x + fontx, y);
+ cairo_fill(t->cr);
+ cairo_set_source_rgb(t->cr, 0.0, 0.0, 1.0);
+ runes_display_move_to(t, t->row, t->col);
+}
diff --git a/display.h b/display.h
index 2ea1d1b..4966e95 100644
--- a/display.h
+++ b/display.h
@@ -6,5 +6,6 @@ void runes_display_get_term_size(RunesTerm *t, int *row, int *col, int *xpixel,
void runes_display_get_position(RunesTerm *t, int *row, int *col);
void runes_display_move_to(RunesTerm *t, int row, int col);
void runes_display_show_string(RunesTerm *t, char *buf, size_t len);
+void runes_display_backspace(RunesTerm *t);
#endif
diff --git a/vt100.c b/vt100.c
index 8231fa3..c47f12c 100644
--- a/vt100.c
+++ b/vt100.c
@@ -16,6 +16,11 @@ static char *runes_vt100_handle_ctrl_char(RunesTerm *t, char *buf, size_t len)
UNUSED(len);
switch (buf[0]) {
+ case '\010': { /* BS */
+ runes_display_backspace(t);
+ buf++;
+ break;
+ }
case '\011': { /* TAB */
int row, col;