diff --git a/csi.c b/csi.c index 6e85fa7c..275d5657 100644 --- a/csi.c +++ b/csi.c @@ -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); diff --git a/foot.info b/foot.info index d701408d..ed292dda 100644 --- a/foot.info +++ b/foot.info @@ -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,