Mercurial > hg
changeset 1760:106bbf7e97da
Sort and pretty-format options list
author | Myhailo Danylenko <isbear@ukrpost.net> |
---|---|
date | Sat, 13 Mar 2010 16:19:46 +0200 |
parents | 921429804e20 |
children | 61f0482d3993 |
files | mcabber/mcabber/commands.c |
diffstat | 1 files changed, 28 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/mcabber/commands.c Sat Mar 13 18:05:07 2010 +0100 +++ b/mcabber/mcabber/commands.c Sat Mar 13 16:19:46 2010 +0200 @@ -2084,10 +2084,10 @@ update_roster = TRUE; } -static void print_option_cb(char *k, char *v, void *f) +static void list_option_cb(char *k, char *v, void *f) { - char *format = (char *)f; - scr_LogPrint (LPRINT_NORMAL, format, k, v); + GSList **list = f; + *list = g_slist_insert_sorted(*list, k, (GCompareFunc)strcmp); } static void do_set(char *arg) @@ -2098,9 +2098,31 @@ if (!*arg) { // list all set options - settings_foreach(SETTINGS_TYPE_OPTION, print_option_cb, "%s = [%s]"); - scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); - update_roster = TRUE; + GSList *list = NULL; + // Get sorted list of keys + settings_foreach(SETTINGS_TYPE_OPTION, list_option_cb, &list); + if (list) { + gsize max = 0; + GSList *lel; + gchar *format; + // Find out maximum key length + for (lel = list; lel; lel = lel->next) { + const gchar *key = lel->data; + gsize len = strlen(key); + if (len > max) + max = len; + } + // Print out list of options + format = g_strdup_printf("%%-%us = [%%s]", max); + for (lel = list; lel; lel = lel->next) { + const gchar *key = lel->data; + scr_LogPrint(LPRINT_NORMAL, format, key, settings_opt_get(key)); + } + g_free(format); + scr_setmsgflag_if_needed(SPECIAL_BUFFER_STATUS_ID, TRUE); + update_roster = TRUE; + } else + scr_LogPrint(LPRINT_NORMAL, "No options found."); return; }