Add the possibility to have default highlight colors.
authorChristoph Lohmann <20h@r-36.net>
Fri, 29 Mar 2013 18:01:24 +0000 (19:01 +0100)
committerChristoph Lohmann <20h@r-36.net>
Fri, 29 Mar 2013 18:01:24 +0000 (19:01 +0100)
Thanks to stargrave@stargrave.org for the suggestion!

config.def.h
st.c

index 75abefb..693bdbd 100644 (file)
@@ -62,6 +62,14 @@ static unsigned int defaultbg = 0;
 static unsigned int defaultcs = 256;
 static unsigned int defaultucs = 257;
 
+/*
+ * Colors used, when the specific fg == defaultfg. So in reverse mode this
+ * will reverse too. Another logic would only make the simple feature too
+ * complex.
+ */
+static unsigned int defaultitalic = 11;
+static unsigned int defaultunderline = 7;
+
 /* Internal shortcuts. */
 #define MODKEY Mod1Mask
 
diff --git a/st.c b/st.c
index 599685c..8b1fc56 100644 (file)
--- a/st.c
+++ b/st.c
@@ -2711,12 +2711,28 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
        FcPattern *fcpattern, *fontpattern;
        FcFontSet *fcsets[] = { NULL };
        FcCharSet *fccharset;
-       Colour *fg = &dc.col[base.fg], *bg = &dc.col[base.bg],
-                *temp, revfg, revbg;
+       Colour *fg, *bg, *temp, revfg, revbg;
        XRenderColor colfg, colbg;
 
        frcflags = FRC_NORMAL;
 
+       if(base.mode & ATTR_ITALIC) {
+               if(base.fg == defaultfg)
+                       base.fg = defaultitalic;
+               font = &dc.ifont;
+               frcflags = FRC_ITALIC;
+       } else if((base.mode & ATTR_ITALIC) && (base.mode & ATTR_BOLD)) {
+               if(base.fg == defaultfg)
+                       base.fg = defaultitalic;
+               font = &dc.ibfont;
+               frcflags = FRC_ITALICBOLD;
+       } else if(base.mode & ATTR_UNDERLINE) {
+               if(base.fg == defaultfg)
+                       base.fg = defaultunderline;
+       }
+       fg = &dc.col[base.fg];
+       bg = &dc.col[base.bg];
+
        if(base.mode & ATTR_BOLD) {
                if(BETWEEN(base.fg, 0, 7)) {
                        /* basic system colors */
@@ -2738,15 +2754,6 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
                frcflags = FRC_BOLD;
        }
 
-       if(base.mode & ATTR_ITALIC) {
-               font = &dc.ifont;
-               frcflags = FRC_ITALIC;
-       }
-       if((base.mode & ATTR_ITALIC) && (base.mode & ATTR_BOLD)) {
-               font = &dc.ibfont;
-               frcflags = FRC_ITALICBOLD;
-       }
-
        if(IS_SET(MODE_REVERSE)) {
                if(fg == &dc.col[defaultfg]) {
                        fg = &dc.col[defaultbg];
@@ -2873,8 +2880,7 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
                                        FcTrue, fcpattern, &fcres);
 
                        /*
-                        * Overwrite or create the new cache entry
-                        * entry.
+                        * Overwrite or create the new cache entry.
                         */
                        frccur++;
                        frclen++;