osc: store column of FTCS_COMMAND_{EXECUTED,FINISHED} in row struct

This commit is contained in:
Daniel Eklöf 2022-12-08 10:46:46 +01:00
parent f8e875a7cd
commit e9607de5ae
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 16 additions and 2 deletions

4
grid.c
View file

@ -367,6 +367,8 @@ grid_row_alloc(int cols, bool initialize)
row->linebreak = false; row->linebreak = false;
row->extra = NULL; row->extra = NULL;
row->shell_integration.prompt_marker = false; row->shell_integration.prompt_marker = false;
row->shell_integration.cmd_start = -1;
row->shell_integration.cmd_end = -1;
if (initialize) { if (initialize) {
row->cells = xcalloc(cols, sizeof(row->cells[0])); row->cells = xcalloc(cols, sizeof(row->cells[0]));
@ -588,6 +590,8 @@ _line_wrap(struct grid *old_grid, struct row **new_grid, struct row *row,
grid_row_reset_extra(new_row); grid_row_reset_extra(new_row);
new_row->linebreak = false; new_row->linebreak = false;
new_row->shell_integration.prompt_marker = false; new_row->shell_integration.prompt_marker = false;
new_row->shell_integration.cmd_start = -1;
new_row->shell_integration.cmd_end = -1;
tll_foreach(old_grid->sixel_images, it) { tll_foreach(old_grid->sixel_images, it) {
if (it->item.pos.row == *row_idx) { if (it->item.pos.row == *row_idx) {

10
osc.c
View file

@ -901,11 +901,17 @@ osc_dispatch(struct terminal *term)
break; break;
case 'C': case 'C':
LOG_DBG("FTCS_COMMAND_EXECUTED"); LOG_DBG("FTCS_COMMAND_EXECUTED: %dx%d",
term->grid->cursor.point.row,
term->grid->cursor.point.col);
term->grid->cur_row->shell_integration.cmd_start = term->grid->cursor.point.col;
break; break;
case 'D': case 'D':
LOG_DBG("FTCS_COMMAND_FINISHED"); LOG_DBG("FTCS_COMMAND_FINISHED: %dx%d",
term->grid->cursor.point.row,
term->grid->cursor.point.col);
term->grid->cur_row->shell_integration.cmd_end = term->grid->cursor.point.col;
break; break;
} }
break; break;

View file

@ -1826,6 +1826,8 @@ erase_line(struct terminal *term, struct row *row)
erase_cell_range(term, row, 0, term->cols - 1); erase_cell_range(term, row, 0, term->cols - 1);
row->linebreak = false; row->linebreak = false;
row->shell_integration.prompt_marker = false; row->shell_integration.prompt_marker = false;
row->shell_integration.cmd_start = -1;
row->shell_integration.cmd_end = -1;
} }
void void

View file

@ -123,6 +123,8 @@ struct row {
struct { struct {
bool prompt_marker; bool prompt_marker;
int cmd_start; /* Column, -1 if unset */
int cmd_end; /* Column, -1 if unset */
} shell_integration; } shell_integration;
}; };