fix default color overwriten bug. - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 751fb765e4f26ce1500b4e8ee9f4cd5b6039b495
 (DIR) parent be2877cd042eaf5d0f7dda102f526357aa577232
 (HTM) Author: Aurélien Aptel <aurelien.aptel@gmail.com>
       Date:   Thu, 16 Feb 2012 00:10:32 +0100
       
       fix default color overwriten bug.
       
       Diffstat:
         M config.def.h                        |       8 +++++---
         M st.c                                |      41 +++++++++++++++++--------------
       
       2 files changed, 28 insertions(+), 21 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       @@ -30,7 +30,9 @@ static const char *colorname[] = {
                "cyan",
                "white",
                
       -        /* more colors can be added to use with DefaultXX */
       +        [255] = 0,
       +        
       +        /* more colors can be added after 255 to use with DefaultXX */
                "#cccccc",
                "#333333",
        };
       @@ -39,8 +41,8 @@ static const char *colorname[] = {
           foreground, background, cursor, unfocused cursor */
        #define DefaultFG  7
        #define DefaultBG  0
       -#define DefaultCS  16
       -#define DefaultUCS 17
       +#define DefaultCS  256
       +#define DefaultUCS 257
        
        /* Special keys (change & recompile st.info accordingly)
           Keep in mind that kpress() in st.c hardcodes some keys.
 (DIR) diff --git a/st.c b/st.c
       @@ -83,13 +83,14 @@ enum { B0=1, B1=2, B2=4, B3=8, B4=16, B5=32, B6=64, B7=128 };
        typedef unsigned char uchar;
        typedef unsigned int uint;
        typedef unsigned long ulong;
       +typedef unsigned short ushort;
        
        typedef struct {
                char c[UTF_SIZ];     /* character code */
                uchar mode;  /* attribute flags */
       -        uchar fg;     /* foreground      */
       -        uchar bg;     /* background      */
       -        uchar state; /* state flags     */
       +        ushort fg;   /* foreground  */
       +        ushort bg;   /* background  */
       +        uchar state; /* state flags    */
        } Glyph;
        
        typedef Glyph* Line;
       @@ -154,18 +155,6 @@ typedef struct {
                char s[ESC_BUF_SIZ];
        } Key;
        
       -/* Drawing Context */
       -typedef struct {
       -        ulong col[256];
       -        GC gc;
       -        struct {
       -                int ascent;
       -                int descent;
       -                short lbearing;
       -                short rbearing;
       -                XFontSet set;
       -        } font, bfont;
       -} DC;
        
        /* TODO: use better name for vars... */
        typedef struct {
       @@ -181,6 +170,19 @@ typedef struct {
        
        #include "config.h"
        
       +/* Drawing Context */
       +typedef struct {
       +        ulong col[LEN(colorname) < 256 ? 256 : LEN(colorname)];
       +        GC gc;
       +        struct {
       +                int ascent;
       +                int descent;
       +                short lbearing;
       +                short rbearing;
       +                XFontSet set;
       +        } font, bfont;
       +} DC;
       +
        static void die(const char*, ...);
        static void draw(void);
        static void drawregion(int, int, int, int);
       @@ -1583,16 +1585,19 @@ xloadcols(void) {
                XColor color;
                ulong white = WhitePixel(xw.dpy, xw.scr);
        
       +        /* load colors [0-15] colors and [256-LEN(colorname)[ (config.h) */
                for(i = 0; i < LEN(colorname); i++) {
       +                if(!colorname[i])
       +                        continue;
                        if(!XAllocNamedColor(xw.dpy, xw.cmap, colorname[i], &color, &color)) {
                                dc.col[i] = white;
                                fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]);
                        } else
                                dc.col[i] = color.pixel;
                }
       -
       -        /* same colors as xterm */
       -        for(r = 0; r < 6; r++)
       +        
       +        /* load colors [16-255] ; same colors as xterm */
       +        for(i = 16, r = 0; r < 6; r++)
                        for(g = 0; g < 6; g++)
                                for(b = 0; b < 6; b++) {
                                        color.red = r == 0 ? 0 : 0x3737 + 0x2828 * r;