From 5f2f07ed8a0ecaa2aacda59768c55e615b897cfb Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Thu, 9 Jul 2009 17:57:11 +0000 Subject: Cursor up and down should be limited by the scroll region (cuu should stop at the scroll region top if starting from below it and cud stop at the bottom if starting from above). Fixes another vttest test. --- screen-write.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'screen-write.c') diff --git a/screen-write.c b/screen-write.c index fb0cba6a..5a2a3882 100644 --- a/screen-write.c +++ b/screen-write.c @@ -232,8 +232,15 @@ screen_write_cursorup(struct screen_write_ctx *ctx, u_int ny) if (ny == 0) ny = 1; - if (ny > s->cy) - ny = s->cy; + if (s->cy < s->rupper) { + /* Above region. */ + if (ny > s->cy) + ny = s->cy; + } else { + /* Below region. */ + if (ny > s->cy - s->rupper) + ny = s->cy - s->rupper; + } if (ny == 0) return; @@ -249,8 +256,15 @@ screen_write_cursordown(struct screen_write_ctx *ctx, u_int ny) if (ny == 0) ny = 1; - if (ny > screen_size_y(s) - 1 - s->cy) - ny = screen_size_y(s) - 1 - s->cy; + if (s->cy > s->rlower) { + /* Below region. */ + if (ny > screen_size_y(s) - 1 - s->cy) + ny = screen_size_y(s) - 1 - s->cy; + } else { + /* Above region. */ + if (ny > s->rlower - s->cy) + ny = s->rlower - s->cy; + } if (ny == 0) return; -- cgit v1.2.3