mirror of
https://github.com/tmate-io/tmate.git
synced 2025-01-27 08:19:47 +01:00
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.
This commit is contained in:
parent
86504af149
commit
a182502af0
9
cmd.c
9
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>
|
* 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);
|
||||||
|
Loading…
Reference in New Issue
Block a user