void start_ex_cmd(char symbol, int state) { log_msg("EXCMD", "start"); ex.ex_state = state; ex.state_symbol = symbol; window_refresh(); pos_T max = layout_size(); ex.curpos = 0; ex.curofs = 0; ex.maxpos = max.col - 2; ex.state = 0; ex.col_text = opt_color(COMPL_TEXT); ex.col_symb = opt_color(BUF_TEXT); switch (state) { case EX_CMD_STATE: menu_start(ex.menu); break; case EX_REG_STATE: ex.lm = window_get_focus()->matches; regex_mk_pivot(ex.lm); break; case EX_FIL_STATE: ex.fil = window_get_focus()->filter; //swap exline with filter string break; } ex.line = calloc(max.col, sizeof(char*)); ex.cmd.cmds = NULL; ex.cmd.line = NULL; hist_push(state); cmdline_build(&ex.cmd, ex.line); }
void call_cmd_hook(Hook *hook, HookArg *hka) { log_msg("HOOK", "call_cmd_hook"); if (hook->pat && hka && !regex_match(hook->pat, hka->arg)) return; Cmdline cmd; cmdline_build(&cmd, hook->data.cmd); cmdline_req_run(NULL, &cmd); cmdline_cleanup(&cmd); }
void cmdline_init(int argc, char *argv[]) { char **defv = NULL; int defc = 0; struct param *p; char *s; int i; /* Build default command line as separate tokens */ s = strtok(def_cmdline, OPTION_DELIM); while (s) { defv = realloc(defv, ++defc * sizeof(char *)); defv[defc - 1] = s; s = strtok(NULL, OPTION_DELIM); } /* Build final command line based on project configuration */ cmdline_build(argc, argv, defc, defv); /* Print version and command line first */ fprintf(stdout, "Emux version %s\n", PACKAGE_VERSION); fprintf(stdout, "Command line:"); for (i = 0; i < cmdline.argc; i++) fprintf(stdout, " %s", cmdline.argv[i]); fprintf(stdout, "\n"); /* Parse and fill parameters */ for (i = 0; i < num_params; i++) { p = params[i]; if (!strcmp(p->type, "bool")) cmdline_parse_bool(p->name, p->address); else if (!strcmp(p->type, "int")) cmdline_parse_int(p->name, p->address); else if (!strcmp(p->type, "string")) cmdline_parse_string(p->name, p->address); } /* Free command lines */ free(cmdline.argv); free(defv); }
char* repl_elem(char *line, char *expr, List *args, int fst, int lst) { Cmdline cmd; cmdline_build(&cmd, line); Token *ary = tok_arg(cmdline_lst(&cmd), 0); log_msg("CMDLINE", "line %s", cmd.line); Token *elem = container_elem(ary, args, fst, lst); if (!elem) { cmdline_cleanup(&cmd); return NULL; } int len = strlen(line) - (elem->end - elem->start) + strlen(expr); char *newexpr = malloc(sizeof(char*)*len); newexpr[0] = '\0'; strncat(newexpr, line, elem->start); strcat(newexpr, expr); strcat(newexpr, &line[elem->end]); cmdline_cleanup(&cmd); return newexpr; }