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:
Filip Pokryvka
2024-08-26 12:00:50 +02:00
committed by Fernando Fernandez Mancera
parent d8c924caa2
commit 72a410c1ad

View File

@@ -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);