diff --git a/README.md b/README.md index df31dab..0f34553 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ To draw a backslash just backslash escape it (\\\\). ``` f<0-9> Selects the text foreground color from the palette. b<0-9> Selects the text background color from the palette. +u<0-9> Selects the underline color from the palette. To reset the bg/fg color just pass 'r' as color index. l Aligns the text to the left. diff --git a/bar.c b/bar.c index d3c07c2..51bc7e5 100644 --- a/bar.c +++ b/bar.c @@ -13,12 +13,12 @@ // Here be dragons static xcb_connection_t *c; -static int font_height, font_width, font_descent; static xcb_window_t root, win; static xcb_gcontext_t gc; +static xcb_drawable_t canvas; +static int font_height, font_width, font_descent; static int bar_width; static const uint32_t pal[] = {COLOR0,COLOR1,COLOR2,COLOR3,COLOR4,COLOR5,COLOR6,COLOR7,COLOR8,COLOR9}; -static xcb_drawable_t canvas; #define MIN(a,b) ((a > b ? b : a)) @@ -38,7 +38,7 @@ wcslen_ (wchar_t *s) { } int -draw_string (int x, int align, int fgcol, int bgcol, wchar_t *text) +draw_string (int x, int align, int fgcol, int bgcol, int udcol, wchar_t *text) { int done = 0; int pos_x = x; @@ -61,6 +61,8 @@ draw_string (int x, int align, int fgcol, int bgcol, wchar_t *text) } /* Draw the background first */ fill_rect (bgcol, pos_x, 0, strw, BAR_HEIGHT); + /* Draw the underline */ + if (BAR_UNDERLINE_HEIGHT) fill_rect (udcol, pos_x, BAR_HEIGHT-BAR_UNDERLINE_HEIGHT, strw, BAR_UNDERLINE_HEIGHT); /* Setup the colors */ xcb_change_gc (c, gc, XCB_GC_FOREGROUND, (const uint32_t []){ pal[fgcol] }); xcb_change_gc (c, gc, XCB_GC_BACKGROUND, (const uint32_t []){ pal[bgcol] }); @@ -87,16 +89,18 @@ parse (char *text) int fgcol = 1; int bgcol = 0; + int udcol = 0; fill_rect (0, 0, 0, bar_width, BAR_HEIGHT); for (;;) { - if (*p == 0x0 || *p == 0xA || (*p == '\\' && p++ && *p != '\\' && strchr ("fblcr", *p))) { - pos_x += draw_string (pos_x, align, fgcol, bgcol, parsed_text); + if (*p == 0x0 || *p == 0xA || (*p == '\\' && p++ && *p != '\\' && strchr ("fbulcr", *p))) { + pos_x += draw_string (pos_x, align, fgcol, bgcol, udcol, parsed_text); switch (*p++) { case 0x0: return; /* EOL */ case 0xA: return; /* NL */ case 'f': if (*p == 'r') *p = '1'; if (isdigit (*p)) { fgcol = *p-'0'; } p++; break; case 'b': if (*p == 'r') *p = '0'; if (isdigit (*p)) { bgcol = *p-'0'; } p++; break; + case 'u': if (*p == 'r') *p = '0'; if (isdigit (*p)) { udcol = *p-'0'; } p++; break; case 'l': align = 0; pos_x = 0; break; case 'c': align = 1; pos_x = 0; break; case 'r': align = 2; pos_x = 0; break; diff --git a/config.def.h b/config.def.h index f0e8ff4..b29f090 100644 --- a/config.def.h +++ b/config.def.h @@ -1,13 +1,15 @@ #define BAR_HEIGHT 18 +#define BAR_UNDERLINE_HEIGHT 2 #define BAR_FONT "-*-terminus-medium-r-normal-*-12-*-*-*-c-*-*-1" -#define COLOR0 0x262729 /* background */ -#define COLOR1 0xebebeb /* foreground */ -#define COLOR2 0x262729 -#define COLOR3 0xf92671 -#define COLOR4 0xa6e22e -#define COLOR5 0xfd971f -#define COLOR6 0x34bdef -#define COLOR7 0x9e6ffe -#define COLOR8 0x5e7175 -#define COLOR9 0xccccc6 +#define COLOR0 0x1A1A1A /* background */ +#define COLOR1 0xA9A9A9 /* foreground */ +#define COLOR2 0x303030 +#define COLOR3 0xF92672 +#define COLOR4 0xA6E22E +#define COLOR5 0xFD971F +#define COLOR6 0x66D9EF +#define COLOR7 0x9E6FFE +#define COLOR8 0xAF875F +#define COLOR9 0xCCCCC6 +