Phuah Yee Keat wrote:
I'll clean it up a bit and send it in a little while..

How about this:
-addstring "/usr/local/e17/applications"
-removestring "/usr/local/share/applications"

Hehe, this was more like what's on my mind, since the advantage of having a list is the ability to have --addstring/--additem --removestring/--removeitem.

yes, I know that's what was on your mind, it's just not quite as easy to do as a --append :)

I'm thinking of something a bit more generic than a list of strings..

something along the lines of;
-k /foo/bar --array -s "test 1"
-k /foo/bar -y -s "test 2"
-k /foo/bar -y -s "test 3"
-k /foo/bar -y -d "test 2"

where the first set operation on an array would define its type.

Anyway, list items really looks useful in ecore_config. :)

yes, like I mentioned in an earlier mail, I've been thinking about how to best implement lists.. not quite reached a conclusion yet, though..

the --append patch still is useful, and gets you partially what you need, as a start :)

# ./ecore_config -c /etc/entrance_config.cfg -k /entrance/greeting/before -g
string  "Welcome to "
# ./ecore_config -c /etc/entrance_config.cfg -k /entrance/greeting/before -p testing # ./ecore_config -c /etc/entrance_config.cfg -k /entrance/greeting/before -g
string  "Welcome to testing"

attached is a patch against current cvs to add --append/-p

Cheers,
--
Morten
:wq
Index: ecore_config.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/bin/ecore_config.c,v
retrieving revision 1.7
diff -u -r1.7 ecore_config.c
--- ecore_config.c      18 Dec 2005 19:07:52 -0000      1.7
+++ ecore_config.c      19 Dec 2005 04:05:01 -0000
@@ -152,10 +152,36 @@
    fprintf(stderr, "  -r, --rgb=VALUE    set RGBA\n");
    fprintf(stderr, "  -s, --string=VALUE set string\n");
    fprintf(stderr, "  -t, --theme=VALUE  set theme\n\n");
+   fprintf(stderr, "  -p, --append=VALUE append string\n");
    exit(ret);
 }
 
 int
+append(const char *key, const char *str)
+{
+   char *buf;
+   char *old;
+   int len;
+
+   old = ecore_config_string_get(key);
+   if(old == NULL)
+     return 1;
+
+   len = strlen(str) + strlen(old) + 1;
+   buf = malloc(len);
+   snprintf(buf, len, "%s%s", old, str);
+
+   len = 0;
+   if(ecore_config_string_set(key, buf) != ECORE_CONFIG_ERR_SUCC)
+     len = 2;
+
+   free(buf);
+   free(old);
+
+   return len;
+}
+
+int
 main(int argc, char * const argv[])
 {
    const char *prog, *file, *key;
@@ -188,10 +214,11 @@
           {"string", 1, 0, 's'},
           {"theme",  1, 0, 't'},
           {"key",    1, 0, 'k'},
+          {"append", 1, 0, 'p'},
           {0, 0, 0, 0}
        };
 
-       ret = getopt_long(argc, argv, "c:agdb:f:i:nr:s:t:k:", long_options, 
NULL);
+       ret = getopt_long(argc, argv, "c:agdb:f:i:nr:s:t:k:p:", long_options, 
NULL);
        if(ret == -1)
           break;
 
@@ -231,6 +258,11 @@
                type = ECORE_CONFIG_THM;
                value = strdup(optarg);
                break;
+            case 'p':
+               cmd = 'p';
+               type = ECORE_CONFIG_STR;
+               value = strdup(optarg);
+               break;
             case 'c':
                file = strdup(optarg);
                break;
@@ -272,6 +304,15 @@
                ecore_config_file_save(file);
             }
           break;
+       case 'p':
+          if (append(key, value))
+            {
+               fprintf(stderr, "Append failed for %s", key);
+               ret = 1;
+            } else {
+               ecore_config_file_save(file);
+            }
+          break;
        case 'd':
           if(del(key))
             {

Reply via email to