[glib] Allow to list keys in all schemas



commit 766d70729b8671a3ac7b2139b635ac5555d858fa
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Feb 23 00:13:39 2011 -0500

    Allow to list keys in all schemas
    
    Make the schema argument to gsettings list-recursively optional.
    This allows to search for not exactly known keys by going
    
    gsettings list-recursively | grep 'font'

 docs/reference/gio/gsettings.xml |   10 ++++---
 gio/gsettings-tool.c             |   54 ++++++++++++++++++++++++-------------
 2 files changed, 41 insertions(+), 23 deletions(-)
---
diff --git a/docs/reference/gio/gsettings.xml b/docs/reference/gio/gsettings.xml
index 5a3bd21..1d8e381 100644
--- a/docs/reference/gio/gsettings.xml
+++ b/docs/reference/gio/gsettings.xml
@@ -22,7 +22,7 @@
     <command>gsettings</command>
     <arg choice="plain">monitor</arg>
     <arg choice="plain"><replaceable>SCHEMA</replaceable><arg choice="opt">:<replaceable>PATH</replaceable></arg></arg>
-    <arg choice="plain"><replaceable>KEY</replaceable></arg>
+    <arg choice="opt"><replaceable>KEY</replaceable></arg>
   </cmdsynopsis>
   <cmdsynopsis>
     <command>gsettings</command>
@@ -70,7 +70,7 @@
   <cmdsynopsis>
     <command>gsettings</command>
     <arg choice="plain">list-recursively</arg>
-    <arg choice="plain"><replaceable>SCHEMA</replaceable><arg choice="opt">:<replaceable>PATH</replaceable></arg></arg>
+    <arg choice="opt"><replaceable>SCHEMA</replaceable><arg choice="opt">:<replaceable>PATH</replaceable></arg></arg>
   </cmdsynopsis>
   <cmdsynopsis>
     <command>gsettings</command>
@@ -116,7 +116,8 @@ The value is printed out as a serialised
 <term><option>monitor</option></term>
 <listitem><para>
 Monitors <replaceable>KEY</replaceable> for changes and prints the changed
-values. Monitoring will continue until the process is terminated.
+values. If no <replaceable>KEY</replaceable> is specified, all keys in the
+schema are monitored. Monitoring will continue until the process is terminated.
 </para></listitem>
 </varlistentry>
 
@@ -185,7 +186,8 @@ Lists the children of <replaceable>SCHEMA</replaceable>.
 <varlistentry>
 <term><option>list-recursively</option></term>
 <listitem><para>
-Lists keys and values, recursively.
+Lists keys and values, recursively. If no <replaceable>SCHEMA</replaceable>
+is given, list keys in all schemas.
 </para></listitem>
 </varlistentry>
 
diff --git a/gio/gsettings-tool.c b/gio/gsettings-tool.c
index ce624b9..14bd99f 100644
--- a/gio/gsettings-tool.c
+++ b/gio/gsettings-tool.c
@@ -240,29 +240,44 @@ gsettings_list_recursively (GSettings   *settings,
                             const gchar *key,
                             const gchar *value)
 {
-  gchar **children;
-  gint i;
-
-  enumerate (settings);
+  if (settings)
+    {
+      gchar **children;
+      gint i;
 
-  children = g_settings_list_children (settings);
+      enumerate (settings);
+      children = g_settings_list_children (settings);
+      for (i = 0; children[i]; i++)
+        {
+          GSettings *child;
+          gchar *schema;
 
-  for (i = 0; children[i]; i++)
-    {
-      GSettings *child;
-      gchar *schema;
+          child = g_settings_get_child (settings, children[i]);
+          g_object_get (child, "schema", &schema, NULL);
 
-      child = g_settings_get_child (settings, children[i]);
-      g_object_get (child, "schema", &schema, NULL);
+          if (is_schema (schema))
+            enumerate (child);
 
-      if (is_schema (schema))
-        enumerate (child);
+          g_object_unref (child);
+          g_free (schema);
+        }
 
-      g_object_unref (child);
-      g_free (schema);
+      g_strfreev (children);
     }
+  else
+    {
+      const gchar * const *schemas;
+      gint i;
 
-  g_strfreev (children);
+      schemas = g_settings_list_schemas ();
+
+      for (i = 0; schemas[i]; i++)
+        {
+          settings = g_settings_new (schemas[i]);
+          enumerate (settings);
+          g_object_unref (settings);
+        }
+    }
 }
 
 static void
@@ -485,8 +500,9 @@ gsettings_help (gboolean     requested,
 
   else if (strcmp (command, "list-recursively") == 0)
     {
-      description = _("List keys and values, recursively");
-      synopsis = N_("SCHEMA[:PATH]");
+      description = _("List keys and values, recursively\n"
+                      "If no SCHEMA is given, list all keys\n");
+      synopsis = N_("[SCHEMA[:PATH]]");
     }
 
   else if (strcmp (command, "get") == 0)
@@ -640,7 +656,7 @@ main (int argc, char **argv)
   else if (argc == 3 && strcmp (argv[1], "list-children") == 0)
     function = gsettings_list_children;
 
-  else if (argc == 3 && strcmp (argv[1], "list-recursively") == 0)
+  else if ((argc == 2 || argc == 3) && strcmp (argv[1], "list-recursively") == 0)
     function = gsettings_list_recursively;
 
   else if (argc == 4 && strcmp (argv[1], "range") == 0)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]