mirror of git://git.code.sf.net/p/zsh/code
49646: allow colors in WATCHFMT with %F/%K
This commit is contained in:
parent
7791a6876c
commit
91b7baf259
|
@ -1,5 +1,8 @@
|
|||
2021-12-13 Oliver Kiddle <opk@zsh.org>
|
||||
|
||||
* 49646: Doc/Zsh/mod_watch.yo, Src/Modules/watch.c, Src/prompt.c:
|
||||
allow colors in WATCHFMT with %F/%K
|
||||
|
||||
* 49645: Completion/Unix/Type/_path_commands: when completing for
|
||||
the path_dirs option, add a / suffix and follow symlinks
|
||||
|
||||
|
|
|
@ -65,6 +65,12 @@ The `tt(%m)' and `tt(%M)' escapes will work only if there is a host name
|
|||
field in the utmp on your machine. Otherwise they are
|
||||
treated as ordinary strings.
|
||||
)
|
||||
item(tt(%F{)var(color)tt(}) LPAR()tt(%f)RPAR())(
|
||||
Start (stop) using a different foreground color.
|
||||
)
|
||||
item(tt(%K{)var(color)tt(}) LPAR()tt(%k)RPAR())(
|
||||
Start (stop) using a different background color.
|
||||
)
|
||||
item(tt(%S) LPAR()tt(%s)RPAR())(
|
||||
Start (stop) standout mode.
|
||||
)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue