Merge branch 'auto-left-margin-on-cub1-only'

Closes #441
This commit is contained in:
Daniel Eklöf 2021-04-08 13:32:09 +02:00
commit 5da65aadd4
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 20 additions and 40 deletions

View file

@ -50,6 +50,8 @@
reason pywal turned foot windows transparent
(https://codeberg.org/dnkl/foot/issues/434).
* PTY not being drained when the client application terminates.
* `auto_left_margin` not being limited to `cub1`
(https://codeberg.org/dnkl/foot/issues/441).
### Security

View file

@ -1988,44 +1988,9 @@ term_cursor_home(struct terminal *term)
void
term_cursor_left(struct terminal *term, int count)
{
xassert(count >= 0);
int new_col = term->grid->cursor.point.col - count;
/* Reverse wrap */
if (unlikely(new_col < 0)) {
if (likely(term->reverse_wrap && term->auto_margin)) {
/* Number of rows to reverse wrap through */
int row_count = (abs(new_col) - 1) / term->cols + 1;
/* Row number cursor will end up on */
int new_row_no = term->grid->cursor.point.row - row_count;
/* New column number */
new_col = term->cols - ((abs(new_col) - 1) % term->cols + 1);
xassert(new_col >= 0 && new_col < term->cols);
/* Don't back up past the scroll region */
/* TODO: should this be allowed? */
if (new_row_no < term->scroll_region.start) {
new_row_no = term->scroll_region.start;
new_col = 0;
}
struct row *new_row = grid_row(term->grid, new_row_no);
term->grid->cursor.point.col = new_col;
term->grid->cursor.point.row = new_row_no;
term->grid->cursor.lcf = false;
term->grid->cur_row = new_row;
return;
}
/* Reverse wrap disabled - don't let cursor move past first column */
new_col = 0;
}
xassert(new_col >= 0);
term->grid->cursor.point.col = new_col;
int move_amount = min(term->grid->cursor.point.col, count);
term->grid->cursor.point.col -= move_amount;
xassert(term->grid->cursor.point.col >= 0);
term->grid->cursor.lcf = false;
}

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;