~petersanchez/st

7e7760c2ed1a6fc9d500da51bd8dc499fb36e1b0 — Christoph Lohmann 11 years ago adde5c6
Add the possibility to have default highlight colors.

Thanks to stargrave@stargrave.org for the suggestion!
2 files changed, 27 insertions(+), 13 deletions(-)

M config.def.h
M st.c
M config.def.h => config.def.h +8 -0
@@ 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


M st.c => st.c +19 -13
@@ 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++;