csi: implement CSI 3J - erase scroll back

This commit is contained in:
Daniel Eklöf 2019-07-22 19:05:22 +02:00
parent 18fb70bb3f
commit aa4cf1873b
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 23 additions and 0 deletions

22
csi.c
View file

@ -371,6 +371,28 @@ csi_dispatch(struct terminal *term, uint8_t final)
&(struct coord){term->cols - 1, term->rows - 1});
break;
case 3: {
/* Erase scrollback */
int end = (term->grid->offset + term->rows - 1) % term->grid->num_rows;
for (size_t i = 0; i < term->grid->num_rows; i++) {
if (end >= term->grid->offset) {
/* Not wrapped */
if (i >= term->grid->offset && i <= end)
continue;
} else {
/* Wrapped */
if (i >= term->grid->offset || i <= end)
continue;
}
grid_row_free(term->grid->rows[i]);
term->grid->rows[i] = NULL;
}
term->grid->view = term->grid->offset;
term_damage_view(term);
break;
}
default:
LOG_ERR("%s: invalid argument: %d",
csi_as_string(term, final), param);

View file

@ -235,6 +235,7 @@ foot+base|foot base fragment,
u8=\E[?%[;0123456789]c,
u9=\E[c,
vpa=\E[%i%p1%dd,
E3=\E[3J,
Ms=\E]52;%p1%s;%p2%s\007,
Se=\E[2 q,
Ss=\E[%p1%d q,