osc: implement change window title and icon

This commit is contained in:
Daniel Eklöf 2019-07-05 09:46:48 +02:00
parent 998ce52b7e
commit 3ba1721c0f
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 65 additions and 10 deletions

41
osc.c
View file

@ -1,12 +1,51 @@
#include "osc.h"
#include <ctype.h>
#include "terminal.h"
#define LOG_MODULE "osc"
#define LOG_ENABLE_DBG 0
#include "log.h"
/* TODO */
void render_set_title(struct renderer *renderer, const char *title);
bool
osc_dispatch(struct terminal *term)
{
LOG_DBG("OCS: %.*s", (int)term->vt.osc.idx, term->vt.osc.data);
int param = 0;
int data_ofs = 0;
for (size_t i = 0; i < term->vt.osc.idx; i++) {
int c = term->vt.osc.data[i];
if (c == ';') {
data_ofs = i + 1;
break;
}
if (!isdigit(c)) {
LOG_ERR("OSC: invalid parameter: %.*s",
(int)term->vt.osc.idx, term->vt.osc.data);
return false;
}
param += c - '0';
}
LOG_DBG("OCS: %.*s (param = %d)",
(int)term->vt.osc.idx, term->vt.osc.data, param);
const char *string = (const char *)&term->vt.osc.data[data_ofs];
switch (param) {
case 0: render_set_title(&term->renderer, string); break; /* icon + title */
case 1: break; /* icon */
case 2: render_set_title(&term->renderer, string); break; /* title */
default:
LOG_ERR("unimplemented: OSC: %.*s",
(int)term->vt.osc.idx, term->vt.osc.data);
return false;
}
return true;
}