diff --git a/sys/teken/teken.c b/sys/teken/teken.c index a54c9f96e044..0613255f4388 100644 --- a/sys/teken/teken.c +++ b/sys/teken/teken.c @@ -338,10 +338,26 @@ teken_get_winsize(teken_t *t) return (&t->t_winsize); } +static void +taken_trim_cursor_pos(teken_t *t, const teken_pos_t *new) +{ + const teken_pos_t *cur; + + cur = &t->t_winsize; + + if (cur->tp_row < new->tp_row || cur->tp_col < new->tp_col) + return; + if (t->t_cursor.tp_row >= new->tp_row) + t->t_cursor.tp_row = new->tp_row - 1; + if (t->t_cursor.tp_col >= new->tp_col) + t->t_cursor.tp_col = new->tp_col - 1; +} + void teken_set_winsize(teken_t *t, const teken_pos_t *p) { + taken_trim_cursor_pos(t, p); t->t_winsize = *p; teken_subr_do_reset(t); } @@ -350,6 +366,7 @@ void teken_set_winsize_noreset(teken_t *t, const teken_pos_t *p) { + taken_trim_cursor_pos(t, p); t->t_winsize = *p; teken_subr_do_resize(t); }