vt: don't try to move cursor outside the terminal

When we insert an auto-newline, we must make sure we don't try to move
outside the terminal window.

This can for example happen when a scrolling region have been
configured, and the cursor is **outside** the scrolling
region (i.e. it's in the bottom margin).
This commit is contained in:
Daniel Eklöf 2019-11-30 00:32:34 +01:00
parent a81c65caa2
commit 0e5a69d869
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

18
vt.c
View file

@ -12,6 +12,7 @@
#include "grid.h"
#include "osc.h"
#define min(x, y) ((x) < (y) ? (x) : (y))
#define max(x, y) ((x) > (y) ? (x) : (y))
#define UNHANDLED() LOG_DBG("unhandled: %s", esc_as_string(term, final))
@ -717,13 +718,16 @@ esc_dispatch(struct terminal *term, uint8_t final)
static inline void
pre_print(struct terminal *term)
{
if (unlikely(term->cursor.lcf) && term->auto_margin) {
if (term->cursor.point.row == term->scroll_region.end - 1) {
term_scroll(term, 1);
term_cursor_to(term, term->cursor.point.row, 0);
} else
term_cursor_to(term, term->cursor.point.row + 1, 0);
}
if (likely(!term->cursor.lcf))
return;
if (unlikely(!term->auto_margin))
return;
if (term->cursor.point.row == term->scroll_region.end - 1) {
term_scroll(term, 1);
term_cursor_to(term, term->cursor.point.row, 0);
} else
term_cursor_to(term, min(term->cursor.point.row + 1, term->rows - 1), 0);
}
static inline void