mirror of
https://github.com/tmux/tmux.git
synced 2024-11-16 01:18:52 +00:00
When matching the session names with -t, look for exact matches first before
trying partial matches. Avoids problems where two ambiguous matches are present before an exact match (eg foo1, foo2, foo would give an error on trying -tfoo), reported by Natacha Port? natbsd at instinctive dot eu.
This commit is contained in:
parent
2a585dc4ed
commit
1c853c6860
23
cmd.c
23
cmd.c
@ -488,19 +488,25 @@ cmd_lookup_session(const char *name, int *ambiguous)
|
|||||||
*ambiguous = 0;
|
*ambiguous = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Look for matches. Session names must be unique so an exact match
|
* Look for matches. First look for exact matches - session names must
|
||||||
* can't be ambigious and can just be returned.
|
* be unique so an exact match can't be ambigious and can just be
|
||||||
|
* returned.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {
|
||||||
|
if ((s = ARRAY_ITEM(&sessions, i)) == NULL)
|
||||||
|
continue;
|
||||||
|
if (strcmp(name, s->name) == 0)
|
||||||
|
return (s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Otherwise look for partial matches, returning early if it is found to
|
||||||
|
* be ambiguous.
|
||||||
*/
|
*/
|
||||||
sfound = NULL;
|
sfound = NULL;
|
||||||
for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {
|
for (i = 0; i < ARRAY_LENGTH(&sessions); i++) {
|
||||||
if ((s = ARRAY_ITEM(&sessions, i)) == NULL)
|
if ((s = ARRAY_ITEM(&sessions, i)) == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Check for an exact match and return it if found. */
|
|
||||||
if (strcmp(name, s->name) == 0)
|
|
||||||
return (s);
|
|
||||||
|
|
||||||
/* Then check for pattern matches. */
|
|
||||||
if (strncmp(name, s->name, strlen(name)) == 0 ||
|
if (strncmp(name, s->name, strlen(name)) == 0 ||
|
||||||
fnmatch(name, s->name, 0) == 0) {
|
fnmatch(name, s->name, 0) == 0) {
|
||||||
if (sfound != NULL) {
|
if (sfound != NULL) {
|
||||||
@ -510,7 +516,6 @@ cmd_lookup_session(const char *name, int *ambiguous)
|
|||||||
sfound = s;
|
sfound = s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (sfound);
|
return (sfound);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user