Don't let ambiguous commands override an exact alias match: eg if commands

"abc-1", "abc-2", "abc-3" exist and "abc-3" has the alias "abc", "tmux abc"
should execute abc-3, not complain about the command being ambiguous.
pull/1/head
Nicholas Marriott 2009-07-08 18:01:55 +00:00
parent 86504af149
commit a182502af0
1 changed files with 6 additions and 3 deletions

9
cmd.c
View File

@ -1,4 +1,4 @@
/* $Id: cmd.c,v 1.97 2009-06-25 16:21:32 nicm Exp $ */ /* $OpenBSD: cmd.c,v 1.3 2009/07/07 21:23:22 nicm Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -105,7 +105,7 @@ cmd_parse(int argc, char **argv, char **cause)
const struct cmd_entry **entryp, *entry; const struct cmd_entry **entryp, *entry;
struct cmd *cmd; struct cmd *cmd;
char s[BUFSIZ]; char s[BUFSIZ];
int opt; int opt, ambiguous = 0;
*cause = NULL; *cause = NULL;
if (argc == 0) { if (argc == 0) {
@ -117,6 +117,7 @@ cmd_parse(int argc, char **argv, char **cause)
for (entryp = cmd_table; *entryp != NULL; entryp++) { for (entryp = cmd_table; *entryp != NULL; entryp++) {
if ((*entryp)->alias != NULL && if ((*entryp)->alias != NULL &&
strcmp((*entryp)->alias, argv[0]) == 0) { strcmp((*entryp)->alias, argv[0]) == 0) {
ambiguous = 0;
entry = *entryp; entry = *entryp;
break; break;
} }
@ -124,13 +125,15 @@ cmd_parse(int argc, char **argv, char **cause)
if (strncmp((*entryp)->name, argv[0], strlen(argv[0])) != 0) if (strncmp((*entryp)->name, argv[0], strlen(argv[0])) != 0)
continue; continue;
if (entry != NULL) if (entry != NULL)
goto ambiguous; ambiguous = 1;
entry = *entryp; entry = *entryp;
/* Bail now if an exact match. */ /* Bail now if an exact match. */
if (strcmp(entry->name, argv[0]) == 0) if (strcmp(entry->name, argv[0]) == 0)
break; break;
} }
if (ambiguous)
goto ambiguous;
if (entry == NULL) { if (entry == NULL) {
xasprintf(cause, "unknown command: %s", argv[0]); xasprintf(cause, "unknown command: %s", argv[0]);
return (NULL); return (NULL);