diff options
| author | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2012-11-30 15:01:20 +0000 | 
|---|---|---|
| committer | Paul LeoNerd Evans <leonerd@leonerd.org.uk> | 2012-11-30 15:01:20 +0000 | 
| commit | fdb44d979633db2a4678d87769cfd3d9accae8c0 (patch) | |
| tree | eba8ff1b51a3ef64bd9d67ea426cc6d540375db4 /driver-csi.c | |
| parent | b87ca771bf103b21abf53ef4186aa1adaf002541 (diff) | |
| download | termo-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.c | 88 | 
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", | 
