mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-11 05:33:55 -04:00
commit
5da65aadd4
3 changed files with 20 additions and 40 deletions
|
|
@ -50,6 +50,8 @@
|
||||||
reason pywal turned foot windows transparent
|
reason pywal turned foot windows transparent
|
||||||
(https://codeberg.org/dnkl/foot/issues/434).
|
(https://codeberg.org/dnkl/foot/issues/434).
|
||||||
* PTY not being drained when the client application terminates.
|
* 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
|
### Security
|
||||||
|
|
|
||||||
41
terminal.c
41
terminal.c
|
|
@ -1988,44 +1988,9 @@ term_cursor_home(struct terminal *term)
|
||||||
void
|
void
|
||||||
term_cursor_left(struct terminal *term, int count)
|
term_cursor_left(struct terminal *term, int count)
|
||||||
{
|
{
|
||||||
xassert(count >= 0);
|
int move_amount = min(term->grid->cursor.point.col, count);
|
||||||
int new_col = term->grid->cursor.point.col - count;
|
term->grid->cursor.point.col -= move_amount;
|
||||||
|
xassert(term->grid->cursor.point.col >= 0);
|
||||||
/* 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;
|
|
||||||
term->grid->cursor.lcf = false;
|
term->grid->cursor.lcf = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
17
vt.c
17
vt.c
|
|
@ -142,8 +142,21 @@ action_execute(struct terminal *term, uint8_t c)
|
||||||
#else
|
#else
|
||||||
if (term->grid->cursor.lcf)
|
if (term->grid->cursor.lcf)
|
||||||
term->grid->cursor.lcf = false;
|
term->grid->cursor.lcf = false;
|
||||||
else
|
else {
|
||||||
term_cursor_left(term, 1);
|
/* 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) {
|
||||||
|
/* Don’t 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
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue