Add the possibility to have default highlight colors. - 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 7e7760c2ed1a6fc9d500da51bd8dc499fb36e1b0
 (DIR) parent adde5c6d9dec3a0ab4d78b9d6e70b970ffb33a05
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Fri, 29 Mar 2013 19:01:24 +0100
       
       Add the possibility to have default highlight colors.
       
       Thanks to stargrave@stargrave.org for the suggestion!
       
       Diffstat:
         M config.def.h                        |       8 ++++++++
         M st.c                                |      32 ++++++++++++++++++-------------
       
       2 files changed, 27 insertions(+), 13 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       @@ -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
        
 (DIR) diff --git 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++;