commit 9cae1eb0ded2e1ca604753893e2307531ef73afc
parent ed5b8700a6e6c14b814dcc2e54a90eb1868070b5
Author: Christoph Lohmann <20h@r-36.net>
Date: Sun, 30 Sep 2012 20:10:58 +0200
Remove the cruft of the user to have to define the different font styles.
Diffstat:
st.c | | | 60 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++----- |
1 file changed, 55 insertions(+), 5 deletions(-)
diff --git 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;