aboutsummaryrefslogtreecommitdiff
path: root/popup.c
diff options
context:
space:
mode:
Diffstat (limited to 'popup.c')
-rw-r--r--popup.c38
1 files changed, 15 insertions, 23 deletions
diff --git a/popup.c b/popup.c
index c2db145c..5d39e599 100644
--- a/popup.c
+++ b/popup.c
@@ -222,12 +222,12 @@ popup_key_cb(struct client *c, struct key_event *event)
struct popup_data *pd = c->overlay_data;
struct mouse_event *m = &event->m;
struct cmd_find_state *fs = &pd->fs;
- struct cmdq_item *new_item;
- struct cmdq_state *new_state;
- struct cmd_parse_result *pr;
struct format_tree *ft;
const char *cmd, *buf;
size_t len;
+ struct cmdq_state *state;
+ enum cmd_parse_status status;
+ char *error;
if (KEYC_IS_MOUSE(event->key)) {
if (pd->dragging != OFF) {
@@ -295,27 +295,19 @@ popup_key_cb(struct client *c, struct key_event *event)
cmd = format_expand(ft, pd->cmd);
format_free(ft);
- pr = cmd_parse_from_string(cmd, NULL);
- switch (pr->status) {
- case CMD_PARSE_EMPTY:
- break;
- case CMD_PARSE_ERROR:
- new_item = cmdq_get_error(pr->error);
- free(pr->error);
- cmdq_append(c, new_item);
- break;
- case CMD_PARSE_SUCCESS:
- if (pd->item != NULL)
- event = cmdq_get_event(pd->item);
- else
- event = NULL;
- new_state = cmdq_new_state(&pd->fs, event, 0);
- new_item = cmdq_get_command(pr->cmdlist, new_state);
- cmdq_free_state(new_state);
- cmd_list_free(pr->cmdlist);
- cmdq_append(c, new_item);
- break;
+ if (pd->item != NULL)
+ event = cmdq_get_event(pd->item);
+ else
+ event = NULL;
+ state = cmdq_new_state(&pd->fs, event, 0);
+
+ status = cmd_parse_and_append(cmd, NULL, c, state, &error);
+ if (status == CMD_PARSE_ERROR) {
+ cmdq_append(c, cmdq_get_error(error));
+ free(error);
}
+ cmdq_free_state(state);
+
return (1);
out: