# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 7e7760c2ed1a6fc9d500da51bd8dc499fb36e1b0
    parent adde5c6d9dec3a0ab4d78b9d6e70b970ffb33a05
    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:
    Mconfig.def.h | 8++++++++
    Mst.c | 32+++++++++++++++++++-------------

    2 files changed, 27 insertions(+), 13 deletions(-)
    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

    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++;