version 1.81, 2020/11/17 08:13:35 |
version 1.82, 2021/04/08 14:16:12 |
|
|
return (input_key(wp->screen, wp->event, key)); |
return (input_key(wp->screen, wp->event, key)); |
} |
} |
|
|
|
static void |
|
input_key_write(const char *from, struct bufferevent *bev, const void *data, |
|
size_t size) |
|
{ |
|
log_debug("%s: %.*s", from, (int)size, data); |
|
bufferevent_write(bev, data, size); |
|
} |
|
|
/* Translate a key code into an output key sequence. */ |
/* Translate a key code into an output key sequence. */ |
int |
int |
input_key(struct screen *s, struct bufferevent *bev, key_code key) |
input_key(struct screen *s, struct bufferevent *bev, key_code key) |
|
|
/* Literal keys go as themselves (can't be more than eight bits). */ |
/* Literal keys go as themselves (can't be more than eight bits). */ |
if (key & KEYC_LITERAL) { |
if (key & KEYC_LITERAL) { |
ud.data[0] = (u_char)key; |
ud.data[0] = (u_char)key; |
bufferevent_write(bev, &ud.data[0], 1); |
input_key_write(__func__, bev, &ud.data[0], 1); |
return (0); |
return (0); |
} |
} |
|
|
|
|
justkey = (key & ~(KEYC_META|KEYC_IMPLIED_META)); |
justkey = (key & ~(KEYC_META|KEYC_IMPLIED_META)); |
if (justkey <= 0x7f) { |
if (justkey <= 0x7f) { |
if (key & KEYC_META) |
if (key & KEYC_META) |
bufferevent_write(bev, "\033", 1); |
input_key_write(__func__, bev, "\033", 1); |
ud.data[0] = justkey; |
ud.data[0] = justkey; |
bufferevent_write(bev, &ud.data[0], 1); |
input_key_write(__func__, bev, &ud.data[0], 1); |
return (0); |
return (0); |
} |
} |
if (justkey > 0x7f && justkey < KEYC_BASE) { |
if (justkey > 0x7f && justkey < KEYC_BASE) { |
if (key & KEYC_META) |
if (key & KEYC_META) |
bufferevent_write(bev, "\033", 1); |
input_key_write(__func__, bev, "\033", 1); |
utf8_to_data(justkey, &ud); |
utf8_to_data(justkey, &ud); |
bufferevent_write(bev, ud.data, ud.size); |
input_key_write(__func__, bev, ud.data, ud.size); |
return (0); |
return (0); |
} |
} |
|
|
|
|
if (ike != NULL) { |
if (ike != NULL) { |
log_debug("found key 0x%llx: \"%s\"", key, ike->data); |
log_debug("found key 0x%llx: \"%s\"", key, ike->data); |
if ((key & KEYC_META) && (~key & KEYC_IMPLIED_META)) |
if ((key & KEYC_META) && (~key & KEYC_IMPLIED_META)) |
bufferevent_write(bev, "\033", 1); |
input_key_write(__func__, bev, "\033", 1); |
bufferevent_write(bev, ike->data, strlen(ike->data)); |
input_key_write(__func__, bev, ike->data, strlen(ike->data)); |
return (0); |
return (0); |
} |
} |
|
|
|
|
goto missing; |
goto missing; |
} |
} |
xsnprintf(tmp, sizeof tmp, "\033[%llu;%cu", outkey, modifier); |
xsnprintf(tmp, sizeof tmp, "\033[%llu;%cu", outkey, modifier); |
bufferevent_write(bev, tmp, strlen(tmp)); |
input_key_write(__func__, bev, tmp, strlen(tmp)); |
return (0); |
return (0); |
|
|
missing: |
missing: |
|
|
if (!input_key_get_mouse(s, m, x, y, &buf, &len)) |
if (!input_key_get_mouse(s, m, x, y, &buf, &len)) |
return; |
return; |
log_debug("writing mouse %.*s to %%%u", (int)len, buf, wp->id); |
log_debug("writing mouse %.*s to %%%u", (int)len, buf, wp->id); |
bufferevent_write(wp->event, buf, len); |
input_key_write(__func__, wp->event, buf, len); |
} |
} |