version 1.96, 2017/04/18 21:41:42 |
version 1.97, 2017/05/07 21:25:59 |
|
|
{ TTYC_KCUB1, KEYC_LEFT }, |
{ TTYC_KCUB1, KEYC_LEFT }, |
{ TTYC_KCUF1, KEYC_RIGHT }, |
{ TTYC_KCUF1, KEYC_RIGHT }, |
|
|
/* Key and modifier capabilities. */ |
/* |
{ TTYC_KDC2, KEYC_DC|KEYC_SHIFT }, |
* Key and modifier capabilities. We set the xterm flag to mark that |
{ TTYC_KDC3, KEYC_DC|KEYC_ESCAPE }, |
* any leading escape means an escape key press and not the modifier. |
{ TTYC_KDC4, KEYC_DC|KEYC_SHIFT|KEYC_ESCAPE }, |
*/ |
{ TTYC_KDC5, KEYC_DC|KEYC_CTRL }, |
{ TTYC_KDC2, KEYC_DC|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KDC6, KEYC_DC|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KDC3, KEYC_DC|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KDC7, KEYC_DC|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KDC4, KEYC_DC|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KDN2, KEYC_DOWN|KEYC_SHIFT }, |
{ TTYC_KDC5, KEYC_DC|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KDN3, KEYC_DOWN|KEYC_ESCAPE }, |
{ TTYC_KDC6, KEYC_DC|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KDN4, KEYC_DOWN|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KDC7, KEYC_DC|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KDN5, KEYC_DOWN|KEYC_CTRL }, |
{ TTYC_KDN2, KEYC_DOWN|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KDN6, KEYC_DOWN|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KDN3, KEYC_DOWN|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KDN7, KEYC_DOWN|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KDN4, KEYC_DOWN|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KEND2, KEYC_END|KEYC_SHIFT }, |
{ TTYC_KDN5, KEYC_DOWN|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KEND3, KEYC_END|KEYC_ESCAPE }, |
{ TTYC_KDN6, KEYC_DOWN|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KEND4, KEYC_END|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KDN7, KEYC_DOWN|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KEND5, KEYC_END|KEYC_CTRL }, |
{ TTYC_KEND2, KEYC_END|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KEND6, KEYC_END|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KEND3, KEYC_END|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KEND7, KEYC_END|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KEND4, KEYC_END|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KHOM2, KEYC_HOME|KEYC_SHIFT }, |
{ TTYC_KEND5, KEYC_END|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KHOM3, KEYC_HOME|KEYC_ESCAPE }, |
{ TTYC_KEND6, KEYC_END|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KHOM4, KEYC_HOME|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KEND7, KEYC_END|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KHOM5, KEYC_HOME|KEYC_CTRL }, |
{ TTYC_KHOM2, KEYC_HOME|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KHOM6, KEYC_HOME|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KHOM3, KEYC_HOME|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KHOM7, KEYC_HOME|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KHOM4, KEYC_HOME|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KIC2, KEYC_IC|KEYC_SHIFT }, |
{ TTYC_KHOM5, KEYC_HOME|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KIC3, KEYC_IC|KEYC_ESCAPE }, |
{ TTYC_KHOM6, KEYC_HOME|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KIC4, KEYC_IC|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KHOM7, KEYC_HOME|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KIC5, KEYC_IC|KEYC_CTRL }, |
{ TTYC_KIC2, KEYC_IC|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KIC6, KEYC_IC|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KIC3, KEYC_IC|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KIC7, KEYC_IC|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KIC4, KEYC_IC|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KLFT2, KEYC_LEFT|KEYC_SHIFT }, |
{ TTYC_KIC5, KEYC_IC|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KLFT3, KEYC_LEFT|KEYC_ESCAPE }, |
{ TTYC_KIC6, KEYC_IC|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KLFT4, KEYC_LEFT|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KIC7, KEYC_IC|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KLFT5, KEYC_LEFT|KEYC_CTRL }, |
{ TTYC_KLFT2, KEYC_LEFT|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KLFT6, KEYC_LEFT|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KLFT3, KEYC_LEFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KLFT7, KEYC_LEFT|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KLFT4, KEYC_LEFT|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KNXT2, KEYC_NPAGE|KEYC_SHIFT }, |
{ TTYC_KLFT5, KEYC_LEFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KNXT3, KEYC_NPAGE|KEYC_ESCAPE }, |
{ TTYC_KLFT6, KEYC_LEFT|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KNXT4, KEYC_NPAGE|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KLFT7, KEYC_LEFT|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KNXT5, KEYC_NPAGE|KEYC_CTRL }, |
{ TTYC_KNXT2, KEYC_NPAGE|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KNXT6, KEYC_NPAGE|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KNXT3, KEYC_NPAGE|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KNXT7, KEYC_NPAGE|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KNXT4, KEYC_NPAGE|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KPRV2, KEYC_PPAGE|KEYC_SHIFT }, |
{ TTYC_KNXT5, KEYC_NPAGE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KPRV3, KEYC_PPAGE|KEYC_ESCAPE }, |
{ TTYC_KNXT6, KEYC_NPAGE|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KPRV4, KEYC_PPAGE|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KNXT7, KEYC_NPAGE|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KPRV5, KEYC_PPAGE|KEYC_CTRL }, |
{ TTYC_KPRV2, KEYC_PPAGE|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KPRV6, KEYC_PPAGE|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KPRV3, KEYC_PPAGE|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KPRV7, KEYC_PPAGE|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KPRV4, KEYC_PPAGE|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KRIT2, KEYC_RIGHT|KEYC_SHIFT }, |
{ TTYC_KPRV5, KEYC_PPAGE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KRIT3, KEYC_RIGHT|KEYC_ESCAPE }, |
{ TTYC_KPRV6, KEYC_PPAGE|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KRIT4, KEYC_RIGHT|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KPRV7, KEYC_PPAGE|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KRIT5, KEYC_RIGHT|KEYC_CTRL }, |
{ TTYC_KRIT2, KEYC_RIGHT|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KRIT6, KEYC_RIGHT|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KRIT3, KEYC_RIGHT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KRIT7, KEYC_RIGHT|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KRIT4, KEYC_RIGHT|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KUP2, KEYC_UP|KEYC_SHIFT }, |
{ TTYC_KRIT5, KEYC_RIGHT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KUP3, KEYC_UP|KEYC_ESCAPE }, |
{ TTYC_KRIT6, KEYC_RIGHT|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KUP4, KEYC_UP|KEYC_SHIFT|KEYC_ESCAPE }, |
{ TTYC_KRIT7, KEYC_RIGHT|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
{ TTYC_KUP5, KEYC_UP|KEYC_CTRL }, |
{ TTYC_KUP2, KEYC_UP|KEYC_SHIFT|KEYC_XTERM }, |
{ TTYC_KUP6, KEYC_UP|KEYC_SHIFT|KEYC_CTRL }, |
{ TTYC_KUP3, KEYC_UP|KEYC_ESCAPE|KEYC_XTERM }, |
{ TTYC_KUP7, KEYC_UP|KEYC_ESCAPE|KEYC_CTRL }, |
{ TTYC_KUP4, KEYC_UP|KEYC_SHIFT|KEYC_ESCAPE|KEYC_XTERM }, |
|
{ TTYC_KUP5, KEYC_UP|KEYC_CTRL|KEYC_XTERM }, |
|
{ TTYC_KUP6, KEYC_UP|KEYC_SHIFT|KEYC_CTRL|KEYC_XTERM }, |
|
{ TTYC_KUP7, KEYC_UP|KEYC_ESCAPE|KEYC_CTRL|KEYC_XTERM }, |
}; |
}; |
|
|
/* Add key to tree. */ |
/* Add key to tree. */ |
|
|
enum utf8_state more; |
enum utf8_state more; |
u_int i; |
u_int i; |
wchar_t wc; |
wchar_t wc; |
|
int n; |
|
|
log_debug("%s: next key is %zu (%.*s) (expired=%d)", c->name, len, |
log_debug("%s: next key is %zu (%.*s) (expired=%d)", c->name, len, |
(int)len, buf, expired); |
(int)len, buf, expired); |
|
|
return (0); |
return (0); |
} |
} |
|
|
|
/* Is this an an xterm(1) key? */ |
|
n = xterm_keys_find(buf, len, size, key); |
|
if (n == 0) |
|
return (0); |
|
if (n == 1 && !expired) |
|
return (1); |
|
|
/* Is this valid UTF-8? */ |
/* Is this valid UTF-8? */ |
more = utf8_open(&ud, (u_char)*buf); |
more = utf8_open(&ud, (u_char)*buf); |
if (more == UTF8_MORE) { |
if (more == UTF8_MORE) { |
|
|
/* Look for a key without the escape. */ |
/* Look for a key without the escape. */ |
n = tty_keys_next1(tty, buf + 1, len - 1, &key, &size, expired); |
n = tty_keys_next1(tty, buf + 1, len - 1, &key, &size, expired); |
if (n == 0) { /* found */ |
if (n == 0) { /* found */ |
|
if (key & KEYC_XTERM) { |
|
/* |
|
* We want the escape key as well as the xterm |
|
* key, because the xterm sequence implicitly |
|
* includes the escape (so if we see |
|
* \033\033[1;3D we know it is an Escape |
|
* followed by M-Left, not just M-Left). |
|
*/ |
|
key = '\033'; |
|
size = 1; |
|
goto complete_key; |
|
} |
key |= KEYC_ESCAPE; |
key |= KEYC_ESCAPE; |
size++; |
size++; |
goto complete_key; |
goto complete_key; |
|
|
if (n == 0) /* found */ |
if (n == 0) /* found */ |
goto complete_key; |
goto complete_key; |
if (n == 1) |
if (n == 1) |
goto partial_key; |
|
|
|
/* Is this an an xterm(1) key? */ |
|
n = xterm_keys_find(buf, len, &size, &key); |
|
if (n == 0) |
|
goto complete_key; |
|
if (n == 1 && !expired) |
|
goto partial_key; |
goto partial_key; |
|
|
/* |
/* |