Example #1
0
static const char *ui_getkey(Ui *ui) {
    UiCurses *uic = (UiCurses*)ui;
    TermKeyKey key;
    TermKeyResult ret = termkey_getkey(uic->termkey, &key);

    if (ret == TERMKEY_RES_EOF) {
        int tty = open("/dev/tty", O_RDWR);
        if (tty == -1)
            goto fatal;
        if (tty != STDIN_FILENO && dup2(tty, STDIN_FILENO) == -1)
            goto fatal;
        termkey_destroy(uic->termkey);
        if (!(uic->termkey = ui_termkey_new(STDIN_FILENO)))
            goto fatal;
        return NULL;
    }

    if (ret == TERMKEY_RES_AGAIN) {
        struct pollfd fd;
        fd.fd = STDIN_FILENO;
        fd.events = POLLIN;
        if (poll(&fd, 1, termkey_get_waittime(uic->termkey)) == 0)
            ret = termkey_getkey_force(uic->termkey, &key);
    }

    if (ret != TERMKEY_RES_KEY)
        return NULL;
    termkey_strfkey(uic->termkey, uic->key, sizeof(uic->key), &key, TERMKEY_FORMAT_VIM);
    return uic->key;

fatal:
    ui_die_msg(ui, "Failed to re-open stdin as /dev/tty\n");
    return NULL;
}
Example #2
0
static const char *ui_getkey(Ui *ui) {
	UiCurses *uic = (UiCurses*)ui;
	TermKeyKey key;
	TermKeyResult ret = termkey_getkey(uic->termkey, &key);

	if (ret == TERMKEY_RES_AGAIN) {
		struct pollfd fd;
		fd.fd = STDIN_FILENO;
		fd.events = POLLIN;
		if (poll(&fd, 1, termkey_get_waittime(uic->termkey)) == 0)
			ret = termkey_getkey_force(uic->termkey, &key);
	}

	if (ret != TERMKEY_RES_KEY)
		return NULL;
	termkey_strfkey(uic->termkey, uic->key, sizeof(uic->key), &key, TERMKEY_FORMAT_VIM);
	return uic->key;
}
Example #3
0
const char *KeyConfig::GetKeyBind(const char *context,
    const char *action) const
{
  KeyBinds::const_iterator i = binds.find(context);
  if (i == binds.end())
    return NULL;

  for (KeyBindContext::const_iterator j = i->second.begin();
      j != i->second.end(); j++)
    if (!j->second.compare(action)) {
      TermKeyKey key = j->first;
      static char out[256];
      termkey_strfkey(COREMANAGER->GetTermKeyHandle(), out, sizeof(out), &key,
          TERMKEY_FORMAT_CARETCTRL);
      return out;
    }

  return _("<unbound>");
}
Example #4
0
int main(int argc, char *argv[])
{
  TermKey   *tk;
  TermKeyKey key;
  char       buffer[16];
  size_t     len;

  plan_tests(44);

  tk = termkey_new_abstract("vt100", 0);

  key.type = TERMKEY_TYPE_UNICODE;
  key.code.codepoint = 'A';
  key.modifiers = 0;
  key.utf8[0] = 0;

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
  is_int(len, 1, "length for unicode/A/0");
  is_str(buffer, "A", "buffer for unicode/A/0");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_WRAPBRACKET);
  is_int(len, 1, "length for unicode/A/0 wrapbracket");
  is_str(buffer, "A", "buffer for unicode/A/0 wrapbracket");

  key.type = TERMKEY_TYPE_UNICODE;
  key.code.codepoint = 'b';
  key.modifiers = TERMKEY_KEYMOD_CTRL;
  key.utf8[0] = 0;

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
  is_int(len, 3, "length for unicode/b/CTRL");
  is_str(buffer, "C-b", "buffer for unicode/b/CTRL");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_LONGMOD);
  is_int(len, 6, "length for unicode/b/CTRL longmod");
  is_str(buffer, "Ctrl-b", "buffer for unicode/b/CTRL longmod");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key,
      TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_SPACEMOD);
  is_int(len, 6, "length for unicode/b/CTRL longmod|spacemod");
  is_str(buffer, "Ctrl b", "buffer for unicode/b/CTRL longmod|spacemod");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key,
      TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_LOWERMOD);
  is_int(len, 6, "length for unicode/b/CTRL longmod|lowermod");
  is_str(buffer, "ctrl-b", "buffer for unicode/b/CTRL longmod|lowermod");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key,
      TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_SPACEMOD|TERMKEY_FORMAT_LOWERMOD);
  is_int(len, 6, "length for unicode/b/CTRL longmod|spacemod|lowermode");
  is_str(buffer, "ctrl b", "buffer for unicode/b/CTRL longmod|spacemod|lowermode");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_CARETCTRL);
  is_int(len, 2, "length for unicode/b/CTRL caretctrl");
  is_str(buffer, "^B", "buffer for unicode/b/CTRL caretctrl");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_WRAPBRACKET);
  is_int(len, 5, "length for unicode/b/CTRL wrapbracket");
  is_str(buffer, "<C-b>", "buffer for unicode/b/CTRL wrapbracket");

  key.type = TERMKEY_TYPE_UNICODE;
  key.code.codepoint = 'c';
  key.modifiers = TERMKEY_KEYMOD_ALT;
  key.utf8[0] = 0;

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
  is_int(len, 3, "length for unicode/c/ALT");
  is_str(buffer, "A-c", "buffer for unicode/c/ALT");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_LONGMOD);
  is_int(len, 5, "length for unicode/c/ALT longmod");
  is_str(buffer, "Alt-c", "buffer for unicode/c/ALT longmod");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_ALTISMETA);
  is_int(len, 3, "length for unicode/c/ALT altismeta");
  is_str(buffer, "M-c", "buffer for unicode/c/ALT altismeta");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_LONGMOD|TERMKEY_FORMAT_ALTISMETA);
  is_int(len, 6, "length for unicode/c/ALT longmod|altismeta");
  is_str(buffer, "Meta-c", "buffer for unicode/c/ALT longmod|altismeta");

  key.type = TERMKEY_TYPE_KEYSYM;
  key.code.sym = TERMKEY_SYM_UP;
  key.modifiers = 0;

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
  is_int(len, 2, "length for sym/Up/0");
  is_str(buffer, "Up", "buffer for sym/Up/0");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_WRAPBRACKET);
  is_int(len, 4, "length for sym/Up/0 wrapbracket");
  is_str(buffer, "<Up>", "buffer for sym/Up/0 wrapbracket");

  key.type = TERMKEY_TYPE_KEYSYM;
  key.code.sym = TERMKEY_SYM_PAGEUP;
  key.modifiers = 0;

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
  is_int(len, 6, "length for sym/PageUp/0");
  is_str(buffer, "PageUp", "buffer for sym/PageUp/0");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_LOWERSPACE);
  is_int(len, 7, "length for sym/PageUp/0 lowerspace");
  is_str(buffer, "page up", "buffer for sym/PageUp/0 lowerspace");

  /* If size of buffer is too small, strfkey should return something consistent */
  len = termkey_strfkey(tk, buffer, 4, &key, 0);
  is_int(len, 6, "length for sym/PageUp/0");
  is_str(buffer, "Pag", "buffer of len 4 for sym/PageUp/0");

  len = termkey_strfkey(tk, buffer, 4, &key, TERMKEY_FORMAT_LOWERSPACE);
  is_int(len, 7, "length for sym/PageUp/0 lowerspace");
  is_str(buffer, "pag", "buffer of len 4 for sym/PageUp/0 lowerspace");

  key.type = TERMKEY_TYPE_FUNCTION;
  key.code.number = 5;
  key.modifiers = 0;

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
  is_int(len, 2, "length for func/5/0");
  is_str(buffer, "F5", "buffer for func/5/0");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_WRAPBRACKET);
  is_int(len, 4, "length for func/5/0 wrapbracket");
  is_str(buffer, "<F5>", "buffer for func/5/0 wrapbracket");

  len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_LOWERSPACE);
  is_int(len, 2, "length for func/5/0 lowerspace");
  is_str(buffer, "f5", "buffer for func/5/0 lowerspace");

  termkey_destroy(tk);

  return exit_status();
}
Example #5
0
/* Previous name for this function
 * No longer declared in termkey.h but it remains in the compiled library for
 * backward-compatibility reasons.
 */
