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:
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;
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);
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>] */
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);
}