tRemove the cruft of the user to have to define the different font styles. - st… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 9cae1eb0ded2e1ca604753893e2307531ef73afc | |
parent ed5b8700a6e6c14b814dcc2e54a90eb1868070b5 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sun, 30 Sep 2012 20:10:58 +0200 | |
Remove the cruft of the user to have to define the different font styles. | |
Diffstat: | |
M st.c | 60 ++++++++++++++++++++++++++++-… | |
1 file changed, 55 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -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, | |
t@@ -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; | |
t@@ -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 | |
t@@ -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; |