mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-07 06:08:02 +02:00
cli: add property completion to meta-data
(not used yet).
This commit is contained in:
parent
4f19c46a1e
commit
cfd9f66ae9
5 changed files with 113 additions and 9 deletions
|
|
@ -3846,13 +3846,6 @@ ensure_settings (NMConnection *connection, const NameItem *item)
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static char *
|
|
||||||
gen_func_slave_type (const char *text, int state)
|
|
||||||
{
|
|
||||||
const char *words[] = { "bond", "team", "bridge", NULL };
|
|
||||||
return nmc_rl_gen_func_basic (text, state, words);
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
gen_func_vpn_types (const char *text, int state)
|
gen_func_vpn_types (const char *text, int state)
|
||||||
{
|
{
|
||||||
|
|
@ -4306,7 +4299,6 @@ _meta_abstract_get_option_info (const NMMetaAbstractInfo *abstract_info)
|
||||||
OPTION_INFO (CONNECTION, NM_SETTING_CONNECTION_AUTOCONNECT, "autoconnect", NULL, gen_func_bool_values_l10n),
|
OPTION_INFO (CONNECTION, NM_SETTING_CONNECTION_AUTOCONNECT, "autoconnect", NULL, gen_func_bool_values_l10n),
|
||||||
OPTION_INFO (CONNECTION, NM_SETTING_CONNECTION_INTERFACE_NAME, "ifname", set_connection_iface, nmc_rl_gen_func_ifnames),
|
OPTION_INFO (CONNECTION, NM_SETTING_CONNECTION_INTERFACE_NAME, "ifname", set_connection_iface, nmc_rl_gen_func_ifnames),
|
||||||
OPTION_INFO (CONNECTION, NM_SETTING_CONNECTION_MASTER, "master", set_connection_master, gen_func_master_ifnames),
|
OPTION_INFO (CONNECTION, NM_SETTING_CONNECTION_MASTER, "master", set_connection_master, gen_func_master_ifnames),
|
||||||
OPTION_INFO (CONNECTION, NM_SETTING_CONNECTION_SLAVE_TYPE, "slave-type", NULL, gen_func_slave_type),
|
|
||||||
OPTION_INFO (INFINIBAND, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "transport-mode", NULL, gen_func_ib_type),
|
OPTION_INFO (INFINIBAND, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "transport-mode", NULL, gen_func_ib_type),
|
||||||
OPTION_INFO (WIRELESS, NM_SETTING_WIRELESS_MODE, "mode", NULL, gen_func_wifi_mode),
|
OPTION_INFO (WIRELESS, NM_SETTING_WIRELESS_MODE, "mode", NULL, gen_func_wifi_mode),
|
||||||
OPTION_INFO (BLUETOOTH, NM_SETTING_BLUETOOTH_TYPE, "bt-type", set_bluetooth_type, gen_func_bt_type),
|
OPTION_INFO (BLUETOOTH, NM_SETTING_BLUETOOTH_TYPE, "bt-type", set_bluetooth_type, gen_func_bt_type),
|
||||||
|
|
@ -4462,6 +4454,15 @@ static void
|
||||||
complete_option (const NMMetaAbstractInfo *abstract_info, const gchar *prefix)
|
complete_option (const NMMetaAbstractInfo *abstract_info, const gchar *prefix)
|
||||||
{
|
{
|
||||||
const OptionInfo *candidate;
|
const OptionInfo *candidate;
|
||||||
|
const char *const*values;
|
||||||
|
gs_strfreev char **values_to_free = NULL;
|
||||||
|
|
||||||
|
values = nm_meta_abstract_info_complete (abstract_info, prefix, &values_to_free);
|
||||||
|
if (values) {
|
||||||
|
for (; values[0]; values++)
|
||||||
|
g_print ("%s\n", values[0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
candidate = _meta_abstract_get_option_info (abstract_info);
|
candidate = _meta_abstract_get_option_info (abstract_info);
|
||||||
if (candidate && candidate->generator_func)
|
if (candidate && candidate->generator_func)
|
||||||
|
|
@ -4513,7 +4514,6 @@ complete_property (const gchar *setting_name, const gchar *property, const gchar
|
||||||
} else if ( strcmp (setting_name, NM_SETTING_VXLAN_SETTING_NAME) == 0
|
} else if ( strcmp (setting_name, NM_SETTING_VXLAN_SETTING_NAME) == 0
|
||||||
&& strcmp (property, NM_SETTING_VXLAN_PARENT) == 0)
|
&& strcmp (property, NM_SETTING_VXLAN_PARENT) == 0)
|
||||||
run_rl_generator (nmc_rl_gen_func_ifnames, prefix);
|
run_rl_generator (nmc_rl_gen_func_ifnames, prefix);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -253,3 +253,68 @@ nm_meta_abstract_info_get (const NMMetaAbstractInfo *abstract_info,
|
||||||
out_flags,
|
out_flags,
|
||||||
out_to_free);
|
out_to_free);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *const*
|
||||||
|
nm_meta_abstract_info_complete (const NMMetaAbstractInfo *abstract_info,
|
||||||
|
const char *text,
|
||||||
|
char ***out_to_free)
|
||||||
|
{
|
||||||
|
const char *const*values;
|
||||||
|
gsize i, j, text_len;
|
||||||
|
|
||||||
|
nm_assert (abstract_info);
|
||||||
|
nm_assert (abstract_info->meta_type);
|
||||||
|
nm_assert (out_to_free && !*out_to_free);
|
||||||
|
|
||||||
|
*out_to_free = NULL;
|
||||||
|
|
||||||
|
if (!abstract_info->meta_type->complete_fcn)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
values = abstract_info->meta_type->complete_fcn (abstract_info,
|
||||||
|
text,
|
||||||
|
out_to_free);
|
||||||
|
|
||||||
|
nm_assert (!*out_to_free || values == (const char *const*) *out_to_free);
|
||||||
|
|
||||||
|
if (!text || !text[0] || !values || !values[0])
|
||||||
|
return values;
|
||||||
|
|
||||||
|
/* for convenience, we all the complete_fcn() implementations to
|
||||||
|
* ignore "text". We filter out invalid matches here. */
|
||||||
|
|
||||||
|
text_len = strlen (text);
|
||||||
|
|
||||||
|
if (*out_to_free) {
|
||||||
|
char **v = *out_to_free;
|
||||||
|
|
||||||
|
for (i =0, j = 0; v[i]; i++) {
|
||||||
|
if (strncmp (v[i], text, text_len) != 0)
|
||||||
|
continue;
|
||||||
|
v[j++] = v[i];
|
||||||
|
}
|
||||||
|
v[j++] = NULL;
|
||||||
|
return (const char *const*) *out_to_free;
|
||||||
|
} else {
|
||||||
|
const char *const*v = values;
|
||||||
|
char **r;
|
||||||
|
|
||||||
|
for (i = 0, j = 0; v[i]; i++) {
|
||||||
|
if (strncmp (v[i], text, text_len) != 0)
|
||||||
|
continue;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
if (j == i)
|
||||||
|
return values;
|
||||||
|
|
||||||
|
r = g_new (char *, j + 1);
|
||||||
|
v = values;
|
||||||
|
for (i = 0, j = 0; v[i]; i++) {
|
||||||
|
if (strncmp (v[i], text, text_len) != 0)
|
||||||
|
continue;
|
||||||
|
r[j++] = g_strdup (v[i]);
|
||||||
|
}
|
||||||
|
r[j++] = NULL;
|
||||||
|
return (const char *const*) (*out_to_free = r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,10 @@ gconstpointer nm_meta_abstract_info_get (const NMMetaAbstractInfo *abstract_info
|
||||||
NMMetaAccessorGetOutFlags *out_flags,
|
NMMetaAccessorGetOutFlags *out_flags,
|
||||||
gpointer *out_to_free);
|
gpointer *out_to_free);
|
||||||
|
|
||||||
|
const char *const*nm_meta_abstract_info_complete (const NMMetaAbstractInfo *abstract_info,
|
||||||
|
const char *text,
|
||||||
|
char ***out_to_free);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#endif /* _NM_META_SETTING_ACCESS_H__ */
|
#endif /* _NM_META_SETTING_ACCESS_H__ */
|
||||||
|
|
|
||||||
|
|
@ -7210,6 +7210,33 @@ _meta_type_property_info_get_nested (const NMMetaAbstractInfo *abstract_info,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *const*
|
||||||
|
_meta_type_property_info_complete_fcn (const NMMetaAbstractInfo *abstract_info,
|
||||||
|
const char *text,
|
||||||
|
char ***out_to_free)
|
||||||
|
{
|
||||||
|
const NMMetaPropertyInfo *info = (const NMMetaPropertyInfo *) abstract_info;
|
||||||
|
|
||||||
|
nm_assert (out_to_free && !*out_to_free);
|
||||||
|
|
||||||
|
if (info->property_type->complete_fcn) {
|
||||||
|
return info->property_type->complete_fcn (info,
|
||||||
|
text,
|
||||||
|
out_to_free);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info->property_type->values_fcn) {
|
||||||
|
return info->property_type->values_fcn (info,
|
||||||
|
out_to_free);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( info->property_typ_data
|
||||||
|
&& info->property_typ_data->values_static)
|
||||||
|
return info->property_typ_data->values_static;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
const NMMetaType nm_meta_type_setting_info_editor = {
|
const NMMetaType nm_meta_type_setting_info_editor = {
|
||||||
.type_name = "setting_info_editor",
|
.type_name = "setting_info_editor",
|
||||||
.get_name = _meta_type_setting_info_editor_get_name,
|
.get_name = _meta_type_setting_info_editor_get_name,
|
||||||
|
|
@ -7222,6 +7249,7 @@ const NMMetaType nm_meta_type_property_info = {
|
||||||
.get_name = _meta_type_property_info_get_name,
|
.get_name = _meta_type_property_info_get_name,
|
||||||
.get_nested = _meta_type_property_info_get_nested,
|
.get_nested = _meta_type_property_info_get_nested,
|
||||||
.get_fcn = _meta_type_property_info_get_fcn,
|
.get_fcn = _meta_type_property_info_get_fcn,
|
||||||
|
.complete_fcn = _meta_type_property_info_complete_fcn,
|
||||||
};
|
};
|
||||||
|
|
||||||
const NMMetaType nm_meta_type_nested_property_info = {
|
const NMMetaType nm_meta_type_nested_property_info = {
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,10 @@ struct _NMMetaPropertyType {
|
||||||
|
|
||||||
const char *const*(*values_fcn) (const NMMetaPropertyInfo *property_info,
|
const char *const*(*values_fcn) (const NMMetaPropertyInfo *property_info,
|
||||||
char ***out_to_free);
|
char ***out_to_free);
|
||||||
|
|
||||||
|
const char *const*(*complete_fcn) (const NMMetaPropertyInfo *property_info,
|
||||||
|
const char *text,
|
||||||
|
char ***out_to_free);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _NMUtilsEnumValueInfo;
|
struct _NMUtilsEnumValueInfo;
|
||||||
|
|
@ -284,6 +288,9 @@ struct _NMMetaType {
|
||||||
NMMetaAccessorGetFlags get_flags,
|
NMMetaAccessorGetFlags get_flags,
|
||||||
NMMetaAccessorGetOutFlags *out_flags,
|
NMMetaAccessorGetOutFlags *out_flags,
|
||||||
gpointer *out_to_free);
|
gpointer *out_to_free);
|
||||||
|
const char *const*(*complete_fcn) (const NMMetaAbstractInfo *info,
|
||||||
|
const char *text,
|
||||||
|
char ***out_to_free);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _NMMetaAbstractInfo {
|
struct _NMMetaAbstractInfo {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue