JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
ensure that the italic font has the same weight as the normal font
[st.git] / st.c
diff --git a/st.c b/st.c
index 0ae2c90..7befdc0 100644 (file)
--- a/st.c
+++ b/st.c
@@ -61,6 +61,7 @@
 #define DRAW_BUF_SIZ  20*1024
 #define XK_ANY_MOD    UINT_MAX
 #define XK_NO_MOD     0
+#define XK_SWITCH_MOD (1<<13)
 
 #define REDRAW_TIMEOUT (80*1000) /* 80 ms */
 
@@ -1661,7 +1662,7 @@ csihandle(void) {
                tmoveto(0, term.c.y-csiescseq.arg[0]);
                break;
        case 'g': /* TBC -- Tabulation clear */
-               switch (csiescseq.arg[0]) {
+               switch(csiescseq.arg[0]) {
                case 0: /* clear current tab stop */
                        term.tabs[term.c.x] = 0;
                        break;
@@ -1926,7 +1927,7 @@ techo(char *buf, int len) {
                if(c == '\033') {               /* escape */
                        tputc("^", 1);
                        tputc("[", 1);
-               } else if (c < '\x20') {        /* control code */
+               } else if(c < '\x20') { /* control code */
                        if(c != '\n' && c != '\r' && c != '\t') {
                                c |= '\x40';
                                tputc("^", 1);
@@ -1936,7 +1937,7 @@ techo(char *buf, int len) {
                        break;
                }
        }
-       if (len)
+       if(len)
                tputc(buf, len);
 }
 
@@ -1946,7 +1947,7 @@ tputc(char *c, int len) {
        bool control = ascii < '\x20' || ascii == 0177;
 
        if(iofd != -1) {
-               if (xwrite(iofd, c, len) < 0) {
+               if(xwrite(iofd, c, len) < 0) {
                        fprintf(stderr, "Error writing in %s:%s\n",
                                opt_io, strerror(errno));
                        close(iofd);
@@ -2287,7 +2288,7 @@ xresize(int col, int row) {
 void
 xloadcols(void) {
        int i, r, g, b;
-       XRenderColor color = { .alpha = 0 };
+       XRenderColor color = { .alpha = 0xffff };
 
        /* load colors [0-15] colors and [256-LEN(colorname)[ (config.h) */
        for(i = 0; i < LEN(colorname); i++) {
@@ -2443,20 +2444,18 @@ xloadfonts(char *fontstr, int fontsize) {
        xw.ch = dc.font.height;
 
        FcPatternDel(pattern, FC_SLANT);
-       FcPatternDel(pattern, FC_WEIGHT);
-       FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN);
-       FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD);
-       if(xloadfont(&dc.bfont, pattern))
+       FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
+       if(xloadfont(&dc.ifont, pattern))
                die("st: can't open font %s\n", fontstr);
 
-       FcPatternDel(pattern, FC_SLANT);
-       FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
+       FcPatternDel(pattern, FC_WEIGHT);
+       FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD);
        if(xloadfont(&dc.ibfont, pattern))
                die("st: can't open font %s\n", fontstr);
 
-       FcPatternDel(pattern, FC_WEIGHT);
-       FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_MEDIUM);
-       if(xloadfont(&dc.ifont, pattern))
+       FcPatternDel(pattern, FC_SLANT);
+       FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN);
+       if(xloadfont(&dc.bfont, pattern))
                die("st: can't open font %s\n", fontstr);
 
        FcPatternDestroy(pattern);
@@ -2470,8 +2469,8 @@ xunloadfonts(void) {
         * Free the loaded fonts in the font cache. This is done backwards
         * from the frccur.
         */
-       for (i = 0, ip = frccur; i < frclen; i++, ip--) {
-               if (ip < 0)
+       for(i = 0, ip = frccur; i < frclen; i++, ip--) {
+               if(ip < 0)
                        ip = LEN(frc) - 1;
                XftFontClose(xw.dpy, frc[ip].font);
        }
@@ -2514,7 +2513,7 @@ xinit(void) {
        xw.vis = XDefaultVisual(xw.dpy, xw.scr);
 
        /* font */
-       if (!FcInit())
+       if(!FcInit())
                die("Could not init fontconfig.\n");
 
        usedfont = (opt_font == NULL)? font : opt_font;
@@ -2717,7 +2716,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
        XftDrawRect(xw.draw, bg, winx, winy, width, xw.ch);
 
        fcsets[0] = font->set;
-       for (xp = winx; bytelen > 0;) {
+       for(xp = winx; bytelen > 0;) {
                /*
                 * Search for the range in the to be printed string of glyphs
                 * that are in the main font. Then print that range. If
@@ -2727,22 +2726,22 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
                u8fs = s;
                u8fblen = 0;
                u8fl = 0;
-               for (;;) {
+               for(;;) {
                        u8c = s;
                        u8cblen = utf8decode(s, &u8char);
                        s += u8cblen;
                        bytelen -= u8cblen;
 
                        doesexist = XftCharIndex(xw.dpy, font->match, u8char);
-                       if (!doesexist || bytelen <= 0) {
-                               if (bytelen <= 0) {
-                                       if (doesexist) {
+                       if(!doesexist || bytelen <= 0) {
+                               if(bytelen <= 0) {
+                                       if(doesexist) {
                                                u8fl++;
                                                u8fblen += u8cblen;
                                        }
                                }
 
-                               if (u8fl > 0) {
+                               if(u8fl > 0) {
                                        XftDrawStringUtf8(xw.draw, fg,
                                                        font->match, xp,
                                                        winy + font->ascent,
@@ -2756,23 +2755,23 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
                        u8fl++;
                        u8fblen += u8cblen;
                }
-               if (doesexist)
+               if(doesexist)
                        break;
 
                frp = frccur;
                /* Search the font cache. */
-               for (i = 0; i < frclen; i++, frp--) {
-                       if (frp <= 0)
+               for(i = 0; i < frclen; i++, frp--) {
+                       if(frp <= 0)
                                frp = LEN(frc) - 1;
 
-                       if (frc[frp].c == u8char
+                       if(frc[frp].c == u8char
                                        && frc[frp].flags == frcflags) {
                                break;
                        }
                }
 
                /* Nothing was found. */
-               if (i >= frclen) {
+               if(i >= frclen) {
                        /*
                         * Nothing was found in the cache. Now use
                         * some dozen of Fontconfig calls to get the
@@ -2800,9 +2799,9 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
                         */
                        frccur++;
                        frclen++;
-                       if (frccur >= LEN(frc))
+                       if(frccur >= LEN(frc))
                                frccur = 0;
-                       if (frclen > LEN(frc)) {
+                       if(frclen > LEN(frc)) {
                                frclen = LEN(frc);
                                XftFontClose(xw.dpy, frc[frccur].font);
                        }
@@ -3008,6 +3007,8 @@ focus(XEvent *ev) {
 
 inline bool
 match(uint mask, uint state) {
+       state &= ~(ignoremod);
+
        if(mask == XK_NO_MOD && state)
                return false;
        if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state)
@@ -3082,7 +3083,7 @@ kpress(XEvent *ev) {
        Status status;
        Shortcut *bp;
 
-       if (IS_SET(MODE_KBDLOCK))
+       if(IS_SET(MODE_KBDLOCK))
                return;
 
        len = XmbLookupString(xw.xic, e, xstr, sizeof(xstr), &ksym, &status);
@@ -3104,7 +3105,7 @@ kpress(XEvent *ev) {
                if(len == 0)
                        return;
 
-               if (len == 1 && e->state & Mod1Mask)
+               if(len == 1 && e->state & Mod1Mask)
                        *cp++ = '\033';
 
                memcpy(cp, xstr, len);