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;
   }