# HG changeset patch # User Myhailo Danylenko # Date 1268489986 -7200 # Node ID 106bbf7e97dafca041458e68d9ee4e01515d9fcb # Parent 921429804e2009e7ba3a955274481f00fbe0963d Sort and pretty-format options list diff -r 921429804e20 -r 106bbf7e97da mcabber/mcabber/commands.c --- 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; }