From 81215e5a72bb9947505523294f58eed5ab5513f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 16 Nov 2019 12:14:58 +0100 Subject: [PATCH] term: cursor_{up,down}: limit cursor movements based on origin mode --- terminal.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/terminal.c b/terminal.c index 8b7d6fa2..98551d3f 100644 --- a/terminal.c +++ b/terminal.c @@ -1060,14 +1060,20 @@ term_cursor_right(struct terminal *term, int count) void term_cursor_up(struct terminal *term, int count) { - int move_amount = min(term->cursor.row, count); + int top = term->origin == ORIGIN_ABSOLUTE ? 0 : term->scroll_region.start; + assert(term->cursor.row >= top); + + int move_amount = min(term->cursor.row - top, count); term_cursor_to(term, term->cursor.row - move_amount, term->cursor.col); } void term_cursor_down(struct terminal *term, int count) { - int move_amount = min(term->rows - term->cursor.row - 1, count); + int bottom = term->origin == ORIGIN_ABSOLUTE ? term->rows : term->scroll_region.end; + assert(bottom >= term->cursor.row); + + int move_amount = min(bottom - term->cursor.row - 1, count); term_cursor_to(term, term->cursor.row + move_amount, term->cursor.col); }