Sync OpenBSD patchset 915:

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:
Tiago Cunha
2011-05-22 16:25:02 +00:00
parent 89f35125b4
commit 719755574d
8 changed files with 110 additions and 24 deletions

38
input.c
View File

@ -1,4 +1,4 @@
/* $Id: input.c,v 1.117 2011-03-19 23:30:37 tcunha Exp $ */
/* $Id: input.c,v 1.118 2011-05-22 16:25:02 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -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. */