/* 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 GList *completion_get_settings(const char *key) { GList *complist; GSList *tmp, *sets; int len; g_return_val_if_fail(key != NULL, NULL); sets = settings_get_sorted(); len = strlen(key); complist = NULL; for (tmp = sets; tmp != NULL; tmp = tmp->next) { SETTINGS_REC *rec = tmp->data; if (g_strncasecmp(rec->key, key, len) == 0) complist = g_list_insert_sorted(complist, g_strdup(rec->key), (GCompareFunc) g_istr_cmp); } g_slist_free(sets); return complist; }
static void set_print_pattern(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->key, pattern) == NULL) continue; 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); }