From 9cae1eb0ded2e1ca604753893e2307531ef73afc Mon Sep 17 00:00:00 2001 From: Christoph Lohmann <20h@r-36.net> Date: Sun, 30 Sep 2012 20:10:58 +0200 Subject: [PATCH] Remove the cruft of the user to have to define the different font styles. --- st.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/st.c b/st.c index 5ed3753..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; @@ -2017,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 @@ -2037,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;