summaryrefslogtreecommitdiffstats
path: root/cmd.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2009-07-08 18:01:55 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2009-07-08 18:01:55 +0000
commita182502af0a631cd3a3dcf63e89e1139e3440ecb (patch)
tree5d26e2ad8395d5c079a294bba596e00886a4eebb /cmd.c
parent86504af1491c83fe9e4f4d2b882610f4efe0c60b (diff)
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.
Diffstat (limited to 'cmd.c')
-rw-r--r--cmd.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/cmd.c b/cmd.c
index 20e3eead..26c6770d 100644
--- a/cmd.c
+++ b/cmd.c
@@ -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>
@@ -105,7 +105,7 @@ cmd_parse(int argc, char **argv, char **cause)
const struct cmd_entry **entryp, *entry;
struct cmd *cmd;
char s[BUFSIZ];
- int opt;
+ int opt, ambiguous = 0;
*cause = NULL;
if (argc == 0) {
@@ -117,6 +117,7 @@ cmd_parse(int argc, char **argv, char **cause)
for (entryp = cmd_table; *entryp != NULL; entryp++) {
if ((*entryp)->alias != NULL &&
strcmp((*entryp)->alias, argv[0]) == 0) {
+ ambiguous = 0;
entry = *entryp;
break;
}
@@ -124,13 +125,15 @@ cmd_parse(int argc, char **argv, char **cause)
if (strncmp((*entryp)->name, argv[0], strlen(argv[0])) != 0)
continue;
if (entry != NULL)
- goto ambiguous;
+ ambiguous = 1;
entry = *entryp;
/* Bail now if an exact match. */
if (strcmp(entry->name, argv[0]) == 0)
break;
}
+ if (ambiguous)
+ goto ambiguous;
if (entry == NULL) {
xasprintf(cause, "unknown command: %s", argv[0]);
return (NULL);