diff --git a/grid.c b/grid.c index 51d76191..9da36934 100644 --- a/grid.c +++ b/grid.c @@ -34,10 +34,13 @@ grid_row_alloc(int cols, bool initialize) if (initialize) { row->cells = calloc(cols, sizeof(row->cells[0])); + row->comb_chars = calloc(cols, sizeof(row->comb_chars[0])); for (size_t c = 0; c < cols; c++) row->cells[c].attrs.clean = 1; - } else + } else { row->cells = malloc(cols * sizeof(row->cells[0])); + row->comb_chars = malloc(cols * sizeof(row->comb_chars[0])); + } return row; } @@ -48,6 +51,7 @@ grid_row_free(struct row *row) if (row == NULL) return; + free(row->comb_chars); free(row->cells); free(row); } diff --git a/terminal.h b/terminal.h index 7152bc23..e653e9be 100644 --- a/terminal.h +++ b/terminal.h @@ -77,10 +77,16 @@ struct damage { int lines; }; +struct combining_chars { + uint8_t count; + wchar_t chars[5]; /* TODO: do we need this many? */ +}; + struct row { struct cell *cells; bool dirty; bool linebreak; + struct combining_chars *comb_chars; }; struct sixel {