Example #1
0
static void *new_driver(TermKey *tk, const char *term)
{
  if(strncmp(term, "xterm", 5) == 0) {
    // We want "xterm" or "xtermc" or "xterm-..."
    if(term[5] != 0 && term[5] != '-' && term[5] != 'c')
      return NULL;
  }
  else if(strcmp(term, "screen") == 0) {
    /* Also apply for screen, because it might be transporting xterm-like
     * sequences. Yes, this sucks. We shouldn't need to rely on this behaviour
     * but there's no other way to know, and if we don't then we won't
     * recognise its sequences.
     */
  }
  else
    return NULL;

  // Excellent - we'll continue

  TermKeyCsi *csi = malloc(sizeof *csi);
  if(!csi)
    return NULL;

  csi->tk = tk;

  int i;

  for(i = 0; i < 64; i++) {
    csi->csi_ss3s[i].sym = TERMKEY_SYM_UNKNOWN;
    csi->ss3s[i].sym     = TERMKEY_SYM_UNKNOWN;
    csi->ss3_kpalts[i] = 0;
  }

  csi->ncsifuncs = 32;

  csi->csifuncs = malloc(sizeof(csi->csifuncs[0]) * csi->ncsifuncs);
  if(!csi->csifuncs)
    goto abort_free_csi;

  for(i = 0; i < csi->ncsifuncs; i++)
    csi->csifuncs[i].sym = TERMKEY_SYM_UNKNOWN;

  register_csi_ss3(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_UP,    'A', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_DOWN,  'B', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_RIGHT, 'C', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_LEFT,  'D', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_BEGIN, 'E', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_END,   'F', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_HOME,  'H', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_FUNCTION, 1, 'P', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_FUNCTION, 2, 'Q', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_FUNCTION, 3, 'R', NULL);
  register_csi_ss3(csi, TERMKEY_TYPE_FUNCTION, 4, 'S', NULL);

  register_csi_ss3_full(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_TAB, TERMKEY_KEYMOD_SHIFT, TERMKEY_KEYMOD_SHIFT, 'Z', NULL);

  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPENTER,  'M', NULL, 0);
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPEQUALS, 'X', NULL, '=');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPMULT,   'j', NULL, '*');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPPLUS,   'k', NULL, '+');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPCOMMA,  'l', NULL, ',');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPMINUS,  'm', NULL, '-');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPPERIOD, 'n', NULL, '.');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KPDIV,    'o', NULL, '/');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP0,      'p', NULL, '0');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP1,      'q', NULL, '1');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP2,      'r', NULL, '2');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP3,      's', NULL, '3');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP4,      't', NULL, '4');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP5,      'u', NULL, '5');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP6,      'v', NULL, '6');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP7,      'w', NULL, '7');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP8,      'x', NULL, '8');
  register_ss3kpalt(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_KP9,      'y', NULL, '9');

  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_FIND,      1, NULL);
  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_INSERT,    2, NULL);
  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_DELETE,    3, NULL);
  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_SELECT,    4, NULL);
  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEUP,    5, NULL);
  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_PAGEDOWN,  6, NULL);
  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_HOME,      7, NULL);
  register_csifunc(csi, TERMKEY_TYPE_KEYSYM, TERMKEY_SYM_END,       8, NULL);

  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 1,  11, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 2,  12, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 3,  13, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 4,  14, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 5,  15, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 6,  17, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 7,  18, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 8,  19, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 9,  20, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 10, 21, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 11, 23, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 12, 24, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 13, 25, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 14, 26, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 15, 28, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 16, 29, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 17, 31, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 18, 32, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 19, 33, NULL);
  register_csifunc(csi, TERMKEY_TYPE_FUNCTION, 20, 34, NULL);

  return csi;

abort_free_csi:
  free(csi);

  return NULL;
}
Example #2
0
static TermKeySym register_csi_ss3(TermKeyCsi *csi, TermKeyType type, TermKeySym sym, unsigned char cmd, const char *name)
{
  return register_csi_ss3_full(csi, type, sym, 0, 0, cmd, name);
}
Example #3
0
static void register_csi_ss3(TermKeyType type, TermKeySym sym, unsigned char cmd)
{
  register_csi_ss3_full(type, sym, 0, 0, cmd);
}