On Tue, Sep 13, 2005 at 08:16:29AM +0200, Viktor Griph wrote: > I've written a patch to allow nesting of variables as > in $[desk.name$[desk.n]].
I wonder if we actually want to do that. I mean, what happens if the value of a variable happend to contain "$w" or something? > Index: ChangeLog > =================================================================== > RCS file: /home/cvs/fvwm/fvwm/ChangeLog,v > retrieving revision 1.2621 > diff -u -r1.2621 ChangeLog > --- ChangeLog 26 Aug 2005 02:11:58 -0000 1.2621 > +++ ChangeLog 13 Sep 2005 06:00:41 -0000 > @@ -1,3 +1,10 @@ > +2005-09-13 Viktor Griph <[EMAIL PROTECTED]> > + > + * NEWS: > + * AUTHORS: > + * fvwm/expand.c (expand_vars_extended, expand_vars): > + allow nesting of variables > + > 2005-08-26 Mikhael Goikhman <[EMAIL PROTECTED]> > > * NEWS: > Index: AUTHORS > =================================================================== > RCS file: /home/cvs/fvwm/fvwm/AUTHORS,v > retrieving revision 1.105 > diff -u -r1.105 AUTHORS > --- AUTHORS 23 Aug 2005 23:14:02 -0000 1.105 > +++ AUTHORS 13 Sep 2005 06:00:41 -0000 > @@ -8,6 +8,7 @@ > Viktor Griph: > Patch for Perl modules on 64 bit machines. > EdgeHasPointer and EdgeIsActive test conditions. > +Nested variable expansion > > Bjoern Steinbrink: > Patch for FvwmScript tasks running too often. > Index: NEWS > =================================================================== > RCS file: /home/cvs/fvwm/fvwm/NEWS,v > retrieving revision 1.573 > diff -u -r1.573 NEWS > --- NEWS 26 Aug 2005 02:11:58 -0000 1.573 > +++ NEWS 13 Sep 2005 06:00:42 -0000 > @@ -5,6 +5,10 @@ > > Changes in beta release 2.5.15 (not released yet) > > +* New features: > + > + - Variables can be nested as $[desk.name$[desk.n]] > + > * Bug Fixes: > > - Supported a new fribidi version 0.10.5 in addition to 0.10.4. > Index: fvwm/expand.c > =================================================================== > RCS file: /home/cvs/fvwm/fvwm/fvwm/expand.c,v > retrieving revision 1.17 > diff -u -r1.17 expand.c > --- fvwm/expand.c 3 Jun 2004 12:43:24 -0000 1.17 > +++ fvwm/expand.c 13 Sep 2005 06:00:42 -0000 > @@ -196,7 +196,7 @@ > /* ---------------------------- local functions ---------------------------- > */ > > static signed int expand_vars_extended( > - char *var_name, char *output, cond_rc_t *cond_rc, > + char *var_name, char *output,char *arguments[], cond_rc_t *cond_rc, > const exec_context_t *exc) > { > char *s; > @@ -217,6 +217,8 @@ > Window context_w = Scr.Root; > FvwmWindow *fw = exc->w.fw; > > + /* handle nested variables */ > + var_name=expand_vars(var_name,arguments,False,False,cond_rc,exc); > /* allow partial matches for *.cs, gt, ... etc. variables */ > switch ((i = GetTokenIndex(var_name, partial_function_vars, -1, &rest))) > { > @@ -723,7 +725,7 @@ > cond_rc_t *cond_rc, const exec_context_t *exc) > { > int l, i, l2, n, k, j, m; > - int xlen; > + int xlen, xlevel; > char *out; > char *var; > const char *string = NULL; > @@ -755,9 +757,22 @@ > /* extended variables */ > var = &input[i+2]; > m = i + 2; > - while (m < l && input[m] != ']' && input[m]) > + xlevel = 1; > + while (m < l && xlevel && input[m]) > { > - m++; > + /* handle nested variables */ > + if (input[m] == ']') > + { > + xlevel--; > + } > + else if (input[m] == '[') > + { > + xlevel++; > + } > + if (xlevel) > + { > + m++; > + } > } > if (input[m] == ']') > { > @@ -767,7 +782,8 @@ > if (!addto) > { > xlen = expand_vars_extended( > - var, NULL, cond_rc, > + var, NULL, arguments, > + cond_rc, > exc); > if (xlen >= 0) > { > @@ -890,9 +906,22 @@ > } > var = &input[i+2]; > m = i + 2; > - while (m < l && input[m] != ']' && input[m]) > + xlevel = 1; > + while (m < l && xlevel && input[m]) > { > - m++; > + /* handle nested variables */ > + if (input[m] == ']') > + { > + xlevel--; > + } > + else if (input[m] == '[') > + { > + xlevel++; > + } > + if (xlevel) > + { > + m++; > + } > } > if (input[m] == ']') > { > @@ -900,7 +929,8 @@ > /* handle variable name */ > k = strlen(var); > xlen = expand_vars_extended( > - var, &out[j], cond_rc, exc); > + var, &out[j], arguments, > + cond_rc, exc); > input[m] = ']'; > if (xlen >= 0) > { Ciao Dominik ^_^ ^_^ -- Dominik Vogt, [EMAIL PROTECTED]
signature.asc
Description: Digital signature