version 1.66, 2019/11/18 09:42:09 |
version 1.67, 2020/01/13 07:51:54 |
|
|
} |
} |
|
|
/* Translate a key code into an output key sequence. */ |
/* Translate a key code into an output key sequence. */ |
void |
int |
input_key(struct window_pane *wp, key_code key, struct mouse_event *m) |
input_key(struct window_pane *wp, key_code key, struct mouse_event *m) |
{ |
{ |
const struct input_key_ent *ike; |
const struct input_key_ent *ike; |
|
|
if (KEYC_IS_MOUSE(key)) { |
if (KEYC_IS_MOUSE(key)) { |
if (m != NULL && m->wp != -1 && (u_int)m->wp == wp->id) |
if (m != NULL && m->wp != -1 && (u_int)m->wp == wp->id) |
input_key_mouse(wp, m); |
input_key_mouse(wp, m); |
return; |
return (0); |
} |
} |
|
|
/* 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(wp->event, &ud.data[0], 1); |
bufferevent_write(wp->event, &ud.data[0], 1); |
return; |
return (0); |
} |
} |
|
|
/* Is this backspace? */ |
/* Is this backspace? */ |
|
|
bufferevent_write(wp->event, "\033", 1); |
bufferevent_write(wp->event, "\033", 1); |
ud.data[0] = justkey; |
ud.data[0] = justkey; |
bufferevent_write(wp->event, &ud.data[0], 1); |
bufferevent_write(wp->event, &ud.data[0], 1); |
return; |
return (0); |
} |
} |
if (justkey > 0x7f && justkey < KEYC_BASE) { |
if (justkey > 0x7f && justkey < KEYC_BASE) { |
if (utf8_split(justkey, &ud) != UTF8_DONE) |
if (utf8_split(justkey, &ud) != UTF8_DONE) |
return; |
return (-1); |
if (key & KEYC_ESCAPE) |
if (key & KEYC_ESCAPE) |
bufferevent_write(wp->event, "\033", 1); |
bufferevent_write(wp->event, "\033", 1); |
bufferevent_write(wp->event, ud.data, ud.size); |
bufferevent_write(wp->event, ud.data, ud.size); |
return; |
return (0); |
} |
} |
|
|
/* |
/* |
|
|
if ((out = xterm_keys_lookup(key)) != NULL) { |
if ((out = xterm_keys_lookup(key)) != NULL) { |
bufferevent_write(wp->event, out, strlen(out)); |
bufferevent_write(wp->event, out, strlen(out)); |
free(out); |
free(out); |
return; |
return (0); |
} |
} |
} |
} |
key &= ~KEYC_XTERM; |
key &= ~KEYC_XTERM; |
|
|
} |
} |
if (i == nitems(input_keys)) { |
if (i == nitems(input_keys)) { |
log_debug("key 0x%llx missing", key); |
log_debug("key 0x%llx missing", key); |
return; |
return (-1); |
} |
} |
dlen = strlen(ike->data); |
dlen = strlen(ike->data); |
log_debug("found key 0x%llx: \"%s\"", key, ike->data); |
log_debug("found key 0x%llx: \"%s\"", key, ike->data); |
|
|
if (key & KEYC_ESCAPE) |
if (key & KEYC_ESCAPE) |
bufferevent_write(wp->event, "\033", 1); |
bufferevent_write(wp->event, "\033", 1); |
bufferevent_write(wp->event, ike->data, dlen); |
bufferevent_write(wp->event, ike->data, dlen); |
|
return (0); |
} |
} |
|
|
/* Translate mouse and output. */ |
/* Translate mouse and output. */ |