示例#1
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;
    }
  }
}
示例#2
0
static void do_sleep(int seconds)
{
	time_t target;
	int delta;

	if (!ncurses_initialized()) {
		sleep(seconds);
		return;
	}
	target = time(NULL) + seconds;
	delta = seconds;
	do {
		int c;
		usleep(6000);
		halfdelay(delta * 10);

		c = getch();
		switch (c) {
		case KEY_BTAB:
			show_prev_tab();
			break;
		case '\t':
			show_next_tab(); 
			break;
		case KEY_RIGHT:
			cursor_right(); 
			break;
		case KEY_LEFT:
			cursor_left(); 
			break;
		case KEY_NPAGE:
		case KEY_DOWN:
			cursor_down();
			break;
		case KEY_PPAGE:
		case KEY_UP:
			cursor_up();
			break;
		case ' ':
		case '\n':
			cursor_enter();
			break;
		case 's':
			if (set_refresh_timeout())
				return;
			break;
		case 'r':
			window_refresh();
			return;
		case KEY_EXIT:
		case 'q':
		case 27:	// Escape
			leave_powertop = 1;
			return;
		}

		delta = target - time(NULL);
		if (delta <= 0)
			break;

	} while (1);
}