From 1ec0515e75320c42da4a224441642f82571e38b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Aptel?= Date: Thu, 16 Feb 2012 00:10:32 +0100 Subject: [PATCH] fix default color overwriten bug. --- config.def.h | 8 +++++--- st.c | 41 +++++++++++++++++++++++------------------ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/config.def.h b/config.def.h index 169bcdd..047b5d1 100644 --- 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. diff --git a/st.c b/st.c index a86e0f9..e6a5e4e 100644 --- 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;