summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2016-07-27 16:24:30 +0200
committerLubomir Rintel <lkundrak@v3.sk>2016-08-01 15:51:29 +0200
commit8cc6ce7e44d574cc8baf0dbb3737f6ada060ae99 (patch)
treeb7c51eb32100db114cdaa0d47bec4225623fa249
parent2e5f8d7de6fa5207c2ea745272f8059af99c965c (diff)
downloadNetworkManager-lr/completion-2.tar.gz
cli: add -f argument completionlr/completion-2
-rw-r--r--clients/cli/common.h5
-rw-r--r--clients/cli/connections.c41
-rw-r--r--clients/cli/connections.h6
-rw-r--r--clients/cli/devices.c30
-rw-r--r--clients/cli/devices.h16
-rw-r--r--clients/cli/nmcli.c111
-rw-r--r--clients/cli/settings.h30
7 files changed, 185 insertions, 54 deletions
diff --git a/clients/cli/common.h b/clients/cli/common.h
index 5811639c15..2450cdb950 100644
--- a/clients/cli/common.h
+++ b/clients/cli/common.h
@@ -86,4 +86,9 @@ void nmc_complete_strings (const char *prefix, ...) G_GNUC_NULL_TERMINATED;
void nmc_complete_bool (const char *prefix);
+extern NmcOutputField nmc_fields_ip4_config[];
+extern NmcOutputField nmc_fields_dhcp4_config[];
+extern NmcOutputField nmc_fields_ip6_config[];
+extern NmcOutputField nmc_fields_dhcp6_config[];
+
#endif /* NMC_COMMON_H */
diff --git a/clients/cli/connections.c b/clients/cli/connections.c
index b03842bc92..53e57e4eed 100644
--- a/clients/cli/connections.c
+++ b/clients/cli/connections.c
@@ -115,7 +115,7 @@ struct _OptionInfo {
#define BASE_PROMPT "nmcli> "
/* Available fields for 'connection show' */
-static NmcOutputField nmc_fields_con_show[] = {
+NmcOutputField nmc_fields_con_show[] = {
{"NAME", N_("NAME")}, /* 0 */
{"UUID", N_("UUID")}, /* 1 */
{"TYPE", N_("TYPE")}, /* 2 */
@@ -138,39 +138,8 @@ static NmcOutputField nmc_fields_con_show[] = {
/* Helper macro to define fields */
#define SETTING_FIELD(setting, props) { setting, N_(setting), 0, props, NULL, FALSE, FALSE, 0 }
-/* defined in settings.c */
-extern NmcOutputField nmc_fields_setting_connection[];
-extern NmcOutputField nmc_fields_setting_wired[];
-extern NmcOutputField nmc_fields_setting_8021X[];
-extern NmcOutputField nmc_fields_setting_wireless[];
-extern NmcOutputField nmc_fields_setting_wireless_security[];
-extern NmcOutputField nmc_fields_setting_ip4_config[];
-extern NmcOutputField nmc_fields_setting_ip6_config[];
-extern NmcOutputField nmc_fields_setting_serial[];
-extern NmcOutputField nmc_fields_setting_ppp[];
-extern NmcOutputField nmc_fields_setting_pppoe[];
-extern NmcOutputField nmc_fields_setting_adsl[];
-extern NmcOutputField nmc_fields_setting_gsm[];
-extern NmcOutputField nmc_fields_setting_cdma[];
-extern NmcOutputField nmc_fields_setting_bluetooth[];
-extern NmcOutputField nmc_fields_setting_olpc_mesh[];
-extern NmcOutputField nmc_fields_setting_vpn[];
-extern NmcOutputField nmc_fields_setting_wimax[];
-extern NmcOutputField nmc_fields_setting_infiniband[];
-extern NmcOutputField nmc_fields_setting_bond[];
-extern NmcOutputField nmc_fields_setting_vlan[];
-extern NmcOutputField nmc_fields_setting_bridge[];
-extern NmcOutputField nmc_fields_setting_bridge_port[];
-extern NmcOutputField nmc_fields_setting_team[];
-extern NmcOutputField nmc_fields_setting_team_port[];
-extern NmcOutputField nmc_fields_setting_dcb[];
-extern NmcOutputField nmc_fields_setting_tun[];
-extern NmcOutputField nmc_fields_setting_ip_tunnel[];
-extern NmcOutputField nmc_fields_setting_macvlan[];
-extern NmcOutputField nmc_fields_setting_vxlan[];
-
/* Available settings for 'connection show <con>' - profile part */
-static NmcOutputField nmc_fields_settings_names[] = {
+NmcOutputField nmc_fields_settings_names[] = {
SETTING_FIELD (NM_SETTING_CONNECTION_SETTING_NAME, nmc_fields_setting_connection + 1), /* 0 */
SETTING_FIELD (NM_SETTING_WIRED_SETTING_NAME, nmc_fields_setting_wired + 1), /* 1 */
SETTING_FIELD (NM_SETTING_802_1X_SETTING_NAME, nmc_fields_setting_8021X + 1), /* 2 */
@@ -234,7 +203,7 @@ static NmcOutputField nmc_fields_settings_names[] = {
/* Active connection data */
/* Available fields for GENERAL group */
-static NmcOutputField nmc_fields_con_active_details_general[] = {
+NmcOutputField nmc_fields_con_active_details_general[] = {
{"GROUP", N_("GROUP")}, /* 0 */
{"NAME", N_("NAME")}, /* 1 */
{"UUID", N_("UUID")}, /* 2 */
@@ -256,7 +225,7 @@ static NmcOutputField nmc_fields_con_active_details_general[] = {
/* IP group is handled by common.c */
/* Available fields for VPN group */
-static NmcOutputField nmc_fields_con_active_details_vpn[] = {
+NmcOutputField nmc_fields_con_active_details_vpn[] = {
{"GROUP", N_("GROUP")}, /* 0 */
{"TYPE", N_("TYPE")}, /* 1 */
{"USERNAME", N_("USERNAME")}, /* 2 */
@@ -275,7 +244,7 @@ extern NmcOutputField nmc_fields_dhcp4_config[];
extern NmcOutputField nmc_fields_dhcp6_config[];
/* Available fields for 'connection show <con>' - active part */
-static NmcOutputField nmc_fields_con_active_details_groups[] = {
+NmcOutputField nmc_fields_con_active_details_groups[] = {
{"GENERAL", N_("GENERAL"), 0, nmc_fields_con_active_details_general + 1}, /* 0 */
{"IP4", N_("IP4"), 0, nmc_fields_ip4_config + 1 }, /* 1 */
{"DHCP4", N_("DHCP4"), 0, nmc_fields_dhcp4_config + 1 }, /* 2 */
diff --git a/clients/cli/connections.h b/clients/cli/connections.h
index cb70a3d52e..c73178e24e 100644
--- a/clients/cli/connections.h
+++ b/clients/cli/connections.h
@@ -35,4 +35,10 @@ nmc_read_connection_properties (NmCli *nmc,
void nmc_active_connection_state_to_color (NMActiveConnectionState state, NmcTermColor *color);
+extern NmcOutputField nmc_fields_con_show[];
+extern NmcOutputField nmc_fields_settings_names[];
+extern NmcOutputField nmc_fields_con_active_details_general[];
+extern NmcOutputField nmc_fields_con_active_details_vpn[];
+extern NmcOutputField nmc_fields_con_active_details_groups[];
+
#endif /* NMC_CONNECTIONS_H */
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index 8c255fc828..afa769f63c 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -37,7 +37,7 @@
#define PROMPT_INTERFACES _("Interface(s): ")
/* Available fields for 'device status' */
-static NmcOutputField nmc_fields_dev_status[] = {
+NmcOutputField nmc_fields_dev_status[] = {
{"DEVICE", N_("DEVICE")}, /* 0 */
{"TYPE", N_("TYPE")}, /* 1 */
{"STATE", N_("STATE")}, /* 2 */
@@ -52,7 +52,7 @@ static NmcOutputField nmc_fields_dev_status[] = {
/* Available fields for 'device show' - GENERAL part */
-static NmcOutputField nmc_fields_dev_show_general[] = {
+NmcOutputField nmc_fields_dev_show_general[] = {
{"NAME", N_("NAME")}, /* 0 */
{"DEVICE", N_("DEVICE")}, /* 1 */
{"TYPE", N_("TYPE")}, /* 2 */
@@ -86,7 +86,7 @@ static NmcOutputField nmc_fields_dev_show_general[] = {
#define NMC_FIELDS_DEV_SHOW_GENERAL_COMMON "NAME,DEVICE,TYPE,VENDOR,PRODUCT,DRIVER,HWADDR,STATE"
/* Available fields for 'device show' - CONNECTIONS part */
-static NmcOutputField nmc_fields_dev_show_connections[] = {
+NmcOutputField nmc_fields_dev_show_connections[] = {
{"NAME", N_("NAME")}, /* 0 */
{"AVAILABLE-CONNECTION-PATHS", N_("AVAILABLE-CONNECTION-PATHS")}, /* 1 */
{"AVAILABLE-CONNECTIONS", N_("AVAILABLE-CONNECTIONS")}, /* 2 */
@@ -96,7 +96,7 @@ static NmcOutputField nmc_fields_dev_show_connections[] = {
#define NMC_FIELDS_DEV_SHOW_CONNECTIONS_COMMON "AVAILABLE-CONNECTION-PATHS,AVAILABLE-CONNECTIONS"
/* Available fields for 'device show' - CAPABILITIES part */
-static NmcOutputField nmc_fields_dev_show_cap[] = {
+NmcOutputField nmc_fields_dev_show_cap[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CARRIER-DETECT", N_("CARRIER-DETECT")}, /* 1 */
{"SPEED", N_("SPEED")}, /* 2 */
@@ -107,7 +107,7 @@ static NmcOutputField nmc_fields_dev_show_cap[] = {
#define NMC_FIELDS_DEV_SHOW_CAP_COMMON "NAME,CARRIER-DETECT,SPEED,IS-SOFTWARE"
/* Available fields for 'device show' - wired properties part */
-static NmcOutputField nmc_fields_dev_show_wired_prop[] = {
+NmcOutputField nmc_fields_dev_show_wired_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CARRIER", N_("CARRIER")}, /* 1 */
{"S390-SUBCHANNELS", N_("S390-SUBCHANNELS")}, /* 2 */
@@ -117,7 +117,7 @@ static NmcOutputField nmc_fields_dev_show_wired_prop[] = {
#define NMC_FIELDS_DEV_SHOW_WIRED_PROP_COMMON "NAME,CARRIER,S390-SUBCHANNELS"
/* Available fields for 'device show' - wireless properties part */
-static NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
+NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"WEP", N_("WEP")}, /* 1 */
{"WPA", N_("WPA")}, /* 2 */
@@ -134,7 +134,7 @@ static NmcOutputField nmc_fields_dev_show_wifi_prop[] = {
#define NMC_FIELDS_DEV_SHOW_WIFI_PROP_COMMON "NAME,WEP,WPA,WPA2,TKIP,CCMP,AP,ADHOC"
/* Available fields for 'device show' - wimax properties part */
-static NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
+NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CTR-FREQ", N_("CTR-FREQ")}, /* 1 */
{"RSSI", N_("RSSI")}, /* 2 */
@@ -147,7 +147,7 @@ static NmcOutputField nmc_fields_dev_show_wimax_prop[] = {
#define NMC_FIELDS_DEV_SHOW_WIMAX_PROP_COMMON "NAME,CTR-FREQ,RSSI,CINR,TX-POW,BSID"
/* Available fields for 'device wifi list' */
-static NmcOutputField nmc_fields_dev_wifi_list[] = {
+NmcOutputField nmc_fields_dev_wifi_list[] = {
{"NAME", N_("NAME")}, /* 0 */
{"SSID", N_("SSID")}, /* 1 */
{"SSID-HEX", N_("SSID-HEX")}, /* 2 */
@@ -173,7 +173,7 @@ static NmcOutputField nmc_fields_dev_wifi_list[] = {
#define NMC_FIELDS_DEV_WIFI_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIFI_LIST_COMMON
/* Available fields for 'device wimax list' */
-static NmcOutputField nmc_fields_dev_wimax_list[] = {
+NmcOutputField nmc_fields_dev_wimax_list[] = {
{"NAME", N_("NAME")}, /* 0 */
{"NSP", N_("NSP")}, /* 1 */
{"SIGNAL", N_("SIGNAL")}, /* 2 */
@@ -188,7 +188,7 @@ static NmcOutputField nmc_fields_dev_wimax_list[] = {
#define NMC_FIELDS_DEV_WIMAX_LIST_FOR_DEV_LIST "NAME,"NMC_FIELDS_DEV_WIMAX_LIST_COMMON
/* Available fields for 'device show' - BOND, BRIDGE part */
-static NmcOutputField nmc_fields_dev_show_master_prop[] = {
+NmcOutputField nmc_fields_dev_show_master_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"SLAVES", N_("SLAVES")}, /* 1 */
{NULL, NULL}
@@ -197,7 +197,7 @@ static NmcOutputField nmc_fields_dev_show_master_prop[] = {
#define NMC_FIELDS_DEV_SHOW_MASTER_PROP_COMMON "NAME,SLAVES"
/* Available fields for 'device show' - TEAM part */
-static NmcOutputField nmc_fields_dev_show_team_prop[] = {
+NmcOutputField nmc_fields_dev_show_team_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"SLAVES", N_("SLAVES")}, /* 1 */
{"CONFIG", N_("CONFIG")}, /* 2 */
@@ -207,7 +207,7 @@ static NmcOutputField nmc_fields_dev_show_team_prop[] = {
#define NMC_FIELDS_DEV_SHOW_TEAM_PROP_COMMON "NAME,SLAVES,CONFIG"
/* Available fields for 'device show' - VLAN part */
-static NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
+NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
{"NAME", N_("NAME")}, /* 0 */
{"PARENT", N_("PARENT")}, /* 1 */
{"ID", N_("ID")}, /* 2 */
@@ -217,7 +217,7 @@ static NmcOutputField nmc_fields_dev_show_vlan_prop[] = {
#define NMC_FIELDS_DEV_SHOW_VLAN_PROP_COMMON "NAME,PARENT,ID"
/* Available fields for 'device show' - BLUETOOTH part */
-static NmcOutputField nmc_fields_dev_show_bluetooth[] = {
+NmcOutputField nmc_fields_dev_show_bluetooth[] = {
{"NAME", N_("NAME")}, /* 0 */
{"CAPABILITIES", N_("CAPABILITIES")}, /* 1 */
{NULL, NULL}
@@ -232,7 +232,7 @@ extern NmcOutputField nmc_fields_dhcp4_config[];
extern NmcOutputField nmc_fields_dhcp6_config[];
/* Available sections for 'device show' */
-static NmcOutputField nmc_fields_dev_show_sections[] = {
+NmcOutputField nmc_fields_dev_show_sections[] = {
{"GENERAL", N_("GENERAL"), 0, nmc_fields_dev_show_general + 1 }, /* 0 */
{"CAPABILITIES", N_("CAPABILITIES"), 0, nmc_fields_dev_show_cap + 1 }, /* 1 */
{"WIFI-PROPERTIES", N_("WIFI-PROPERTIES"), 0, nmc_fields_dev_show_wifi_prop + 1 }, /* 2 */
@@ -258,7 +258,7 @@ static NmcOutputField nmc_fields_dev_show_sections[] = {
"GENERAL.CONNECTION,GENERAL.CON-PATH,WIRED-PROPERTIES,IP4,IP6"
/* Available fields for 'device lldp' */
-static NmcOutputField nmc_fields_dev_lldp_list[] = {
+NmcOutputField nmc_fields_dev_lldp_list[] = {
{"NAME", N_("NAME")}, /* 0 */
{"DEVICE", N_("DEVICE")}, /* 1 */
{"CHASSIS-ID", N_("CHASSIS-ID")}, /* 2 */
diff --git a/clients/cli/devices.h b/clients/cli/devices.h
index 7d5c07c022..672944beda 100644
--- a/clients/cli/devices.h
+++ b/clients/cli/devices.h
@@ -34,4 +34,20 @@ NMDevice ** nmc_get_devices_sorted (NMClient *client);
void nmc_device_state_to_color (NMDeviceState state, NmcTermColor *color, NmcTermFormat *color_fmt);
+extern NmcOutputField nmc_fields_dev_status[];
+extern NmcOutputField nmc_fields_dev_show_general[];
+extern NmcOutputField nmc_fields_dev_show_connections[];
+extern NmcOutputField nmc_fields_dev_show_cap[];
+extern NmcOutputField nmc_fields_dev_show_wired_prop[];
+extern NmcOutputField nmc_fields_dev_show_wifi_prop[];
+extern NmcOutputField nmc_fields_dev_show_wimax_prop[];
+extern NmcOutputField nmc_fields_dev_wifi_list[];
+extern NmcOutputField nmc_fields_dev_wimax_list[];
+extern NmcOutputField nmc_fields_dev_show_master_prop[];
+extern NmcOutputField nmc_fields_dev_show_team_prop[];
+extern NmcOutputField nmc_fields_dev_show_vlan_prop[];
+extern NmcOutputField nmc_fields_dev_show_bluetooth[];
+extern NmcOutputField nmc_fields_dev_show_sections[];
+extern NmcOutputField nmc_fields_dev_lldp_list[];
+
#endif /* NMC_DEVICES_H */
diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c
index 7c18bf04ec..9bfa05fade 100644
--- a/clients/cli/nmcli.c
+++ b/clients/cli/nmcli.c
@@ -41,6 +41,7 @@
#include "devices.h"
#include "general.h"
#include "agent.h"
+#include "settings.h"
#if defined(NM_DIST_VERSION)
# define NMCLI_VERSION NM_DIST_VERSION
@@ -64,6 +65,105 @@ GMainLoop *loop = NULL;
static sigset_t signal_set;
struct termios termios_orig;
+static void
+complete_field (GHashTable *h, const char *setting, NmcOutputField field[])
+{
+ int i;
+
+ for (i = 0; field[i].name; i++) {
+ if (setting)
+ g_hash_table_add (h, g_strdup_printf ("%s.%s", setting, field[i].name));
+ else
+ g_hash_table_add (h, g_strdup (field[i].name));
+ }
+}
+
+static void
+complete_one (gpointer key, gpointer value, gpointer user_data)
+{
+ const char *prefix = user_data;
+ const char *name = key;
+ const char *last;
+
+ last = strrchr (prefix, ',');
+ if (last)
+ last++;
+ else
+ last = prefix;
+
+ if ((!*last && !strchr (name, '.')) || matches (last, name) == 0) {
+ g_print ("%.*s%s%s\n", (int)(last-prefix), prefix, name,
+ strcmp (last, name) == 0 ? "," : "");
+ }
+}
+
+static void
+complete_fields (const char *prefix)
+{
+
+ GHashTable *h;
+
+ h = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+ complete_field (h, NULL, nmc_fields_ip4_config);
+ complete_field (h, NULL, nmc_fields_dhcp4_config);
+ complete_field (h, NULL, nmc_fields_ip6_config);
+ complete_field (h, NULL, nmc_fields_dhcp6_config);
+ complete_field (h, NULL, nmc_fields_con_show);
+ complete_field (h, NULL, nmc_fields_settings_names);
+ complete_field (h, NULL, nmc_fields_con_active_details_general);
+ complete_field (h, NULL, nmc_fields_con_active_details_vpn);
+ complete_field (h, NULL, nmc_fields_con_active_details_groups);
+ complete_field (h, NULL, nmc_fields_dev_status);
+ complete_field (h, NULL, nmc_fields_dev_show_general);
+ complete_field (h, NULL, nmc_fields_dev_show_connections);
+ complete_field (h, NULL, nmc_fields_dev_show_cap);
+ complete_field (h, NULL, nmc_fields_dev_show_wired_prop);
+ complete_field (h, NULL, nmc_fields_dev_show_wifi_prop);
+ complete_field (h, NULL, nmc_fields_dev_show_wimax_prop);
+ complete_field (h, NULL, nmc_fields_dev_wifi_list);
+ complete_field (h, NULL, nmc_fields_dev_wimax_list);
+ complete_field (h, NULL, nmc_fields_dev_show_master_prop);
+ complete_field (h, NULL, nmc_fields_dev_show_team_prop);
+ complete_field (h, NULL, nmc_fields_dev_show_vlan_prop);
+ complete_field (h, NULL, nmc_fields_dev_show_bluetooth);
+ complete_field (h, NULL, nmc_fields_dev_show_sections);
+ complete_field (h, NULL, nmc_fields_dev_lldp_list);
+
+ complete_field (h, "connection", nmc_fields_setting_connection);
+ complete_field (h, "wired", nmc_fields_setting_wired);
+ complete_field (h, "8021X", nmc_fields_setting_8021X);
+ complete_field (h, "wireless", nmc_fields_setting_wireless);
+ complete_field (h, "wireless_security", nmc_fields_setting_wireless_security);
+ complete_field (h, "ip4-config", nmc_fields_setting_ip4_config);
+ complete_field (h, "ip6-config", nmc_fields_setting_ip6_config);
+ complete_field (h, "serial", nmc_fields_setting_serial);
+ complete_field (h, "ppp", nmc_fields_setting_ppp);
+ complete_field (h, "pppoe", nmc_fields_setting_pppoe);
+ complete_field (h, "adsl", nmc_fields_setting_adsl);
+ complete_field (h, "gsm", nmc_fields_setting_gsm);
+ complete_field (h, "cdma", nmc_fields_setting_cdma);
+ complete_field (h, "bluetooth", nmc_fields_setting_bluetooth);
+ complete_field (h, "olpc-mesh", nmc_fields_setting_olpc_mesh);
+ complete_field (h, "vpn", nmc_fields_setting_vpn);
+ complete_field (h, "wimax", nmc_fields_setting_wimax);
+ complete_field (h, "infiniband", nmc_fields_setting_infiniband);
+ complete_field (h, "bond", nmc_fields_setting_bond);
+ complete_field (h, "vlan", nmc_fields_setting_vlan);
+ complete_field (h, "bridge", nmc_fields_setting_bridge);
+ complete_field (h, "bridge-port", nmc_fields_setting_bridge_port);
+ complete_field (h, "team", nmc_fields_setting_team);
+ complete_field (h, "team0port", nmc_fields_setting_team_port);
+ complete_field (h, "dcb", nmc_fields_setting_dcb);
+ complete_field (h, "tun", nmc_fields_setting_tun);
+ complete_field (h, "ip-tunnel", nmc_fields_setting_ip_tunnel);
+ complete_field (h, "macvlan", nmc_fields_setting_macvlan);
+ complete_field (h, "vxlan", nmc_fields_setting_vxlan);
+
+ g_hash_table_foreach (h, complete_one, (gpointer) prefix);
+ g_hash_table_destroy (h);
+}
+
/* Get an error quark for use with GError */
GQuark
@@ -188,7 +288,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- nmc_complete_strings (argv[0], "tabular", "multiline", NULL);
+ if (argc == 1 && nmc->complete)
+ nmc_complete_strings (argv[0], "tabular", "multiline", NULL);
if (matches (argv[0], "tabular") == 0)
nmc->multiline_output = FALSE;
else if (matches (argv[0], "multiline") == 0)
@@ -204,7 +305,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- nmc_complete_strings (argv[0], "yes", "no", "auto", NULL);
+ if (argc == 1 && nmc->complete)
+ nmc_complete_strings (argv[0], "yes", "no", "auto", NULL);
if (matches (argv[0], "auto") == 0)
nmc->use_colors = NMC_USE_COLOR_AUTO;
else if (matches (argv[0], "yes") == 0)
@@ -222,7 +324,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
- nmc_complete_strings (argv[0], "yes", "no", NULL);
+ if (argc == 1 && nmc->complete)
+ nmc_complete_strings (argv[0], "yes", "no", NULL);
if (matches (argv[0], "yes") == 0)
nmc->escape_values = TRUE;
else if (matches (argv[0], "no") == 0)
@@ -238,6 +341,8 @@ parse_command_line (NmCli *nmc, int argc, char **argv)
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
return nmc->return_value;
}
+ if (argc == 1 && nmc->complete)
+ complete_fields (argv[0]);
nmc->required_fields = g_strdup (argv[0]);
} else if (matches (opt, "-nocheck") == 0) {
/* ignore for backward compatibility */
diff --git a/clients/cli/settings.h b/clients/cli/settings.h
index bab00ee908..33900510fd 100644
--- a/clients/cli/settings.h
+++ b/clients/cli/settings.h
@@ -63,4 +63,34 @@ gboolean nmc_property_set_gvalue (NMSetting *setting, const char *prop, GValue *
gboolean setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboolean secrets);
+extern NmcOutputField nmc_fields_setting_connection[];
+extern NmcOutputField nmc_fields_setting_wired[];
+extern NmcOutputField nmc_fields_setting_8021X[];
+extern NmcOutputField nmc_fields_setting_wireless[];
+extern NmcOutputField nmc_fields_setting_wireless_security[];
+extern NmcOutputField nmc_fields_setting_ip4_config[];
+extern NmcOutputField nmc_fields_setting_ip6_config[];
+extern NmcOutputField nmc_fields_setting_serial[];
+extern NmcOutputField nmc_fields_setting_ppp[];
+extern NmcOutputField nmc_fields_setting_pppoe[];
+extern NmcOutputField nmc_fields_setting_adsl[];
+extern NmcOutputField nmc_fields_setting_gsm[];
+extern NmcOutputField nmc_fields_setting_cdma[];
+extern NmcOutputField nmc_fields_setting_bluetooth[];
+extern NmcOutputField nmc_fields_setting_olpc_mesh[];
+extern NmcOutputField nmc_fields_setting_vpn[];
+extern NmcOutputField nmc_fields_setting_wimax[];
+extern NmcOutputField nmc_fields_setting_infiniband[];
+extern NmcOutputField nmc_fields_setting_bond[];
+extern NmcOutputField nmc_fields_setting_vlan[];
+extern NmcOutputField nmc_fields_setting_bridge[];
+extern NmcOutputField nmc_fields_setting_bridge_port[];
+extern NmcOutputField nmc_fields_setting_team[];
+extern NmcOutputField nmc_fields_setting_team_port[];
+extern NmcOutputField nmc_fields_setting_dcb[];
+extern NmcOutputField nmc_fields_setting_tun[];
+extern NmcOutputField nmc_fields_setting_ip_tunnel[];
+extern NmcOutputField nmc_fields_setting_macvlan[];
+extern NmcOutputField nmc_fields_setting_vxlan[];
+
#endif /* NMC_SETTINGS_H */