diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-07-08 18:01:55 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-07-08 18:01:55 +0000 |
commit | a182502af0a631cd3a3dcf63e89e1139e3440ecb (patch) | |
tree | 5d26e2ad8395d5c079a294bba596e00886a4eebb /cmd.c | |
parent | 86504af1491c83fe9e4f4d2b882610f4efe0c60b (diff) | |
download | rtmux-a182502af0a631cd3a3dcf63e89e1139e3440ecb.tar.gz rtmux-a182502af0a631cd3a3dcf63e89e1139e3440ecb.tar.bz2 rtmux-a182502af0a631cd3a3dcf63e89e1139e3440ecb.zip |
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.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -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); |