Support xterm(1) cursor colour change sequences through terminfo(5) Cc

(set) and Cr (reset) extensions. Originally by Sean Estabrooks, tweaked
by me and Ailin Nemui.
This commit is contained in:
Nicholas Marriott
2011-05-20 19:03:58 +00:00
parent 96e7f33da3
commit 944b5e6fa0
8 changed files with 101 additions and 15 deletions

36
input.c
View File

@ -1445,17 +1445,39 @@ input_enter_osc(struct input_ctx *ictx)
void
input_exit_osc(struct input_ctx *ictx)
{
u_char *p = ictx->input_buf;
int option;
if (ictx->flags & INPUT_DISCARD)
return;
log_debug("%s: \"%s\"", __func__, ictx->input_buf);
if (ictx->input_len < 2 || ictx->input_buf[1] != ';')
return;
if (ictx->input_buf[0] != '0' && ictx->input_buf[0] != '2')
if (ictx->input_len < 1 || *p < '0' || *p > '9')
return;
screen_set_title(ictx->ctx.s, ictx->input_buf + 2);
server_status_window(ictx->wp->window);
log_debug("%s: \"%s\"", __func__, p);
option = 0;
while (*p >= '0' && *p <= '9')
option = option * 10 + *p++ - '0';
if (*p == ';')
p++;
switch (option) {
case 0:
case 2:
screen_set_title(ictx->ctx.s, p);
server_status_window(ictx->wp->window);
break;
case 12:
screen_set_cursor_colour(ictx->ctx.s, p);
break;
case 112:
if (*p == '\0') /* No arguments allowed. */
screen_set_cursor_colour(ictx->ctx.s, "");
break;
default:
log_debug("%s: unknown '%u'", __func__, option);
break;
}
}
/* APC string started. */