X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=st.c;h=710cf344fa61e305f1a23f37ec15d1c164e94fc3;hb=9cae1eb0ded2e1ca604753893e2307531ef73afc;hp=ab8540c26a871e585cfb4a8d05e9c9ed75770f88;hpb=d7b1e31eec9a87c666334006de25a7f8102c55a9;p=st.git diff --git a/st.c b/st.c index ab8540c..710cf34 100644 --- a/st.c +++ b/st.c @@ -336,6 +336,7 @@ static int isfullutf8(char *, int); static void *xmalloc(size_t); static void *xrealloc(void *, size_t); static void *xcalloc(size_t nmemb, size_t size); +static char *smstrcat(char *, ...); static void (*handler[LASTEvent])(XEvent *) = { [KeyPress] = kpress, @@ -393,6 +394,44 @@ xcalloc(size_t nmemb, size_t size) { return p; } +char * +smstrcat(char *src, ...) +{ + va_list fmtargs; + char *ret, *p, *v; + int len, slen, flen; + + len = slen = strlen(src); + + va_start(fmtargs, src); + for(;;) { + v = va_arg(fmtargs, char *); + if(v == NULL) + break; + len += strlen(v); + } + va_end(fmtargs); + + p = ret = xmalloc(len+1); + memmove(p, src, slen); + p += slen; + + va_start(fmtargs, src); + for(;;) { + v = va_arg(fmtargs, char *); + if(v == NULL) + break; + flen = strlen(v); + memmove(p, v, flen); + p += flen; + } + va_end(fmtargs); + + ret[len] = '\0'; + + return ret; +} + int utf8decode(char *s, long *u) { uchar c; @@ -1915,17 +1954,12 @@ xloadcols(void) { int i, r, g, b; XRenderColor xft_color = { .alpha = 0 }; - /* load default white color */ - if(!XftColorAllocName(xw.dpy, xw.vis, xw.cmap, colorname[256], &dc.xft_col[256])) - die("Could not allocate color '%s'\n", colorname[256]); - /* load colors [0-15] colors and [256-LEN(colorname)[ (config.h) */ for(i = 0; i < LEN(colorname); i++) { if(!colorname[i]) continue; if(!XftColorAllocName(xw.dpy, xw.vis, xw.cmap, colorname[i], &dc.xft_col[i])) { - dc.xft_col[i] = dc.xft_col[256]; - fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]); + die("Could not allocate color '%s'\n", colorname[i]); } } @@ -1937,8 +1971,7 @@ xloadcols(void) { xft_color.green = g == 0 ? 0 : 0x3737 + 0x2828 * g; xft_color.blue = b == 0 ? 0 : 0x3737 + 0x2828 * b; if(!XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &xft_color, &dc.xft_col[i])) { - dc.xft_col[i] = dc.xft_col[256]; - fprintf(stderr, "Could not allocate color %d\n", i); + die("Could not allocate color %d\n", i); } i++; } @@ -2023,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) { } void -initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) { +initfonts(char *fontstr) { + char *fstr; + xinitfont(&dc.font, fontstr); - xinitfont(&dc.bfont, bfontstr); - xinitfont(&dc.ifont, ifontstr); - xinitfont(&dc.ibfont, ibfontstr); + + fstr = smstrcat(fontstr, ":weight=bold", NULL); + xinitfont(&dc.bfont, fstr); + free(fstr); + + fstr = smstrcat(fontstr, ":slant=italic,oblique", NULL); + xinitfont(&dc.ifont, fstr); + free(fstr); + + fstr = smstrcat(fontstr, ":weight=bold:slant=italic,oblique", NULL); + xinitfont(&dc.ibfont, fstr); + free(fstr); } void @@ -2043,7 +2087,7 @@ xinit(void) { xw.vis = XDefaultVisual(xw.dpy, xw.scr); /* font */ - initfonts(FONT, BOLDFONT, ITALICFONT, ITALICBOLDFONT); + initfonts(FONT); /* XXX: Assuming same size for bold font */ xw.cw = dc.font.rbearing - dc.font.lbearing;