Remove the cruft of the user to have to define the different font styles. - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 9cae1eb0ded2e1ca604753893e2307531ef73afc
 (DIR) parent ed5b8700a6e6c14b814dcc2e54a90eb1868070b5
 (HTM) 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:
         M st.c                                |      60 ++++++++++++++++++++++++++++---
       
       1 file changed, 55 insertions(+), 5 deletions(-)
       ---
 (DIR) 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;