value = value_int;
break;
case SETTING_TYPE_STRING:
+ case SETTING_TYPE_TIME:
+ case SETTING_TYPE_LEVEL:
+ case SETTING_TYPE_SIZE:
value = settings_get_str(rec->key);
break;
default:
value = "";
}
- printtext(NULL, NULL, MSGLEVEL_CLIENTCRAP, "%s = %s", rec->key, value);
+ printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_SET_ITEM,
+ rec->key, value);
}
static void set_boolean(const char *key, const char *value)
printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_NOT_TOGGLE);
}
-/* SYNTAX: SET [-clear] [<key> [<value>]] */
+/* SYNTAX: SET [-clear | -default] [<key> [<value>]] */
static void cmd_set(char *data)
{
GHashTable *optlist;
const char *last_section;
char *key, *value;
void *free_arg;
- int found, clear;
+ int found, clear, set_default;
if (!cmd_get_params(data, &free_arg, 2 | PARAM_FLAG_GETREST | PARAM_FLAG_OPTIONS,
"set", &optlist, &key, &value))
return;
clear = g_hash_table_lookup(optlist, "clear") != NULL;
+ set_default = g_hash_table_lookup(optlist, "default") != NULL;
+
+ if (*key == '\0')
+ clear = set_default = FALSE;
last_section = ""; found = 0;
sets = settings_get_sorted();
for (tmp = sets; tmp != NULL; tmp = tmp->next) {
SETTINGS_REC *rec = tmp->data;
- if (((clear || *value != '\0') && g_strcasecmp(rec->key, key) != 0) ||
+ if (((clear || set_default || *value != '\0') && g_strcasecmp(rec->key, key) != 0) ||
(*value == '\0' && *key != '\0' && stristr(rec->key, key) == NULL))
continue;
if (strcmp(last_section, rec->section) != 0) {
/* print section */
- printtext(NULL, NULL, MSGLEVEL_CLIENTCRAP, "%_[ %s ]", rec->section);
+ printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP,
+ TXT_SET_TITLE, rec->section);
last_section = rec->section;
}
- if (clear || *value != '\0') {
+ if (clear || set_default || *value != '\0') {
/* change the setting */
switch (rec->type) {
case SETTING_TYPE_BOOLEAN:
if (clear)
settings_set_bool(key, FALSE);
- else
+ else if (set_default)
+ settings_set_bool(key, rec->default_value.v_bool);
+ else
set_boolean(key, value);
break;
case SETTING_TYPE_INT:
- settings_set_int(key, clear ? 0 : atoi(value));
+ settings_set_int(key, clear ? 0 :
+ set_default ? rec->default_value.v_int :
+ atoi(value));
break;
case SETTING_TYPE_STRING:
- settings_set_str(key, clear ? "" : value);
+ settings_set_str(key, clear ? "" :
+ set_default ? rec->default_value.v_string :
+ value);
+ break;
+ case SETTING_TYPE_TIME:
+ if (!settings_set_time(key, clear ? "0" :
+ set_default ? rec->default_value.v_string : value))
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ TXT_INVALID_TIME);
+ break;
+ case SETTING_TYPE_LEVEL:
+ if (!settings_set_level(key, clear ? "" :
+ set_default ? rec->default_value.v_string : value))
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ TXT_INVALID_LEVEL);
+ break;
+ case SETTING_TYPE_SIZE:
+ if (!settings_set_size(key, clear ? "0" :
+ set_default ? rec->default_value.v_string : value))
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ TXT_INVALID_SIZE);
break;
}
signal_emit("setup changed", 0);
}
g_slist_free(sets);
- if (!found)
- printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Unknown setting %s", key);
+ if (!found) {
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ TXT_SET_UNKNOWN, key);
+ }
cmd_params_free(free_arg);
}
type = settings_get_type(key);
if (type == -1)
- printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Unknown setting %_%s", key);
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_SET_UNKNOWN, key);
else if (type != SETTING_TYPE_BOOLEAN)
- printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Setting %_%s%_ isn't boolean, use /SET", key);
+ printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_SET_NOT_BOOLEAN, key);
else {
set_boolean(key, *value != '\0' ? value : "TOGGLE");
set_print(settings_get_record(key));
+ signal_emit("setup changed", 0);
}
cmd_params_free(free_arg);
printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_ALIASLIST_HEADER);
node = iconfig_node_traverse("aliases", FALSE);
- tmp = node == NULL ? NULL : node->value;
+ tmp = node == NULL ? NULL : config_node_first(node->value);
/* first get the list of aliases sorted */
list = NULL;
aliaslen = strlen(alias);
- for (; tmp != NULL; tmp = tmp->next) {
+ for (; tmp != NULL; tmp = config_node_next(tmp)) {
CONFIG_NODE *node = tmp->data;
if (node->type != NODE_TYPE_KEY)
else {
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_ALIAS_REMOVED, alias);
iconfig_set_str("aliases", alias, NULL);
+
+ signal_emit("alias removed", 1, alias);
}
}
else {
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_ALIAS_ADDED, alias);
iconfig_set_str("aliases", alias, value);
+ signal_emit("alias added", 2, alias, value);
}
cmd_params_free(free_arg);
}
/* SYNTAX: UNALIAS <alias> */
static void cmd_unalias(const char *data)
{
+ char *alias;
+ void *free_arg;
+
g_return_if_fail(data != NULL);
- if (*data == '\0') cmd_return_error(CMDERR_NOT_ENOUGH_PARAMS);
- alias_remove(data);
+ if (!cmd_get_params(data, &free_arg, 1, &alias))
+ return;
+ if (*alias == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
+
+ alias_remove(alias);
+ cmd_params_free(free_arg);
}
/* SYNTAX: RELOAD [<file>] */
static void cmd_reload(const char *data)
{
- char *fname;
+ const char *fname;
+
+ fname = *data == '\0' ? get_irssi_config() : data;
- fname = *data != '\0' ? g_strdup(data) :
- g_strdup_printf("%s/.irssi/config", g_get_home_dir());
if (settings_reread(fname)) {
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
TXT_CONFIG_RELOADED, fname);
}
- g_free(fname);
}
static void settings_save_fe(const char *fname)
{
- if (settings_save(fname)) {
+ if (settings_save(fname, FALSE /* not autosaved */)) {
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
TXT_CONFIG_SAVED, fname);
}
static void settings_save_confirm(const char *line, char *fname)
{
- if (line[0] == 'Y')
+ if (i_toupper(line[0]) == 'Y')
settings_save_fe(fname);
g_free(fname);
}
/* SYNTAX: SAVE [<file>] */
static void cmd_save(const char *data)
{
- char *format;
-
- if (*data == '\0')
- data = mainconfig->fname;
+ GHashTable *optlist;
+ char *format, *fname;
+ void *free_arg;
- if (!irssi_config_is_changed(data)) {
- settings_save_fe(data);
+ if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS,
+ "save", &optlist, &fname))
return;
- }
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
- TXT_CONFIG_MODIFIED, data);
+ if (*fname == '\0')
+ fname = mainconfig->fname;
+
+ if (!irssi_config_is_changed(fname))
+ settings_save_fe(fname);
+ else {
+ /* config file modified outside irssi */
+ printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
+ TXT_CONFIG_MODIFIED, fname);
+
+ format = format_get_text(MODULE_NAME, NULL, NULL, NULL,
+ TXT_OVERWRITE_CONFIG);
+ keyboard_entry_redirect((SIGNAL_FUNC) settings_save_confirm,
+ format, 0, g_strdup(fname));
+ g_free(format);
+ }
- format = format_get_text(MODULE_NAME, NULL, NULL, NULL,
- TXT_OVERWRITE_CONFIG);
- keyboard_entry_redirect((SIGNAL_FUNC) settings_save_confirm,
- format, 0, g_strdup(data));
- g_free(format);
+ cmd_params_free(free_arg);
}
static void settings_clean_confirm(const char *line)
{
- if (line[0] == 'Y')
+ if (i_toupper(line[0]) == 'Y')
settings_clean_invalid();
}
command_bind("unalias", NULL, (SIGNAL_FUNC) cmd_unalias);
command_bind("reload", NULL, (SIGNAL_FUNC) cmd_reload);
command_bind("save", NULL, (SIGNAL_FUNC) cmd_save);
- command_set_options("set", "clear");
+ command_set_options("set", "clear default");
signal_add("settings errors", (SIGNAL_FUNC) sig_settings_errors);
}