toplevel-icon: implement OSC-1, CSI 20/21/22/23 t

* The toplevel icon is now set to the app-id, unless "overridden" by
  OSC-1 or OSC-0.
* Implemented OSC-1
* OSC-0 extended to also set the icon
* Implemented CSI 20 t - report window icon
* Implemented CSI 21 t - report window title
* Implemented CSI 22 ; 1 t - push window icon
* Implemented CS 23 ; 1 t - pop window icon
* Extended CSI 22/23 ; 0 t to also push/pop the icon
* Verify app-id set by OSC-176 is valid UTF-8
* Verify icon set by OSC-0/1 is valid UTF-8
This commit is contained in:
Daniel Eklöf 2024-09-10 18:53:38 +02:00
parent 3f8a1fc85b
commit 97ec375c67
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
10 changed files with 220 additions and 32 deletions

View file

@ -552,6 +552,8 @@ struct terminal {
bool window_title_has_been_set;
char *window_title;
tll(char *) window_title_stack;
char *window_icon;
tll(char *)window_icon_stack;
char *app_id;
struct {
@ -670,6 +672,11 @@ struct terminal {
int timer_fd;
} title;
struct {
struct timespec last_update;
int timer_fd;
} icon;
struct {
struct timespec last_update;
int timer_fd;
@ -925,6 +932,8 @@ void term_set_user_mouse_cursor(struct terminal *term, const char *cursor);
void term_set_window_title(struct terminal *term, const char *title);
void term_set_app_id(struct terminal *term, const char *app_id);
void term_set_icon(struct terminal *term, const char *icon);
const char *term_icon(const struct terminal *term);
void term_flash(struct terminal *term, unsigned duration_ms);
void term_bell(struct terminal *term);
bool term_spawn_new(const struct terminal *term);