iDo not use color when font attributes are supported - st - Simple Terminal Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1Log /scm/st//log.gph gopher.r-36.net 70 1Files /scm/st//files.gph gopher.r-36.net 70 1Refs /scm/st//refs.gph gopher.r-36.net 70 1README /scm/st//file/README.gph gopher.r-36.net 70 1LICENSE /scm/st//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit 8c99915608beee03eca3bae6ed92264a0da87e2f /scm/st//commit/8c99915608beee03eca3bae6ed92264a0da87e2f.gph gopher.r-36.net 70 1parent 7854fde1ff95ba85239ccfe1b59b555bd245d0db /scm/st//commit/7854fde1ff95ba85239ccfe1b59b555bd245d0db.gph gopher.r-36.net 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space gopher.r-36.net 70 iDate: Sat, 22 Oct 2016 16:36:10 +0200 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDo not use color when font attributes are supported Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iIf fontconfig gives us a font without the attributes we asked for, Err gopher.r-36.net 70 idisplay an alternative color instead. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i config.def.h | 8 +++----- Err gopher.r-36.net 70 i st.c | 40 +++++++++++++++++++++++++------- Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i2 files changed, 35 insertions(+), 13 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/config.def.h b/config.def.h /scm/st//file/config.def.h.gph gopher.r-36.net 70 i@@ -138,12 +138,10 @@ static unsigned int mousefg = 7; Err gopher.r-36.net 70 i static unsigned int mousebg = 0; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i /* Err gopher.r-36.net 70 i- * Colors used, when the specific fg == defaultfg. So in reverse mode this Err gopher.r-36.net 70 i- * will reverse too. Another logic would only make the simple feature too Err gopher.r-36.net 70 i- * complex. Err gopher.r-36.net 70 i+ * Color used to display font attributes when fontconfig selected a font which Err gopher.r-36.net 70 i+ * doesn't match the ones requested. Err gopher.r-36.net 70 i */ Err gopher.r-36.net 70 i-static unsigned int defaultitalic = 11; Err gopher.r-36.net 70 i-static unsigned int defaultunderline = 7; Err gopher.r-36.net 70 i+static unsigned int defaultattr = 11; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i /* Err gopher.r-36.net 70 i * Internal mouse shortcuts. Err gopher.r-36.net 70 1diff --git a/st.c b/st.c /scm/st//file/st.c.gph gopher.r-36.net 70 i@@ -354,6 +354,8 @@ typedef struct { Err gopher.r-36.net 70 i int width; Err gopher.r-36.net 70 i int ascent; Err gopher.r-36.net 70 i int descent; Err gopher.r-36.net 70 i+ int badslant; Err gopher.r-36.net 70 i+ int badweight; Err gopher.r-36.net 70 i short lbearing; Err gopher.r-36.net 70 i short rbearing; Err gopher.r-36.net 70 i XftFont *match; Err gopher.r-36.net 70 i@@ -3373,6 +3375,7 @@ xloadfont(Font *f, FcPattern *pattern) Err gopher.r-36.net 70 i FcPattern *match; Err gopher.r-36.net 70 i FcResult result; Err gopher.r-36.net 70 i XGlyphInfo extents; Err gopher.r-36.net 70 i+ int wantattr, haveattr; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i match = XftFontMatch(xw.dpy, xw.scr, pattern, &result); Err gopher.r-36.net 70 i if (!match) Err gopher.r-36.net 70 i@@ -3383,6 +3386,28 @@ xloadfont(Font *f, FcPattern *pattern) Err gopher.r-36.net 70 i return 1; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+ if ((XftPatternGetInteger(pattern, "slant", 0, &wantattr) == Err gopher.r-36.net 70 i+ XftResultMatch)) { Err gopher.r-36.net 70 i+ /* Err gopher.r-36.net 70 i+ * Check if xft was unable to find a font with the appropriate Err gopher.r-36.net 70 i+ * slant but gave us one anyway. Try to mitigate. Err gopher.r-36.net 70 i+ */ Err gopher.r-36.net 70 i+ if ((XftPatternGetInteger(f->match->pattern, "slant", 0, Err gopher.r-36.net 70 i+ &haveattr) != XftResultMatch) || haveattr < wantattr) { Err gopher.r-36.net 70 i+ f->badslant = 1; Err gopher.r-36.net 70 i+ fputs("st: font slant does not match\n", stderr); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+ if ((XftPatternGetInteger(pattern, "weight", 0, &wantattr) == Err gopher.r-36.net 70 i+ XftResultMatch)) { Err gopher.r-36.net 70 i+ if ((XftPatternGetInteger(f->match->pattern, "weight", 0, Err gopher.r-36.net 70 i+ &haveattr) != XftResultMatch) || haveattr != wantattr) { Err gopher.r-36.net 70 i+ f->badweight = 1; Err gopher.r-36.net 70 i+ fputs("st: font weight does not match\n", stderr); Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ } Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i XftTextExtentsUtf8(xw.dpy, f->match, Err gopher.r-36.net 70 i (const FcChar8 *) ascii_printable, Err gopher.r-36.net 70 i strlen(ascii_printable), &extents); Err gopher.r-36.net 70 i@@ -3780,14 +3805,13 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i Err gopher.r-36.net 70 i XRenderColor colfg, colbg; Err gopher.r-36.net 70 i XRectangle r; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i- /* Determine foreground and background colors based on mode. */ Err gopher.r-36.net 70 i- if (base.fg == defaultfg) { Err gopher.r-36.net 70 i- if (base.mode & ATTR_ITALIC) Err gopher.r-36.net 70 i- base.fg = defaultitalic; Err gopher.r-36.net 70 i- else if ((base.mode & ATTR_ITALIC) && (base.mode & ATTR_BOLD)) Err gopher.r-36.net 70 i- base.fg = defaultitalic; Err gopher.r-36.net 70 i- else if (base.mode & ATTR_UNDERLINE) Err gopher.r-36.net 70 i- base.fg = defaultunderline; Err gopher.r-36.net 70 i+ /* Fallback on color display for attributes not supported by the font */ Err gopher.r-36.net 70 i+ if (base.mode & ATTR_ITALIC && base.mode & ATTR_BOLD) { Err gopher.r-36.net 70 i+ if (dc.ibfont.badslant || dc.ibfont.badweight) Err gopher.r-36.net 70 i+ base.fg = defaultattr; Err gopher.r-36.net 70 i+ } else if ((base.mode & ATTR_ITALIC && dc.ifont.badslant) || Err gopher.r-36.net 70 i+ (base.mode & ATTR_BOLD && dc.bfont.badweight)) { Err gopher.r-36.net 70 i+ base.fg = defaultattr; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i if (IS_TRUECOL(base.fg)) { Err gopher.r-36.net 70 .