1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

Make it possible to list specific section with /set

update help

Allow partial matching
This commit is contained in:
vague666 2019-05-28 14:00:04 +02:00
parent 7e7bc98396
commit cd5958079c
2 changed files with 33 additions and 5 deletions

View File

@ -7,6 +7,7 @@
-clear: Removes the setting's value from the configuration. -clear: Removes the setting's value from the configuration.
-default: Restore the setting to its default value. -default: Restore the setting to its default value.
-section: Print settings under the specified section
The setting and the value; if no value is given, the list of settings that The setting and the value; if no value is given, the list of settings that
matched will be returned. If no arguments are given, all the settings will matched will be returned. If no arguments are given, all the settings will
@ -27,6 +28,7 @@
/SET -clear nick /SET -clear nick
/SET log_timestamp %%H:%%H:%%S /SET log_timestamp %%H:%%H:%%S
/SET -default log_timestamp /SET -default log_timestamp
/SET -section lookandfeel
/SET close /SET close
%9See also:%9 SAVE, TOGGLE %9See also:%9 SAVE, TOGGLE

View File

@ -69,6 +69,29 @@ static void set_print_pattern(const char *pattern)
g_slist_free(sets); g_slist_free(sets);
} }
static void set_print_section(const char *pattern)
{
GSList *sets, *tmp;
const char *last_section;
last_section = "";
sets = settings_get_sorted();
for (tmp = sets; tmp != NULL; tmp = tmp->next) {
SETTINGS_REC *rec = tmp->data;
if (stristr(rec->section, pattern) != NULL) {
if (g_strcmp0(last_section, rec->section) != 0) {
/* print section */
printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP,
TXT_SET_TITLE, rec->section);
last_section = rec->section;
}
set_print(rec);
}
}
g_slist_free(sets);
}
static void set_boolean(const char *key, const char *value) static void set_boolean(const char *key, const char *value)
{ {
char *stripped_value; char *stripped_value;
@ -123,13 +146,13 @@ static void set_choice(const char *key, const char *value)
g_free(stripped_value); g_free(stripped_value);
} }
/* SYNTAX: SET [-clear | -default] [<key> [<value>]] */ /* SYNTAX: SET [-clear | -default | -section] [<key> [<value>]] */
static void cmd_set(char *data) static void cmd_set(char *data)
{ {
GHashTable *optlist; GHashTable *optlist;
char *key, *value; char *key, *value;
void *free_arg; void *free_arg;
int clear, set_default; int clear, set_default, list_section;
SETTINGS_REC *rec; SETTINGS_REC *rec;
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST | if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST |
@ -139,11 +162,14 @@ static void cmd_set(char *data)
clear = g_hash_table_lookup(optlist, "clear") != NULL; clear = g_hash_table_lookup(optlist, "clear") != NULL;
set_default = g_hash_table_lookup(optlist, "default") != NULL; set_default = g_hash_table_lookup(optlist, "default") != NULL;
list_section = g_hash_table_lookup(optlist, "section") != NULL;
if (*key == '\0') if (*key == '\0')
clear = set_default = FALSE; clear = set_default = list_section = FALSE;
if (!(clear || set_default || *value != '\0')) if (list_section)
set_print_section(key);
else if (!(clear || set_default || *value != '\0'))
set_print_pattern(key); set_print_pattern(key);
else { else {
rec = settings_get_record(key); rec = settings_get_record(key);
@ -408,7 +434,7 @@ void fe_settings_init(void)
command_bind("unalias", NULL, (SIGNAL_FUNC) cmd_unalias); command_bind("unalias", NULL, (SIGNAL_FUNC) cmd_unalias);
command_bind("reload", NULL, (SIGNAL_FUNC) cmd_reload); command_bind("reload", NULL, (SIGNAL_FUNC) cmd_reload);
command_bind("save", NULL, (SIGNAL_FUNC) cmd_save); command_bind("save", NULL, (SIGNAL_FUNC) cmd_save);
command_set_options("set", "clear default"); command_set_options("set", "clear default section");
signal_add("settings errors", (SIGNAL_FUNC) sig_settings_errors); signal_add("settings errors", (SIGNAL_FUNC) sig_settings_errors);
} }