aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver-csi.c2
-rw-r--r--driver-ti.c3
-rw-r--r--termkey.c34
3 files changed, 33 insertions, 6 deletions
diff --git a/driver-csi.c b/driver-csi.c
index 05c7fa5..c03c98f 100644
--- a/driver-csi.c
+++ b/driver-csi.c
@@ -309,7 +309,7 @@ static termkey_result getkey(termkey_t *tk, void *info, termkey_key *key, int fo
return getkey_csi(tk, csi, 1, key, force);
}
else
- return (*tk->method.getkey_simple)(tk, key, force);
+ return TERMKEY_RES_NONE;
}
static termkey_keysym register_csi_ss3(termkey_csi *csi, termkey_type type, termkey_keysym sym, unsigned char cmd, const char *name)
diff --git a/driver-ti.c b/driver-ti.c
index 7c1d458..3d1f467 100644
--- a/driver-ti.c
+++ b/driver-ti.c
@@ -135,8 +135,7 @@ static termkey_result getkey(termkey_t *tk, void *info, termkey_key *key, int fo
}
}
- // No special seq. Must be a simple key then
- return (*tk->method.getkey_simple)(tk, key, force);
+ return TERMKEY_RES_NONE;
}
static struct {
diff --git a/termkey.c b/termkey.c
index e36d174..bbcbba3 100644
--- a/termkey.c
+++ b/termkey.c
@@ -382,7 +382,11 @@ static termkey_result getkey_simple(termkey_t *tk, termkey_key *key, int force)
tk->buffcount--;
// Run the full driver
- termkey_result metakey_result = (*tk->driver.getkey)(tk, tk->driver_info, key, force);
+ termkey_result metakey_result;
+ if(force)
+ metakey_result = termkey_getkey_force(tk, key);
+ else
+ metakey_result = termkey_getkey(tk, key);
tk->buffstart--;
tk->buffcount++;
@@ -504,12 +508,36 @@ static termkey_result getkey_simple(termkey_t *tk, termkey_key *key, int force)
termkey_result termkey_getkey(termkey_t *tk, termkey_key *key)
{
- return (*tk->driver.getkey)(tk, tk->driver_info, key, 0);
+ termkey_result ret = (*tk->driver.getkey)(tk, tk->driver_info, key, 0);
+
+ switch(ret) {
+ case TERMKEY_RES_KEY:
+ case TERMKEY_RES_EOF:
+ case TERMKEY_RES_AGAIN:
+ return ret;
+
+ case TERMKEY_RES_NONE:
+ break;
+ }
+
+ return getkey_simple(tk, key, 0);
}
termkey_result termkey_getkey_force(termkey_t *tk, termkey_key *key)
{
- return (*tk->driver.getkey)(tk, tk->driver_info, key, 1);
+ termkey_result ret = (*tk->driver.getkey)(tk, tk->driver_info, key, 1);
+
+ switch(ret) {
+ case TERMKEY_RES_KEY:
+ case TERMKEY_RES_EOF:
+ return ret;
+
+ case TERMKEY_RES_AGAIN:
+ case TERMKEY_RES_NONE:
+ break;
+ }
+
+ return getkey_simple(tk, key, 1);
}
termkey_result termkey_waitkey(termkey_t *tk, termkey_key *key)