cli: add nmc_complete_strv() which takes a string array for completion that may contain NULL
This will allow for a convenient calling pattern when some elements should be printed optionally.
This commit is contained in:
@@ -1349,23 +1349,39 @@ nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *cmd, int argc, char
|
|||||||
/**
|
/**
|
||||||
* nmc_complete_strings:
|
* nmc_complete_strings:
|
||||||
* @prefix: a string to match
|
* @prefix: a string to match
|
||||||
* @...: a %NULL-terminated list of candidate strings
|
* @nargs: the number of elements in @args. Or -1 if @args is a NULL terminated
|
||||||
|
* strv array.
|
||||||
|
* @args: the argument list. If @nargs is not -1, then some elements may
|
||||||
|
* be %NULL to indicate to silently skip the values.
|
||||||
*
|
*
|
||||||
* Prints all the matching candidates for completion. Useful when there's
|
* Prints all the matching candidates for completion. Useful when there's
|
||||||
* no better way to suggest completion other than a hardcoded string list.
|
* no better way to suggest completion other than a hardcoded string list.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
nmc_complete_strings (const char *prefix, ...)
|
nmc_complete_strv (const char *prefix, gssize nargs, const char *const*args)
|
||||||
{
|
{
|
||||||
va_list args;
|
gsize i, n;
|
||||||
const char *candidate;
|
|
||||||
|
|
||||||
va_start (args, prefix);
|
if (prefix && !prefix[0])
|
||||||
while ((candidate = va_arg (args, const char *))) {
|
prefix = NULL;
|
||||||
if (!*prefix || matches (prefix, candidate))
|
|
||||||
g_print ("%s\n", candidate);
|
if (nargs < 0) {
|
||||||
|
nm_assert (nargs == -1);
|
||||||
|
n = NM_PTRARRAY_LEN (args);
|
||||||
|
} else
|
||||||
|
n = (gsize) nargs;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
const char *candidate = args[i];
|
||||||
|
|
||||||
|
if (!candidate)
|
||||||
|
continue;
|
||||||
|
if ( prefix
|
||||||
|
&& !matches (prefix, candidate))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
g_print ("%s\n", candidate);
|
||||||
}
|
}
|
||||||
va_end (args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -88,7 +88,9 @@ typedef struct {
|
|||||||
|
|
||||||
void nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *cmd, int argc, char **argv);
|
void nmc_do_cmd (NmCli *nmc, const NMCCommand cmds[], const char *cmd, int argc, char **argv);
|
||||||
|
|
||||||
void nmc_complete_strings (const char *prefix, ...) G_GNUC_NULL_TERMINATED;
|
void nmc_complete_strv (const char *prefix, gssize nargs, const char *const*args);
|
||||||
|
|
||||||
|
#define nmc_complete_strings(prefix, ...) nmc_complete_strv ((prefix), NM_NARG (__VA_ARGS__), (const char *const[]) { __VA_ARGS__ })
|
||||||
|
|
||||||
void nmc_complete_bool (const char *prefix);
|
void nmc_complete_bool (const char *prefix);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user