cli: make subcommand dispatch do autocompletion

This commit is contained in:
Lubomir Rintel 2016-06-24 18:07:24 +02:00
parent 1e582f0172
commit 08969b1789
2 changed files with 18 additions and 4 deletions

View file

@ -1412,6 +1412,14 @@ nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *cmd, int argc, char
{
const NMCCommand *c;
if (argc == 1 && nmc->complete) {
for (c = cmds; c->cmd; ++c) {
if (!*cmd || matches (cmd, c->cmd) == 0)
g_print ("%s\n", c->cmd);
}
return nmc->return_value;
}
for (c = cmds; c->cmd; ++c) {
if (cmd && matches (cmd, c->cmd) == 0)
break;

View file

@ -2281,10 +2281,6 @@ do_device_set (NmCli *nmc, int argc, char **argv)
};
gs_free_error GError *error = NULL;
/* Not (yet?) supported */
if (nmc->complete)
return nmc->return_value;
if (argc >= 1 && g_strcmp0 (*argv, "ifname") == 0) {
argc--;
argv++;
@ -2305,11 +2301,16 @@ do_device_set (NmCli *nmc, int argc, char **argv)
do {
gboolean flag;
if (argc == 1 && nmc->complete)
nmc_complete_strings (*argv, "managed", "autoconnect", NULL);
if (matches (*argv, "managed") == 0) {
if (next_arg (&argc, &argv) != 0) {
g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
if (argc == 1 && nmc->complete)
nmc_complete_bool (*argv);
if (!nmc_string_to_bool (*argv, &flag, &error)) {
g_string_printf (nmc->return_text, _("Error: 'managed': %s."),
error->message);
@ -2323,6 +2324,8 @@ do_device_set (NmCli *nmc, int argc, char **argv)
g_string_printf (nmc->return_text, _("Error: '%s' argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
if (argc == 1 && nmc->complete)
nmc_complete_bool (*argv);
if (!nmc_string_to_bool (*argv, &flag, &error)) {
g_string_printf (nmc->return_text, _("Error: 'autoconnect': %s."),
error->message);
@ -2337,6 +2340,9 @@ do_device_set (NmCli *nmc, int argc, char **argv)
}
} while (next_arg (&argc, &argv) == 0);
if (nmc->complete)
return nmc->return_value;
/* when multiple properties are specified, set them in the order as they
* are specified on the command line. */
if ( values[DEV_SET_AUTOCONNECT].idx >= 0