term: add ‘id’ parameter to term_osc8_open()

The current OSC-8 URL’s ID is now tracked along with the URI itself,
and its starting point.
This commit is contained in:
Daniel Eklöf 2021-02-13 13:44:07 +01:00
parent ecbfc2bbe9
commit b934969b85
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 7 additions and 4 deletions

2
osc.c
View file

@ -433,7 +433,7 @@ osc_uri(struct terminal *term, char *string)
if (uri[0] == '\0') if (uri[0] == '\0')
term_osc8_close(term); term_osc8_close(term);
else else
term_osc8_open(term, uri); term_osc8_open(term, id, uri);
} }
static void static void

View file

@ -3016,7 +3016,7 @@ term_ime_set_cursor_rect(struct terminal *term, int x, int y, int width,
} }
void void
term_osc8_open(struct terminal *term, const char *uri) term_osc8_open(struct terminal *term, uint64_t id, const char *uri)
{ {
if (unlikely(term->vt.osc8.begin.row < 0)) { if (unlikely(term->vt.osc8.begin.row < 0)) {
/* Its valid to switch from one URI to another without /* Its valid to switch from one URI to another without
@ -3028,6 +3028,7 @@ term_osc8_open(struct terminal *term, const char *uri)
.col = term->grid->cursor.point.col, .col = term->grid->cursor.point.col,
.row = grid_row_absolute(term->grid, term->grid->cursor.point.row), .row = grid_row_absolute(term->grid, term->grid->cursor.point.row),
}; };
term->vt.osc8.id = id;
term->vt.osc8.uri = xstrdup(uri); term->vt.osc8.uri = xstrdup(uri);
} }
@ -3066,6 +3067,7 @@ term_osc8_close(struct terminal *term)
done: done:
free(term->vt.osc8.uri); free(term->vt.osc8.uri);
term->vt.osc8.id = 0;
term->vt.osc8.uri = NULL; term->vt.osc8.uri = NULL;
term->vt.osc8.begin = (struct coord){-1, -1}; term->vt.osc8.begin = (struct coord){-1, -1};
} }

View file

@ -169,8 +169,9 @@ struct vt {
/* Start coordinate for current OSC-8 URI */ /* Start coordinate for current OSC-8 URI */
struct { struct {
struct coord begin; uint64_t id;
char *uri; char *uri;
struct coord begin;
} osc8; } osc8;
struct { struct {
@ -690,5 +691,5 @@ void term_ime_set_cursor_rect(
void term_urls_reset(struct terminal *term); void term_urls_reset(struct terminal *term);
void term_collect_urls(struct terminal *term); void term_collect_urls(struct terminal *term);
void term_osc8_open(struct terminal *term, const char *uri); void term_osc8_open(struct terminal *term, uint64_t id, const char *uri);
void term_osc8_close(struct terminal *term); void term_osc8_close(struct terminal *term);