Try to handle position reports -and- F3 concurrently.. somehow.. argh
This commit is contained in:
parent
8152f9e018
commit
efc5b7e088
14
driver-csi.c
14
driver-csi.c
|
@ -258,19 +258,27 @@ TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKe
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handler for CSI R position reports
|
* Handler for CSI R position reports
|
||||||
|
* A plain CSI R with no arguments is probably actually <F3>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static TermKeyResult handle_csi_R(TermKey *tk, TermKeyKey *key, int cmd, long *arg, int args)
|
static TermKeyResult handle_csi_R(TermKey *tk, TermKeyKey *key, int cmd, long *arg, int args)
|
||||||
{
|
{
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
case 'R':
|
case 'R':
|
||||||
if(args < 2)
|
switch(args) {
|
||||||
return TERMKEY_RES_NONE;
|
case 0:
|
||||||
|
key->type = TERMKEY_TYPE_FUNCTION;
|
||||||
|
key->code.number = 3;
|
||||||
|
return TERMKEY_RES_KEY;
|
||||||
|
|
||||||
|
case 2:
|
||||||
key->type = TERMKEY_TYPE_POSITION;
|
key->type = TERMKEY_TYPE_POSITION;
|
||||||
termkey_key_set_linecol(key, arg[1], arg[0]);
|
termkey_key_set_linecol(key, arg[1], arg[0]);
|
||||||
|
|
||||||
return TERMKEY_RES_KEY;
|
return TERMKEY_RES_KEY;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return TERMKEY_RES_NONE;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return TERMKEY_RES_NONE;
|
return TERMKEY_RES_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ int main(int argc, char *argv[])
|
||||||
TermKeyKey key;
|
TermKeyKey key;
|
||||||
int line, col;
|
int line, col;
|
||||||
|
|
||||||
plan_tests(5);
|
plan_tests(8);
|
||||||
|
|
||||||
tk = termkey_new_abstract("vt100", 0);
|
tk = termkey_new_abstract("vt100", 0);
|
||||||
|
|
||||||
|
@ -22,6 +22,16 @@ int main(int argc, char *argv[])
|
||||||
is_int(line, 15, "line for position report");
|
is_int(line, 15, "line for position report");
|
||||||
is_int(col, 7, "column for position report");
|
is_int(col, 7, "column for position report");
|
||||||
|
|
||||||
|
/* A plain CSI R is likely to be <F3> though.
|
||||||
|
* This is tricky :/
|
||||||
|
*/
|
||||||
|
termkey_push_bytes(tk, "\e[R", 3);
|
||||||
|
|
||||||
|
is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for <F3>");
|
||||||
|
|
||||||
|
is_int(key.type, TERMKEY_TYPE_FUNCTION, "key.type for <F3>");
|
||||||
|
is_int(key.code.number, 3, "key.code.number for <F3>");
|
||||||
|
|
||||||
termkey_destroy(tk);
|
termkey_destroy(tk);
|
||||||
|
|
||||||
return exit_status();
|
return exit_status();
|
||||||
|
|
Loading…
Reference in New Issue