diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2019-04-23 21:35:19 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2019-05-06 10:10:00 +0200 |
commit | eb724293c25038c7e0f0d6789af2cea11da176eb (patch) | |
tree | 0a48154f0a864621e2b9c4bfa26191c002d5e8bc /clients/cli | |
parent | 78b9448b69d1e511aab9f24f4da8a6731c2dc7ee (diff) | |
download | NetworkManager-eb724293c25038c7e0f0d6789af2cea11da176eb.tar.gz |
cli: allow completing filenames
Allow the completion function to indicate that the word should be
completed as a filename by the shell.
Diffstat (limited to 'clients/cli')
-rw-r--r-- | clients/cli/connections.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 282cbe06f0..4b484e7bee 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -3785,6 +3785,7 @@ _meta_abstract_complete (const NMMetaAbstractInfo *abstract_info, const char *te nmc_meta_environment_arg, &ctx, text, + NULL, &values_to_free); if (values) return values_to_free ?: g_strdupv ((char **) values); @@ -4525,11 +4526,12 @@ run_rl_generator (rl_compentry_func_t *generator_func, const char *prefix) } static gboolean -complete_option (const NMMetaAbstractInfo *abstract_info, const char *prefix, NMConnection *context_connection) +complete_option (NmCli *nmc, const NMMetaAbstractInfo *abstract_info, const char *prefix, NMConnection *context_connection) { const OptionInfo *candidate; const char *const*values; gs_strfreev char **values_to_free = NULL; + gboolean complete_filename = FALSE; const NMMetaOperationContext ctx = { .connection = context_connection, }; @@ -4539,7 +4541,12 @@ complete_option (const NMMetaAbstractInfo *abstract_info, const char *prefix, NM nmc_meta_environment_arg, &ctx, prefix, + &complete_filename, &values_to_free); + if (complete_filename) { + nmc->return_value = NMC_RESULT_COMPLETE_FILE; + return TRUE; + } if (values) { for (; values[0]; values++) g_print ("%s\n", values[0]); @@ -4556,13 +4563,13 @@ complete_option (const NMMetaAbstractInfo *abstract_info, const char *prefix, NM } static void -complete_property (const char *setting_name, const char *property, const char *prefix, NMConnection *connection) +complete_property (NmCli *nmc, const char *setting_name, const char *property, const char *prefix, NMConnection *connection) { const NMMetaPropertyInfo *property_info; property_info = nm_meta_property_info_find_by_name (setting_name, property); if (property_info) - complete_option ((const NMMetaAbstractInfo *) property_info, prefix, connection); + complete_option (nmc, (const NMMetaAbstractInfo *) property_info, prefix, connection); } /*****************************************************************************/ @@ -4652,8 +4659,10 @@ nmc_read_connection_properties (NmCli *nmc, if (!get_value (&value, argc, argv, option, error)) return FALSE; - if (!*argc && nmc->complete) - complete_property (setting, strv[1], value ?: "", connection); + if (!*argc && nmc->complete) { + complete_property (nmc, setting, strv[1], value ?: "", connection); + return TRUE; + } if (!set_property (nmc->client, connection, setting_name, strv[1], value, modifier, error)) return FALSE; @@ -4734,7 +4743,7 @@ nmc_read_connection_properties (NmCli *nmc, return FALSE; if (!*argc && nmc->complete) - complete_option (chosen, value ?: "", connection); + complete_option (nmc, chosen, value ?: "", connection); if (!set_option (nmc, connection, chosen, value, error)) return FALSE; @@ -8863,7 +8872,7 @@ do_connection_import (NmCli *nmc, int argc, char **argv) if ( argc == 1 && nmc->complete) { nmc_complete_strings (*argv, "wireguard"); - complete_option ((const NMMetaAbstractInfo *) nm_meta_property_info_vpn_service_type, + complete_option (nmc, (const NMMetaAbstractInfo *) nm_meta_property_info_vpn_service_type, *argv, NULL); } |