Пример #1
0
void modified_input(void) {
  kill_list(gtd->ses->list[LIST_TABCYCLE]);

  if (HAS_BIT(gtd->flags, TINTIN_FLAG_HISTORYSEARCH)) {
    cursor_history_find("");
  }

  if (HAS_BIT(gtd->flags, TINTIN_FLAG_HISTORYBROWSE)) {
    DEL_BIT(gtd->flags, TINTIN_FLAG_HISTORYBROWSE);
  }

}
Пример #2
0
void cursor_show_completion(int input_now, int show_last_node) {
  struct listroot *root = gtd->ses->list[LIST_TABCYCLE];
  struct listnode *node;

  if (!root->used) {
    return;
  }

  node = show_last_node ? root->list[root->used - 1] : root->list[0];

/*
	if (gtd->input_cur < gtd->input_len)
	{
		input_printf("\033[%dC", gtd->input_len - gtd->input_cur);
	}
	if (gtd->input_len > input_now)
	{
		input_printf("\033[%dD\033[%dP", gtd->input_len - input_now, gtd->input_len - input_now);
	}
	if (input_now + (int) strlen(node->left) < gtd->ses->cols - 2)
	{
		input_printf("%s", node->left);
	}
*/
  strcpy(&gtd->input_buf[input_now], node->left);

  gtd->input_len = input_now + strlen(node->left);
  gtd->input_cur = gtd->input_len;
  gtd->input_pos = gtd->input_len;

  cursor_redraw_line("");

  if (HAS_BIT(gtd->flags, TINTIN_FLAG_HISTORYSEARCH)) {
    cursor_history_find("");
  }

  if (node == root->list[0]) {
    kill_list(gtd->ses->list[LIST_TABCYCLE]);
  }

  return;
}
Пример #3
0
void read_line() {
  char buffer[STRING_SIZE];
  struct listnode *node;
  struct listroot *root;
  int len, cnt, match;

  gtd->input_buf[gtd->input_len] = 0;

  len = read(0, buffer, 1);

  buffer[len] = 0;

  if (HAS_BIT(gtd->ses->flags, SES_FLAG_CONVERTMETA)
      || HAS_BIT(gtd->flags, TINTIN_FLAG_CONVERTMETACHAR)) {
    convert_meta(buffer, &gtd->macro_buf[strlen(gtd->macro_buf)]);
  } else {
    strcat(gtd->macro_buf, buffer);
  }

  if (!HAS_BIT(gtd->ses->flags, SES_FLAG_CONVERTMETA)) {
    match = 0;
    root = gtd->ses->list[LIST_MACRO];

    for (root->update = 0; root->update < root->used; root->update++) {
      node = root->list[root->update];

      if (!strcmp(gtd->macro_buf, node->pr)) {
        script_driver(gtd->ses, LIST_MACRO, node->right);

        gtd->macro_buf[0] = 0;

        return;
      } else if (!strncmp(gtd->macro_buf, node->pr, strlen(gtd->macro_buf))) {
        match = 1;
      }
    }

    for (cnt = 0; *cursor_table[cnt].fun != NULL; cnt++) {
      if (!strcmp(gtd->macro_buf, cursor_table[cnt].code)) {
        cursor_table[cnt].fun("");
        gtd->macro_buf[0] = 0;

        return;
      } else if (!strncmp(gtd->macro_buf, cursor_table[cnt].code, strlen(gtd->macro_buf))) {
        match = 1;
      }
    }

    if (match) {
      return;
    }
  }

  if (gtd->macro_buf[0] == ESCAPE) {
    strcpy(buffer, gtd->macro_buf);

    convert_meta(buffer, gtd->macro_buf);
  }

  for (cnt = 0; gtd->macro_buf[cnt]; cnt++) {
    switch (gtd->macro_buf[cnt]) {
      case 10:
        cursor_enter("");
        break;

      default:
        if (HAS_BIT(gtd->flags, TINTIN_FLAG_INSERTINPUT)
            && gtd->input_len != gtd->input_cur) {
          if (!HAS_BIT(gtd->ses->flags, SES_FLAG_UTF8)
              || (gtd->macro_buf[cnt] & 192) != 128) {
            cursor_delete("");
          }
        }

        ins_sprintf(&gtd->input_buf[gtd->input_cur], "%c", gtd->macro_buf[cnt]);

        gtd->input_len++;
        gtd->input_cur++;

        if (!HAS_BIT(gtd->ses->flags, SES_FLAG_UTF8)
            || (gtd->macro_buf[cnt] & 192) != 128) {
          gtd->input_pos++;
        }

        if (gtd->input_len != gtd->input_cur) {
          if (HAS_BIT(gtd->ses->flags, SES_FLAG_UTF8)
              && (gtd->macro_buf[cnt] & 192) == 128) {
            input_printf("%c", gtd->macro_buf[cnt]);
          } else {
            input_printf("\033[1@%c", gtd->macro_buf[cnt]);
          }
        } else {
          input_printf("%c", gtd->macro_buf[cnt]);
        }

        gtd->macro_buf[0] = 0;
        gtd->input_tmp[0] = 0;
        gtd->input_buf[gtd->input_len] = 0;

        cursor_check_line_modified("");

        DEL_BIT(gtd->flags, TINTIN_FLAG_HISTORYBROWSE);

        kill_list(gtd->ses->list[LIST_TABCYCLE]);

        if (HAS_BIT(gtd->flags, TINTIN_FLAG_HISTORYSEARCH)) {
          cursor_history_find("");
        }
        break;
    }
  }
}