Good catch. Applied your diff and for completeness also changed
style_parse not to alter it's arguments on failure. Thanks


On Tue, Feb 17, 2015 at 12:01:34AM -0600, J Raynor wrote:
> Right now, if you try to set a style with a bad value, tmux will
> return an error, but it'll set the style to default.  This happens
> even if the style isn't currently set.
> 
> For example:
> 
> localhost> tmux show -w
> localhost> tmux set pane-border-style bg=BadValue
> bad style: bg=BadValue
> localhost> tmux show -w
> pane-border-style default
> 
> 
> localhost> tmux set pane-border-style bg=red
> localhost> tmux show -w
> pane-border-style bg=red
> localhost> tmux set pane-border-style bg=AnotherBadValue
> bad style: bg=AnotherBadValue
> localhost> tmux show -w
> pane-border-style default
> 
> 
> I've attached a patch that changes this behavior.  If you pass a bad
> value, then you still get the error message, but the option isn't set
> or changed.

> diff --git a/options.c b/options.c
> index 67f8abd..aa82d4a 100644
> --- a/options.c
> +++ b/options.c
> @@ -167,20 +167,28 @@ options_set_style(struct options *oo, const char *name, 
> const char *value,
>      int append)
>  {
>       struct options_entry    *o;
> +     struct grid_cell         tmpgc;
>  
> -     if ((o = options_find1(oo, name)) == NULL) {
> +     o = options_find1(oo, name);
> +
> +     if (o == NULL || !append)
> +             memcpy(&tmpgc, &grid_default_cell, sizeof tmpgc);
> +     else
> +             memcpy(&tmpgc, &o->style, sizeof tmpgc);
> +
> +
> +     if (style_parse(&grid_default_cell, &tmpgc, value) == -1)
> +             return (NULL);
> +
> +     if (o == NULL) {
>               o = xmalloc(sizeof *o);
>               o->name = xstrdup(name);
>               RB_INSERT(options_tree, &oo->tree, o);
>       } else if (o->type == OPTIONS_STRING)
>               free(o->str);
>  
> -     if (!append)
> -             memcpy(&o->style, &grid_default_cell, sizeof o->style);
> -
>       o->type = OPTIONS_STYLE;
> -     if (style_parse(&grid_default_cell, &o->style, value) == -1)
> -             return (NULL);
> +     memcpy(&o->style, &tmpgc, sizeof tmpgc);
>       return (o);
>  }
>  

> ------------------------------------------------------------------------------
> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
> from Actuate! Instantly Supercharge Your Business Reports and Dashboards
> with Interactivity, Sharing, Native Excel Exports, App Integration & more
> Get technology previously reserved for billion-dollar corporations, FREE
> http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk

> _______________________________________________
> tmux-users mailing list
> tmux-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/tmux-users


------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to