fix default color overwriten bug.

This commit is contained in:
Aurélien Aptel 2012-02-16 00:10:32 +01:00
parent adf5d2e32a
commit 1ec0515e75
2 changed files with 28 additions and 21 deletions

View File

@ -30,7 +30,9 @@ static const char *colorname[] = {
"cyan", "cyan",
"white", "white",
/* more colors can be added to use with DefaultXX */ [255] = 0,
/* more colors can be added after 255 to use with DefaultXX */
"#cccccc", "#cccccc",
"#333333", "#333333",
}; };
@ -39,8 +41,8 @@ static const char *colorname[] = {
foreground, background, cursor, unfocused cursor */ foreground, background, cursor, unfocused cursor */
#define DefaultFG 7 #define DefaultFG 7
#define DefaultBG 0 #define DefaultBG 0
#define DefaultCS 16 #define DefaultCS 256
#define DefaultUCS 17 #define DefaultUCS 257
/* Special keys (change & recompile st.info accordingly) /* Special keys (change & recompile st.info accordingly)
Keep in mind that kpress() in st.c hardcodes some keys. Keep in mind that kpress() in st.c hardcodes some keys.

41
st.c
View File

@ -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 char uchar;
typedef unsigned int uint; typedef unsigned int uint;
typedef unsigned long ulong; typedef unsigned long ulong;
typedef unsigned short ushort;
typedef struct { typedef struct {
char c[UTF_SIZ]; /* character code */ char c[UTF_SIZ]; /* character code */
uchar mode; /* attribute flags */ uchar mode; /* attribute flags */
uchar fg; /* foreground */ ushort fg; /* foreground */
uchar bg; /* background */ ushort bg; /* background */
uchar state; /* state flags */ uchar state; /* state flags */
} Glyph; } Glyph;
typedef Glyph* Line; typedef Glyph* Line;
@ -154,18 +155,6 @@ typedef struct {
char s[ESC_BUF_SIZ]; char s[ESC_BUF_SIZ];
} Key; } 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... */ /* TODO: use better name for vars... */
typedef struct { typedef struct {
@ -181,6 +170,19 @@ typedef struct {
#include "config.h" #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 die(const char*, ...);
static void draw(void); static void draw(void);
static void drawregion(int, int, int, int); static void drawregion(int, int, int, int);
@ -1583,16 +1585,19 @@ xloadcols(void) {
XColor color; XColor color;
ulong white = WhitePixel(xw.dpy, xw.scr); 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++) { for(i = 0; i < LEN(colorname); i++) {
if(!colorname[i])
continue;
if(!XAllocNamedColor(xw.dpy, xw.cmap, colorname[i], &color, &color)) { if(!XAllocNamedColor(xw.dpy, xw.cmap, colorname[i], &color, &color)) {
dc.col[i] = white; dc.col[i] = white;
fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]); fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]);
} else } else
dc.col[i] = color.pixel; dc.col[i] = color.pixel;
} }
/* same colors as xterm */ /* load colors [16-255] ; same colors as xterm */
for(r = 0; r < 6; r++) for(i = 16, r = 0; r < 6; r++)
for(g = 0; g < 6; g++) for(g = 0; g < 6; g++)
for(b = 0; b < 6; b++) { for(b = 0; b < 6; b++) {
color.red = r == 0 ? 0 : 0x3737 + 0x2828 * r; color.red = r == 0 ? 0 : 0x3737 + 0x2828 * r;