summaryrefslogtreecommitdiff
path: root/bin/dconf.vala
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2011-05-05 14:00:30 +0200
committerRyan Lortie <desrt@desrt.ca>2011-05-05 14:05:19 +0200
commita7de856e9754ad539cfb37c622513e48e6b67d54 (patch)
tree9a9b67206a57e984f35c32d1a5a8bb9cfddd6299 /bin/dconf.vala
parenta4448a243ff83caf6acd5ca376f8ce40245cc576 (diff)
downloaddconf-a7de856e9754ad539cfb37c622513e48e6b67d54.tar.gz
dconf cli: commandline completion
Diffstat (limited to 'bin/dconf.vala')
-rw-r--r--bin/dconf.vala46
1 files changed, 38 insertions, 8 deletions
diff --git a/bin/dconf.vala b/bin/dconf.vala
index 47adf0b..630ff9c 100644
--- a/bin/dconf.vala
+++ b/bin/dconf.vala
@@ -198,6 +198,35 @@ void dconf_watch (string?[] args) throws Error {
new MainLoop (null, false).run ();
}
+void dconf_complete (string[] args) throws Error {
+ var path = args[2];
+
+ if (path == "") {
+ print ("/\n");
+ return;
+ }
+
+ if (path[0] == '/') {
+ var client = new DConf.Client ();
+ var last = 0;
+
+ for (var i = 1; path[i] != '\0'; i++) {
+ if (path[i] == '/') {
+ last = i;
+ }
+ }
+
+ var dir = path.substring (0, last + 1);
+ foreach (var item in client.list (dir)) {
+ var full_item = dir + item;
+
+ if (full_item.has_prefix (path)) {
+ print ("%s\n", full_item);
+ }
+ }
+ }
+}
+
delegate void Command (string[] args) throws Error;
struct CommandMapping {
@@ -215,14 +244,15 @@ int main (string[] args) {
Environment.set_prgname (args[0]);
var map = new CommandMapping[] {
- CommandMapping ("help", dconf_help),
- CommandMapping ("read", dconf_read),
- CommandMapping ("list", dconf_list),
- CommandMapping ("write", dconf_write),
- CommandMapping ("update", dconf_update),
- CommandMapping ("lock", dconf_lock),
- CommandMapping ("unlock", dconf_unlock),
- CommandMapping ("watch", dconf_watch)
+ CommandMapping ("help", dconf_help),
+ CommandMapping ("read", dconf_read),
+ CommandMapping ("list", dconf_list),
+ CommandMapping ("write", dconf_write),
+ CommandMapping ("update", dconf_update),
+ CommandMapping ("lock", dconf_lock),
+ CommandMapping ("unlock", dconf_unlock),
+ CommandMapping ("watch", dconf_watch),
+ CommandMapping ("_complete", dconf_complete)
};
try {