nmcli: fix bash completion for fields
The code handling options with supposes, that options are split by `=`, which is not the case. This fixes the following: ``` nmcli -f ipv4.ad\t\t nmcli -f ipv4.ad=ipv4.addresses nmcli --field ipv4.ad\t\t nmcli --field ipv4.ad=ipv4.addresses ``` Using options with values separated with `=` remains broken, but this change doesn't affect it: ``` nmcli --field=ipv4.ad\t\t nmcli --field=ipv4.ad ``` Also, `man` and `usage` uses `--color auto|yes|no`, not `--color=auto|yes|no`. So, this fix should be sufficient. Bug report: https://bugzilla.redhat.com/show_bug.cgi?id=2115827
This commit is contained in:

committed by
Fernando Fernandez Mancera

parent
d8c924caa2
commit
72a410c1ad
@@ -163,17 +163,18 @@ complete_one(gpointer key, gpointer value, gpointer user_data)
|
|||||||
last = prefix;
|
last = prefix;
|
||||||
|
|
||||||
if ((!*last && !strchr(name, '.')) || matches(last, name)) {
|
if ((!*last && !strchr(name, '.')) || matches(last, name)) {
|
||||||
if (option != prefix) {
|
if (!nm_streq0(option, prefix)) {
|
||||||
/* value prefix was not a standalone argument,
|
/* value prefix was not a standalone argument,
|
||||||
* it was part of --option=<value> argument.
|
* it was part of --option=<value> argument.
|
||||||
* Repeat the part leading to "=". */
|
* Repeat the part leading to "=". */
|
||||||
nmc_print("%s=", option);
|
nmc_print("%s\n", option);
|
||||||
|
} else {
|
||||||
|
nmc_print("%.*s%s%s\n",
|
||||||
|
(int) (last - prefix),
|
||||||
|
prefix,
|
||||||
|
name,
|
||||||
|
nm_streq(last, name) ? "," : "");
|
||||||
}
|
}
|
||||||
nmc_print("%.*s%s%s\n",
|
|
||||||
(int) (last - prefix),
|
|
||||||
prefix,
|
|
||||||
name,
|
|
||||||
strcmp(last, name) == 0 ? "," : "");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,13 +226,14 @@ complete_option_with_value(const char *option, const char *prefix, ...)
|
|||||||
va_start(args, prefix);
|
va_start(args, prefix);
|
||||||
while ((candidate = va_arg(args, const char *))) {
|
while ((candidate = va_arg(args, const char *))) {
|
||||||
if (!*prefix || matches(prefix, candidate)) {
|
if (!*prefix || matches(prefix, candidate)) {
|
||||||
if (option != prefix) {
|
if (!nm_streq0(option, prefix)) {
|
||||||
/* value prefix was not a standalone argument,
|
/* value prefix was not a standalone argument,
|
||||||
* it was part of --option=<value> argument.
|
* it was part of --option=<value> argument.
|
||||||
* Repeat the part leading to "=". */
|
* Repeat the part leading to "=". */
|
||||||
nmc_print("%s=", option);
|
nmc_print("%s%s\n", option, candidate + strlen(prefix));
|
||||||
|
} else {
|
||||||
|
nmc_print("%s\n", candidate);
|
||||||
}
|
}
|
||||||
nmc_print("%s\n", candidate);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
Reference in New Issue
Block a user