=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/menu.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- src/usr.bin/tmux/menu.c 2019/05/20 11:46:06 1.4 +++ src/usr.bin/tmux/menu.c 2019/05/23 11:13:30 1.5 @@ -1,4 +1,4 @@ -/* $OpenBSD: menu.c,v 1.4 2019/05/20 11:46:06 nicm Exp $ */ +/* $OpenBSD: menu.c,v 1.5 2019/05/23 11:13:30 nicm Exp $ */ /* * Copyright (c) 2019 Nicholas Marriott @@ -200,9 +200,8 @@ u_int i; int count = menu->count, old = md->choice; const struct menu_item *item; - struct cmd_list *cmdlist; struct cmdq_item *new_item; - char *cause; + struct cmd_parse_result *pr; if (KEYC_IS_MOUSE(event->key)) { if (md->flags & MENU_NOMOUSE) @@ -272,22 +271,22 @@ md->cb = NULL; return (1); } - cmdlist = cmd_string_parse(item->command, NULL, 0, &cause); - if (cmdlist == NULL) { - if (cause != NULL) - new_item = cmdq_get_error(cause); - else - new_item = NULL; - free(cause); - } else { - new_item = cmdq_get_command(cmdlist, NULL, NULL, 0); - cmd_list_free(cmdlist); - } - if (new_item != NULL) { - if (md->item != NULL) - cmdq_insert_after(md->item, new_item); - else - cmdq_append(c, new_item); + + pr = cmd_parse_from_string(item->command, NULL); + switch (pr->status) { + case CMD_PARSE_EMPTY: + new_item = NULL; + 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: + new_item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); + cmd_list_free(pr->cmdlist); + cmdq_append(c, new_item); + break; } return (1); }