summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2021-12-13 21:06:57 +0100
committerOliver Kiddle <opk@zsh.org>2021-12-13 21:06:57 +0100
commit91b7baf25929a20ee776100f406021a422d56e98 (patch)
treeb2c1c0e7348937cf969f67560382d0f50c6f0589 /Src
parent7791a6876c64ee678da0bd9af954af692146f4fd (diff)
downloadzsh-91b7baf25929a20ee776100f406021a422d56e98.tar.gz
zsh-91b7baf25929a20ee776100f406021a422d56e98.zip
49646: allow colors in WATCHFMT with %F/%K
Diffstat (limited to 'Src')
-rw-r--r--Src/Modules/watch.c35
-rw-r--r--Src/prompt.c9
2 files changed, 40 insertions, 4 deletions
diff --git a/Src/Modules/watch.c b/Src/Modules/watch.c
index 95d591a67..d45c3cf3d 100644
--- a/Src/Modules/watch.c
+++ b/Src/Modules/watch.c
@@ -246,6 +246,7 @@ watchlog2(int inout, WATCH_STRUCT_UTMP *u, char *fmt, int prnt, int fini)
struct tm *tm;
char *fm2;
int len;
+ zattr atr;
# ifdef WATCH_UTMP_UT_HOST
char *p;
int i;
@@ -347,6 +348,40 @@ watchlog2(int inout, WATCH_STRUCT_UTMP *u, char *fmt, int prnt, int fini)
case '%':
putchar('%');
break;
+ case 'F':
+ if (*fmt == '{') {
+ fmt++;
+ atr = match_colour((const char**)&fmt, 1, 0);
+ if (*fmt == '}')
+ fmt++;
+ if (!(atr & (TXT_ERROR | TXTNOFGCOLOUR))) {
+ txtunset(TXT_ATTR_FG_COL_MASK);
+ txtset(atr & TXT_ATTR_FG_ON_MASK);
+ set_colour_attribute(atr, COL_SEQ_FG, TSC_RAW);
+ }
+ }
+ break;
+ case 'f':
+ txtunset(TXT_ATTR_FG_ON_MASK);
+ set_colour_attribute(TXTNOFGCOLOUR, COL_SEQ_FG, TSC_RAW);
+ break;
+ case 'K':
+ if (*fmt == '{') {
+ fmt++;
+ atr = match_colour((const char**)&fmt, 0, 0);
+ if (*fmt == '}')
+ fmt++;
+ if (!(atr & (TXT_ERROR | TXTNOBGCOLOUR))) {
+ txtunset(TXT_ATTR_BG_COL_MASK);
+ txtset(atr & TXT_ATTR_BG_ON_MASK);
+ set_colour_attribute(atr, COL_SEQ_BG, TSC_RAW);
+ }
+ }
+ break;
+ case 'k':
+ txtunset(TXT_ATTR_BG_ON_MASK);
+ set_colour_attribute(TXTNOBGCOLOUR, COL_SEQ_BG, TSC_RAW);
+ break;
case 'S':
txtset(TXTSTANDOUT);
tsetcap(TCSTANDOUTBEG, TSC_RAW);
diff --git a/Src/prompt.c b/Src/prompt.c
index 6943eabc3..d6b378539 100644
--- a/Src/prompt.c
+++ b/Src/prompt.c
@@ -1045,9 +1045,9 @@ tsetcap(int cap, int flags)
if (txtisset(TXTUNDERLINE))
tsetcap(TCUNDERLINEBEG, flags);
if (txtisset(TXTFGCOLOUR))
- set_colour_attribute(txtattrmask, COL_SEQ_FG, TSC_PROMPT);
+ set_colour_attribute(txtattrmask, COL_SEQ_FG, flags);
if (txtisset(TXTBGCOLOUR))
- set_colour_attribute(txtattrmask, COL_SEQ_BG, TSC_PROMPT);
+ set_colour_attribute(txtattrmask, COL_SEQ_BG, flags);
}
}
}
@@ -2062,7 +2062,8 @@ set_colour_attribute(zattr atr, int fg_bg, int flags)
*bv->bp++ = Outpar;
}
} else {
- tputs(tgoto(tcstr[tc], colour, colour), 1, putshout);
+ tputs(tgoto(tcstr[tc], colour, colour), 1,
+ (flags & TSC_RAW) ? putraw : putshout);
}
/* That worked. */
return;
@@ -2121,7 +2122,7 @@ set_colour_attribute(zattr atr, int fg_bg, int flags)
*bv->bp++ = Outpar;
}
} else
- tputs(colseq_buf, 1, putshout);
+ tputs(colseq_buf, 1, (flags & TSC_RAW) ? putraw : putshout);
if (do_free)
free_colour_buffer();