コード例 #1
0
ファイル: fe-settings.c プロジェクト: svn2github/irssi
/* 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);
}
コード例 #2
0
ファイル: completion.c プロジェクト: svn2github/irssi
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;
}
コード例 #3
0
ファイル: fe-settings.c プロジェクト: ahf/irssi
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);
}