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); } }
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; } }