term/vt: only do reverse-wrapping (‘bw’) on cub1

Foot currently does reverse-wrapping (‘auto_left_margin’, or ’bw’) on
everything that calls ‘term_cursor_left()’. This is wrong; it should
only be done for cub1. From man terminfo:

    auto_left_margin | bw | bw | cub1 wraps from column 0 to last
    column

This patch moves the reverse-wrapping logic from term_cursor_left() to
the handling of BS (backspace).

Closes #441
This commit is contained in:
Daniel Eklöf 2021-04-08 12:58:47 +02:00
parent 0b3053f612
commit 5be2c53d8c
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 18 additions and 40 deletions

17
vt.c
View file

@ -142,8 +142,21 @@ action_execute(struct terminal *term, uint8_t c)
#else
if (term->grid->cursor.lcf)
term->grid->cursor.lcf = false;
else
term_cursor_left(term, 1);
else {
/* Reverse wrap */
if (unlikely(term->grid->cursor.point.col == 0) &&
likely(term->reverse_wrap && term->auto_margin))
{
if (term->grid->cursor.point.row <= term->scroll_region.start) {
/* Dont wrap past, or inside, the scrolling region(?) */
} else
term_cursor_to(
term,
term->grid->cursor.point.row - 1,
term->cols - 1);
} else
term_cursor_left(term, 1);
}
#endif
break;