# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    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:
    Mst.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;