Ejemplo n.º 1
0
void input_msgreply(char dumb, char *dumber)
{
    char *cmdchar;
    char *line, *cmd, *t;
    char *snick;
    NickTab *nick = NULL;
    int got_space = 0;

    if (!(cmdchar = get_string_var(CMDCHARS_VAR)))
	cmdchar = DEFAULT_CMDCHARS;

    t = line = m_strdup(get_input());
    if (t)
	got_space = strchr(t, ' ') ? 1 : 0;
    cmd = next_arg(line, &line);
    snick = next_arg(line, &line);
    if ((cmd && *cmd == *cmdchar && got_space) || !cmd) {

	if (cmd && *cmd == *cmdchar)
	    cmd++;
	if (in_completion == STATE_NORMAL && snick)
	    strncpy(new_nick, snick, sizeof(new_nick) - 1);

	if ((nick = getnextnick(new_nick, input_lastmsg, snick))) {
	    if (nick->nick && *(nick->nick)) {
		snick = nick->nick;
		malloc_strcpy(&input_lastmsg, nick->nick);
	    }
	}
	if (nick) {
	    char *tmp = NULL;

	    input_clear_line('\0', NULL);
	    if (get_fset_var(FORMAT_NICK_MSG_FSET))
		malloc_strcpy(&tmp,
			      stripansicodes(convert_output_format
					     (get_fset_var(FORMAT_NICK_MSG_FSET), "%s%s %s %s", cmdchar,
					      nick->type ? nick->type : cmd ? cmd : "msg", nick->nick, line ? line : empty_str)));
	    else
		malloc_sprintf(&tmp, "%s%s %s %s", cmdchar, nick->type ? nick->type : cmd ? cmd : "msg", nick->nick,
			       line ? line : empty_str);
	    set_input(tmp);
	    new_free(&tmp);
	} else
	    command_completion(0, NULL);
    } else
	command_completion(0, NULL);
    update_input(UPDATE_ALL);
    new_free(&t);
}
/*
 * This method gets called when user tapped tab key.
 * line - points to command line
 * len - size of line that should be used for completions. This should be
 *   cursor position during tab hit.
 */
void process_tab(const char *line, int len)
{
	int argc;
	static split_arg_t buf[(LINE_BUF_MAX * 2) / sizeof(split_arg_t)];
	const struct method *method;

	argc = split_command(line, len, buf, sizeof(buf));
	tab_hit_count++;

	if (argc == 0)
		return;

	if (argc == 1) {
		command_completion(buf);
		return;
	}

	method = get_command(buf[0].ntcopy);
	if (method != NULL) {
		param_completion(argc, buf, method, 1);
	} else if (argc == 2) {
		method_completion(get_interface(buf[0].ntcopy), buf);
	} else {
		/* Find method for <interface, name> pair */
		method = get_interface_method(buf[0].ntcopy,
							buf[0].next->ntcopy);
		param_completion(argc, buf, method, 2);
	}
}
Ejemplo n.º 3
0
Archivo: app_term.c Proyecto: vaplv/foo
static void
term_key_clbk(enum wm_key key, enum wm_state state, void* data)
{
  const char* cstr = NULL;
  struct term* term = NULL;
  enum app_error app_err = APP_NO_ERROR;
  size_t cursor = 0;
  assert(data);

  if(state != WM_PRESS)
    return;

  term = &((struct app*)data)->term;
  switch(key) {
    case WM_KEY_ENTER:
      RDR(term_write_return(term->render_term));
      app_err = app_execute_command_buffer(term->cmdbuf);
      assert(APP_COMMAND_ERROR == app_err || APP_NO_ERROR == app_err);
      break;
    case WM_KEY_BACKSPACE:
      RDR(term_write_backspace(term->render_term));
      APP(command_buffer_write_backspace(term->cmdbuf));
      break;
    case WM_KEY_DEL:
      RDR(term_write_suppr(term->render_term));
      APP(command_buffer_write_suppr(term->cmdbuf));
      break;
    case WM_KEY_RIGHT:
      RDR(term_translate_cursor(term->render_term, 1));
      APP(command_buffer_move_cursor(term->cmdbuf, 1));
      break;
    case WM_KEY_LEFT:
      RDR(term_translate_cursor(term->render_term, -1));
      APP(command_buffer_move_cursor(term->cmdbuf, -1));
      break;
    case WM_KEY_END:
      RDR(term_translate_cursor(term->render_term, INT_MAX));
      APP(command_buffer_move_cursor(term->cmdbuf, INT_MAX));
      break;
    case WM_KEY_HOME:
      RDR(term_translate_cursor(term->render_term, INT_MIN));
      APP(command_buffer_move_cursor(term->cmdbuf, INT_MIN));
      break;
    case WM_KEY_UP:
    case WM_KEY_DOWN:
      if(WM_KEY_UP == key ) {
        APP(command_buffer_history_next(term->cmdbuf));
      } else {
        APP(command_buffer_history_prev(term->cmdbuf));
      }
      APP(get_command_buffer_string(term->cmdbuf, &cursor, &cstr));
      RDR(clear_term(term->render_term, RDR_TERM_CMDOUT));
      RDR(term_print_string
       (term->render_term, RDR_TERM_CMDOUT, cstr, RDR_TERM_COLOR_WHITE));
      RDR(term_translate_cursor(term->render_term, INT_MIN));
      RDR(term_translate_cursor(term->render_term, cursor));
      break;
    case WM_KEY_TAB:
      command_completion(term);
      break;
    default:
      break;
  }
}