Changeset 4046 for neercs


Ignore:
Timestamp:
Nov 26, 2009, 2:32:27 PM (10 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • mini-command now recognizes commands like window_manager="full" or borders=0 or eyecandy=False
Location:
neercs/trunk/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/configuration.c

    r4039 r4046  
    5757    {.name = "borders",.set = set_border,.get = get_border},
    5858    {.name = "cube_duration",.set = set_cube_duration,.get =
    59      get_window_manager},
    60     {.name = "thumbnails",.set = set_thumbnails,.get = get_window_manager},
    61     {.name = "status_bar",.set = set_status_bar,.get = get_window_manager},
     59     get_cube_duration},
     60    {.name = "thumbnails",.set = set_thumbnails,.get = get_thumbnails},
     61    {.name = "status_bar",.set = set_status_bar,.get = get_status_bar},
    6262    {.name = "screensaver_timeout",.set = set_screensaver_timeout,.get =
    63      get_window_manager},
     63     get_screensaver_timeout},
    6464    {.name = "autolock_timeout",.set = set_autolock_timeout,.get =
    65      get_window_manager},
     65     get_autolock_timeout},
    6666    {.name = "lock_on_detach",.set = set_lock_on_detach,.get =
    67      get_window_manager},
    68     {.name = "socket_dir",.set = set_socket_dir,.get = get_window_manager},
     67     get_lock_on_detach},
     68    {.name = "socket_dir",.set = set_socket_dir,.get = get_socket_dir},
    6969    {.name = "delay",.set = set_delay,.get = get_delay},
    7070
     
    136136}
    137137
     138struct config_line *get_config_option(void)
     139{
     140        return config_option;   
     141}
    138142
    139143int parse_conf_line(char *buf, int size, struct screen_list *screen_list)
     
    371375
    372376#define IS_OPTION(t) (!strncmp(argv, t, strlen(argv)))
    373 #define IS_OPTION_TRUE (IS_OPTION("true") || IS_OPTION("1"))
     377#define IS_OPTION_TRUE (IS_OPTION("true") || IS_OPTION("True") || IS_OPTION("1"))
    374378
    375379int set_window_manager(const char *argv, struct screen_list *screen_list)
     
    507511{
    508512    if (screen_list->mini)
    509         return "yes";
    510     return "no";
     513        return "true";
     514    return "false";
    511515}
    512516
     
    514518{
    515519    if (screen_list->status)
    516         return "yes";
    517     return "no";
     520        return "true";
     521    return "false";
    518522}
    519523
     
    521525{
    522526    if (screen_list->eyecandy)
    523         return "yes";
    524     return "no";
     527        return "true";
     528    return "false";
    525529}
    526530
     
    528532{
    529533    if (screen_list->border_size)
    530         return "yes";
    531     return "no";
     534        return "true";
     535    return "false";
    532536}
    533537
     
    549553{
    550554    if (screen_list->lock_on_detach)
    551         return "yes";
    552     else
    553         return "no";
     555        return "true";
     556    else
     557        return "false";
    554558}
    555559
  • neercs/trunk/src/neercs.h

    r4038 r4046  
    364364int fill_config(struct screen_list *screen_list);
    365365struct config_line *get_config(const char *name);
     366struct config_line *get_config_option(void);
    366367
    367368/* Python interpreter */
  • neercs/trunk/src/python/interpreter.c

    r4040 r4046  
    4141static void del_char(struct screen_list *sl);
    4242static int python_execute(struct screen_list *sl);
    43 static char *getStringFromPyObject(PyObject * p);
     43 char *getStringFromPyObject(PyObject * p);
    4444static char *getPythonError(void);
    4545
     
    230230        goto end;
    231231    }
    232 
    233 
     232   
    234233    pModule = PyImport_Import(pName);
    235234    Py_DECREF(pName);
     235
    236236    if (pModule != NULL)
    237237    {
    238                 PyObject *o = PyRun_String(sl->interpreter_props.command, Py_eval_input, PyModule_GetDict(pModule), NULL);
    239         debug("py object is %p\n", o);
     238        PyObject * dictionary = PyModule_GetDict(pModule);
     239       
     240        getExportedValues(dictionary);
     241       
     242                PyObject *o = PyRun_String(sl->interpreter_props.command, Py_single_input, dictionary, NULL);
    240243        if(!o)
    241244        {
     
    245248        else
    246249        {
    247             debug("py res : %s\n", getStringFromPyObject(o));
     250            setExportedValues(dictionary);
     251           
    248252            sl->interpreter_props.output_res = getStringFromPyObject(o);
    249253            err = 1;
     
    293297}
    294298
    295 static char *getStringFromPyObject(PyObject * p)
     299 char *getStringFromPyObject(PyObject * p)
    296300{
    297301    PyObject *str = PyObject_Repr(p);
  • neercs/trunk/src/python/py_module.c

    r4040 r4046  
    4141
    4242PyObject *PyInit_neercs(void);
     43void removeTrailingStuff(char *b);
     44
     45
     46static void addVariableFromConfig(PyObject * dictionary,
     47                                  const char *varname, const char *configname)
     48{
     49    char *v = get_config(configname)->get(screen_list);
     50    if (v != NULL)
     51    {
     52        PyObject *value = Py_BuildValue("s", v);
     53        PyDict_SetItemString(dictionary, varname, value);
     54    }
     55
     56    debug("py get '%s' to '%s'\n", varname,
     57          get_config(configname)->get(screen_list));
     58
     59}
     60
     61void removeTrailingStuff(char *b)
     62{
     63        if(!b) return;
     64    if(b[0]=='\'')
     65    {
     66        memmove(b, &b[1], strlen(b)-1);   
     67        b[strlen(b)-2] = 0;
     68    }
     69}
     70
     71void setExportedValues(PyObject * dictionary)
     72{
     73    struct config_line *config_option = get_config_option();
     74    int i = 0;
     75
     76    while (strncmp(config_option[i].name, "last", strlen("last")))
     77    {
     78        /* Get variable */
     79        PyObject *res =
     80            PyDict_GetItemString(dictionary, config_option[i].name);
     81
     82        /* Got it */
     83        if (res)
     84        {
     85
     86            /* Get object representation
     87             * FIXME : find a way to check object's type */
     88            PyObject *str = PyObject_Repr(res);
     89           
     90            /* Make sure it's a string */
     91            char *err =
     92                PyBytes_AS_STRING(PyUnicode_AsEncodedString
     93                                  (str, "utf-8", "Error ~"));
     94                        /* FIXME leak leak leak */
     95            char *s = strdup(err);
     96
     97            if (s != NULL)
     98            {
     99                /* Representation can include '' around strings */
     100                removeTrailingStuff(s);
     101                get_config(config_option[i].name)->set(s, screen_list);
     102            }
     103        }
     104        i++;
     105    }
     106}
     107
     108void getExportedValues(PyObject * dictionary)
     109{
     110    struct config_line *config_option = get_config_option();
     111    int i = 0;
     112    while (strncmp(config_option[i].name, "last", strlen("last")))
     113    {
     114        addVariableFromConfig(dictionary, config_option[i].name,
     115                              config_option[i].name);
     116        i++;
     117    }
     118}
     119
    43120
    44121static PyObject *neercs_get(PyObject * self, PyObject * args)
     
    50127    if (!PyArg_ParseTuple(args, "s", &s))
    51128    {
     129        PyErr_SetString(PyExc_ValueError, "Can't parse argument");
    52130        debug("py Can't parse");
    53131        return NULL;
     
    55133    debug("py Argument : '%s'", s);
    56134    struct config_line *c = get_config(s);
    57     debug("py config %p");
    58135
    59136    if (c)
    60137        return Py_BuildValue("s", c->get(screen_list));
    61     else
    62         return Py_BuildValue("s", "Invalid");
    63138
     139
     140    PyErr_SetString(PyExc_ValueError,
     141                    "Can't get value for specified variable");
     142    return NULL;
    64143}
    65144
    66145static PyObject *neercs_version(PyObject * self, PyObject * args)
    67146{
    68     if (!PyArg_ParseTuple(args, ":version"))
    69         return NULL;
    70147    return Py_BuildValue("s", PACKAGE_VERSION);
    71148}
    72149
    73150static PyMethodDef NeercsMethods[] = {
    74     {"version", neercs_version, METH_VARARGS, "Return the neercs version."},
     151    {"version", neercs_version, METH_NOARGS, "Return the neercs version."},
    75152    {"get", neercs_get, METH_VARARGS,
    76153     "Return the specified variable's value."},
     
    93170{
    94171    screen_list = sl;
    95         PyInit_neercs();
     172    PyInit_neercs();
    96173}
    97174
  • neercs/trunk/src/python/py_module.h

    r4040 r4046  
    2121
    2222void initNeercsModule(struct screen_list *sl);
    23 
     23void getExportedValues(PyObject * dictionary);
     24void setExportedValues(PyObject * dictionary);
    2425
    2526
Note: See TracChangeset for help on using the changeset viewer.