aboutsummaryrefslogtreecommitdiff
path: root/sys/teken
diff options
context:
space:
mode:
Diffstat (limited to 'sys/teken')
-rw-r--r--sys/teken/teken.c17
1 files changed, 17 insertions, 0 deletions
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);
}