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;
|
||||
|
||||
if ((!*last && !strchr(name, '.')) || matches(last, name)) {
|
||||
if (option != prefix) {
|
||||
if (!nm_streq0(option, prefix)) {
|
||||
/* value prefix was not a standalone argument,
|
||||
* it was part of --option=<value> argument.
|
||||
* 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);
|
||||
while ((candidate = va_arg(args, const char *))) {
|
||||
if (!*prefix || matches(prefix, candidate)) {
|
||||
if (option != prefix) {
|
||||
if (!nm_streq0(option, prefix)) {
|
||||
/* value prefix was not a standalone argument,
|
||||
* it was part of --option=<value> argument.
|
||||
* 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);
|
||||
|
Reference in New Issue
Block a user