size_t termkey_snprint_key(TermKey *tk, char *buffer, size_t len, TermKeyKey *key, TermKeyFormat format)
{
  return termkey_strfkey(tk, buffer, len, key, format);
}
Example #6
0
File: demo.c Project: zonbrisad/ore
int main(int argc, char *argv[])
{
  TERMKEY_CHECK_VERSION;

  int mouse = 0;
  int mouse_proto = 0;
  TermKeyFormat format = TERMKEY_FORMAT_VIM;

  char buffer[50];
  TermKey *tk;

  int opt;
  while((opt = getopt(argc, argv, "m::p:")) != -1) {
    switch(opt) {
    case 'm':
      if(optarg)
        mouse = atoi(optarg);
      else
        mouse = 1000;

      break;

    case 'p':
      mouse_proto = atoi(optarg);
      break;

    default:
      fprintf(stderr, "Usage: %s [-m]\n", argv[0]);
      return 1;
    }
  }

  tk = termkey_new(0, TERMKEY_FLAG_SPACESYMBOL|TERMKEY_FLAG_CTRLC);

  if(!tk) {
    fprintf(stderr, "Cannot allocate termkey instance\n");
    exit(1);
  }

  TermKeyResult ret;
  TermKeyKey key;

  if(mouse) {
    printf("\033[?%dhMouse mode active\n", mouse);
    if(mouse_proto)
      printf("\033[?%dh", mouse_proto);
  }

  while((ret = termkey_waitkey(tk, &key)) != TERMKEY_RES_EOF) {
    if(ret == TERMKEY_RES_KEY) {
      termkey_strfkey(tk, buffer, sizeof buffer, &key, format);
      if(key.type == TERMKEY_TYPE_MOUSE) {
        int line, col;
        termkey_interpret_mouse(tk, &key, NULL, NULL, &line, &col);
        printf("%s at line=%d, col=%d)\n", buffer, line, col);
      }
      else if(key.type == TERMKEY_TYPE_POSITION) {
        int line, col;
        termkey_interpret_position(tk, &key, &line, &col);
        printf("Cursor position report at line=%d, col=%d)\n", line, col);
      }
      else {
        printf("%s\n", buffer);
      }

      if(key.type == TERMKEY_TYPE_UNICODE &&
         key.modifiers & TERMKEY_KEYMOD_CTRL &&
         (key.code.codepoint == 'C' || key.code.codepoint == 'c'))
        break;

      if(key.type == TERMKEY_TYPE_UNICODE &&
         key.modifiers == 0 &&
         key.code.codepoint == '?') {
        printf("\033[6n");
        fflush(stdout);
      }
    }
    else if(ret == TERMKEY_RES_ERROR) {
      if(errno != EINTR) {
        perror("termkey_waitkey");
        break;
      }
      printf("Interrupted by signal\n");
    }
  }

  if(mouse)
    printf("\033[?%dlMouse mode deactivated\n", mouse);

  termkey_destroy(tk);
}
Example #7
0
static void on_key(TermKey *tk, TermKeyKey *key)
{
  char buffer[50];
  termkey_strfkey(tk, buffer, sizeof buffer, key, TERMKEY_FORMAT_VIM);
  printf("%s\n", buffer);
}