aboutsummaryrefslogtreecommitdiff
path: root/driver-csi.c
diff options
context:
space:
mode:
authorPaul LeoNerd Evans <leonerd@leonerd.org.uk>2012-11-30 15:01:20 +0000
committerPaul LeoNerd Evans <leonerd@leonerd.org.uk>2012-11-30 15:01:20 +0000
commitfdb44d979633db2a4678d87769cfd3d9accae8c0 (patch)
treeeba8ff1b51a3ef64bd9d67ea426cc6d540375db4 /driver-csi.c
parentb87ca771bf103b21abf53ef4186aa1adaf002541 (diff)
downloadtermo-fdb44d979633db2a4678d87769cfd3d9accae8c0.tar.gz
termo-fdb44d979633db2a4678d87769cfd3d9accae8c0.tar.xz
termo-fdb44d979633db2a4678d87769cfd3d9accae8c0.zip
Moved the other termkey_interpret_*() functions into driver-csi.c where they arguably belong
Diffstat (limited to 'driver-csi.c')
-rw-r--r--driver-csi.c88
1 files changed, 75 insertions, 13 deletions
diff --git a/driver-csi.c b/driver-csi.c
index b116924..924e995 100644
--- a/driver-csi.c
+++ b/driver-csi.c
@@ -189,6 +189,59 @@ static TermKeyResult handle_csi_mouse(TermKey *tk, TermKeyKey *key, int cmd, lon
return TERMKEY_RES_NONE;
}
+TermKeyResult termkey_interpret_mouse(TermKey *tk, const TermKeyKey *key, TermKeyMouseEvent *event, int *button, int *line, int *col)
+{
+ if(key->type != TERMKEY_TYPE_MOUSE)
+ return TERMKEY_RES_NONE;
+
+ if(button)
+ *button = 0;
+
+ termkey_key_get_linecol(key, line, col);
+
+ if(!event)
+ return TERMKEY_RES_KEY;
+
+ int btn = 0;
+
+ int code = key->code.mouse[0];
+
+ int drag = code & 0x20;
+
+ code &= ~0x3c;
+
+ switch(code) {
+ case 0:
+ case 1:
+ case 2:
+ *event = drag ? TERMKEY_MOUSE_DRAG : TERMKEY_MOUSE_PRESS;
+ btn = code + 1;
+ break;
+
+ case 3:
+ *event = TERMKEY_MOUSE_RELEASE;
+ // no button hint
+ break;
+
+ case 64:
+ case 65:
+ *event = drag ? TERMKEY_MOUSE_DRAG : TERMKEY_MOUSE_PRESS;
+ btn = code + 4 - 64;
+ break;
+
+ default:
+ *event = TERMKEY_MOUSE_UNKNOWN;
+ }
+
+ if(button)
+ *button = btn;
+
+ if(key->code.mouse[3] & 0x80)
+ *event = TERMKEY_MOUSE_RELEASE;
+
+ return TERMKEY_RES_KEY;
+}
+
/*
* Handler for CSI R position reports
*/
@@ -204,6 +257,16 @@ static TermKeyResult handle_csi_position(TermKey *tk, TermKeyKey *key, int cmd,
return TERMKEY_RES_KEY;
}
+TermKeyResult termkey_interpret_position(TermKey *tk, const TermKeyKey *key, int *line, int *col)
+{
+ if(key->type != TERMKEY_TYPE_POSITION)
+ return TERMKEY_RES_NONE;
+
+ termkey_key_get_linecol(key, line, col);
+
+ return TERMKEY_RES_KEY;
+}
+
#define CHARAT(i) (tk->buffer[tk->buffstart + (i)])
static TermKeyResult parse_csi(TermKey *tk, size_t introlen, size_t *csi_len, long args[], size_t *nargs, unsigned long *commandp)
@@ -274,6 +337,18 @@ static TermKeyResult parse_csi(TermKey *tk, size_t introlen, size_t *csi_len, lo
return TERMKEY_RES_KEY;
}
+TermKeyResult termkey_interpret_csi(TermKey *tk, const TermKeyKey *key, long args[], size_t *nargs, unsigned long *cmd)
+{
+ size_t dummy;
+
+ if(tk->hightide == 0)
+ return TERMKEY_RES_NONE;
+ if(key->type != TERMKEY_TYPE_UNKNOWN_CSI)
+ return TERMKEY_RES_NONE;
+
+ return parse_csi(tk, 0, &dummy, args, nargs, cmd);
+}
+
static int register_keys(void)
{
int i;
@@ -527,19 +602,6 @@ static TermKeyResult peekkey(TermKey *tk, void *info, TermKeyKey *key, int force
return TERMKEY_RES_NONE;
}
-/* non-static */
-TermKeyResult termkey_interpret_csi(TermKey *tk, const TermKeyKey *key, long args[], size_t *nargs, unsigned long *cmd)
-{
- size_t dummy;
-
- if(tk->hightide == 0)
- return TERMKEY_RES_NONE;
- if(key->type != TERMKEY_TYPE_UNKNOWN_CSI)
- return TERMKEY_RES_NONE;
-
- return parse_csi(tk, 0, &dummy, args, nargs, cmd);
-}
-
struct TermKeyDriver termkey_driver_csi = {
.name = "CSI",