/* SYNTAX: SET [-clear] [<key> [<value>] */ static void cmd_set(char *data) { GHashTable *optlist; GSList *sets, *tmp; const char *last_section; char *key, *value; void *free_arg; int found, clear; 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; 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) || (*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); last_section = rec->section; } if (clear || *value != '\0') { /* change the setting */ switch (rec->type) { case SETTING_TYPE_BOOLEAN: set_boolean(key, clear ? FALSE : value); break; case SETTING_TYPE_INT: settings_set_int(key, clear ? 0 : atoi(value)); break; case SETTING_TYPE_STRING: settings_set_str(key, clear ? "" : value); break; } signal_emit("setup changed", 0); } set_print(rec); found = TRUE; if (clear || *value != '\0') break; } g_slist_free(sets); if (!found) printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "Unknown setting %s", key); cmd_params_free(free_arg); }
static void set_int(const char *key, const char *value) { char *endp; long longval; int error; errno = 0; longval = strtol(value, &endp, 10); error = errno; while (i_isspace(*endp)) endp++; if (error != 0 || *endp != '\0' || longval < INT_MIN || longval > INT_MAX) printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_INVALID_NUMBER); else settings_set_int(key, (int)longval); }
//------------------------------------------------------------------------------ void settings_set(settings_t* s, const char* name, const char* value) { const setting_decl_t* decl = settings_get_decl_by_name(s, name); if (decl != NULL) { if (decl_is_string_type(decl)) { set_value(s, decl, value); } else { int i; i = atoi(value); settings_set_int(s, name, i); } } }
/* SYNTAX: SET [-clear | -default] [<key> [<value>]] */ static void cmd_set(char *data) { GHashTable *optlist; char *key, *value; void *free_arg; int clear, set_default; SETTINGS_REC *rec; 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; if (!(clear || set_default || *value != '\0')) set_print_pattern(key); else { rec = settings_get_record(key); if (rec != NULL) { /* change the setting */ switch (rec->type) { case SETTING_TYPE_BOOLEAN: if (clear) settings_set_bool(key, FALSE); else if (set_default) settings_set_bool(key, rec->default_value.v_bool); else set_boolean(key, value); break; case SETTING_TYPE_INT: if (clear) settings_set_int(key, 0); else if (set_default) settings_set_int(key, rec->default_value.v_int); else set_int(key, value); break; case SETTING_TYPE_CHOICE: if (clear || set_default) settings_set_choice(key, rec->choices[rec->default_value.v_int]); else set_choice(key, value); break; case SETTING_TYPE_STRING: 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; case SETTING_TYPE_ANY: /* Unpossible! */ break; } signal_emit("setup changed", 0); printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, TXT_SET_TITLE, rec->section); set_print(rec); } else printformat(NULL, NULL, MSGLEVEL_CLIENTERROR, TXT_SET_UNKNOWN, key); } cmd_params_free(free_arg); }
void state_changed() { hotkey_t hk; REFRESH_KEY_SETTING(trigger); settings_set(TRIGGER_KEY, &hk); REFRESH_KEY_SETTING(english); settings_set(ENG_KEY, &hk); varchar colorstr; REFRESH_COLOR_SETTING(background_color_btn); settings_set(PREEDIT_COLOR, colorstr); REFRESH_COLOR_SETTING(font_color_btn); settings_set(PREEDIT_FONT_COLOR, colorstr); /* font and size information */ settings_set(PREEDIT_FONT, (void*) gtk_font_button_get_font_name(font_btn)); /* font color information */ settings_set_double(PREEDIT_OPACITY, gtk_adjustment_get_value(opacity_value)); settings_set_int(CANDIDATES_SIZE, gtk_adjustment_get_value(ncandidates)); /* page up and down trigger */ settings_set_int(PAGE_MINUS_PLUS, gtk_toggle_button_get_active(minus_plus_check)); settings_set_int(PAGE_COMMA_PERIOD, gtk_toggle_button_get_active(comma_period_check)); settings_set_int(PAGE_PAREN, gtk_toggle_button_get_active(paren_check)); /* fuzzy segmentation */ settings_set_int(FUZZY_SEGMENTATION, gtk_toggle_button_get_active(fuzzy_seg_check)); settings_set_int(FUZZY_INNER_SEGMENTATION, gtk_toggle_button_get_active(fuzzy_inner_seg_check)); /* cancel on backspace */ settings_set_int(CANCEL_ON_BACKSPACE, gtk_toggle_button_get_active(cancel_on_backspace_check)); /* smart punctuation */ settings_set_int(SMART_PUNCT, gtk_toggle_button_get_active(smart_punct_check)); settings_set_int(SHUANGPIN, gtk_toggle_button_get_active(shuangpin_check)); int sche_idx = gtk_combo_box_get_active(shuangpin_combo); if (sche_idx < UI_SHUANGPIN_SCHEMES_NUM) settings_set_string(SHUANGPIN_SCHEME, ui_shuangpin_schemes[sche_idx]); /* skins */ settings_set_string(SKIN_NAME, gtk_combo_box_get_active_text(skin_combo)); /* whether hide icbar */ settings_set_int(HIDE_ICBAR, gtk_toggle_button_get_active(hide_icbar_check)); /* init status */ settings_set_int(INIT_PUNC_TYPE, gtk_toggle_button_get_active(punc_english_radio)); settings_set_int(INIT_WIDTH, gtk_toggle_button_get_active(half_width_radio)); settings_set_int(INIT_LANGUAGE, gtk_toggle_button_get_active(lang_english_radio)); settings_save(); send_reload(); }