# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 751fb765e4f26ce1500b4e8ee9f4cd5b6039b495
    parent be2877cd042eaf5d0f7dda102f526357aa577232
    Author: Aurélien Aptel <aurelien.aptel@gmail.com>
    Date:   Thu, 16 Feb 2012 00:10:32 +0100

    fix default color overwriten bug.

    Diffstat:
    Mconfig.def.h | 8+++++---
    Mst.c | 41+++++++++++++++++++++++------------------

    2 files changed, 28 insertions(+), 21 deletions(-)
    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.
    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;