mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
csi: fix bad implementation of CBT (back tab)
* It takes a parameter, that indicates the number of tab stops to move through * Use the tab stops defined in the tab stops list, not hard coded mod 8 columns.
This commit is contained in:
parent
ca58c4c621
commit
616e506f2e
2 changed files with 14 additions and 6 deletions
19
csi.c
19
csi.c
|
|
@ -611,13 +611,20 @@ csi_dispatch(struct terminal *term, uint8_t final)
|
|||
break;
|
||||
}
|
||||
|
||||
case 'Z': {
|
||||
/* Back tab */
|
||||
int col = term->cursor.point.col;
|
||||
col = (col - 8 + 7) / 8 * 8;
|
||||
term_cursor_right(term, col - term->cursor.point.col);
|
||||
case 'Z':
|
||||
/* CBT - Back tab (param is number of tab stops to move back through) */
|
||||
for (int i = 0; i < vt_param_get(term, 0, 1); i++) {
|
||||
int new_col = 0;
|
||||
tll_rforeach(term->tab_stops, it) {
|
||||
if (it->item < term->cursor.point.col) {
|
||||
new_col = it->item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
assert(term->cursor.point.col >= new_col);
|
||||
term_cursor_left(term, term->cursor.point.col - new_col);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'h':
|
||||
/* Set mode */
|
||||
|
|
|
|||
1
vt.c
1
vt.c
|
|
@ -875,6 +875,7 @@ action(struct terminal *term, enum action _action, uint8_t c)
|
|||
break;
|
||||
}
|
||||
}
|
||||
assert(new_col >= term->cursor.point.col);
|
||||
term_cursor_right(term, new_col - term->cursor.point.col);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue