JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
fix default color overwriten bug.
authorAurélien Aptel <aurelien.aptel@gmail.com>
Wed, 15 Feb 2012 23:10:32 +0000 (00:10 +0100)
committerAurélien Aptel <aurelien.aptel@gmail.com>
Wed, 15 Feb 2012 23:10:32 +0000 (00:10 +0100)
config.def.h
st.c

index 169bcdd..047b5d1 100644 (file)
@@ -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 (file)
--- 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;