mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
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:
parent
a81c65caa2
commit
0e5a69d869
1 changed files with 11 additions and 7 deletions
18
vt.c
18
vt.c
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue