summaryrefslogtreecommitdiff
path: root/Src/Zle/zle_tricky.c
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2023-01-10 20:53:17 +0100
committerOliver Kiddle <opk@zsh.org>2023-01-10 20:53:17 +0100
commit667ead3a64e590ac758e9f0a053849c7aaccec66 (patch)
tree2ef4d722cc527d11cf81534b27e6af6f5e95c51b /Src/Zle/zle_tricky.c
parent996b51515600859ce7f952f22c6262ecd24578e1 (diff)
downloadzsh-667ead3a64e590ac758e9f0a053849c7aaccec66.tar.gz
zsh-667ead3a64e590ac758e9f0a053849c7aaccec66.zip
51258, 51272: refactor handling of terminal attributes, removing OFF flags in zattr
Diffstat (limited to 'Src/Zle/zle_tricky.c')
-rw-r--r--Src/Zle/zle_tricky.c48
1 files changed, 20 insertions, 28 deletions
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index fdd168763..f94bfce3c 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -2426,7 +2426,7 @@ mod_export int
printfmt(char *fmt, int n, int dopr, int doesc)
{
char *p = fmt, nc[DIGBUFSIZE];
- int l = 0, cc = 0, b = 0, s = 0, u = 0, m;
+ int l = 0, cc = 0;
MB_METACHARINIT();
for (; *p; ) {
@@ -2437,48 +2437,45 @@ printfmt(char *fmt, int n, int dopr, int doesc)
if (idigit(*++p))
arg = zstrtol(p, &p, 10);
if (*p) {
- m = 0;
switch (*p) {
case '%':
- if (dopr)
+ if (dopr) {
+ applytextattributes(0);
putc('%', shout);
+ }
cc++;
break;
case 'n':
sprintf(nc, "%d", n);
- if (dopr)
+ if (dopr) {
+ applytextattributes(0);
fputs(nc, shout);
+ }
cc += MB_METASTRWIDTH(nc);
break;
case 'B':
- b = 1;
if (dopr)
- tcout(TCBOLDFACEBEG);
+ tsetattrs(TXTBOLDFACE);
break;
case 'b':
- b = 0; m = 1;
if (dopr)
- tcout(TCALLATTRSOFF);
+ tunsetattrs(TXTBOLDFACE);
break;
case 'S':
- s = 1;
if (dopr)
- tcout(TCSTANDOUTBEG);
+ tsetattrs(TXTSTANDOUT);
break;
case 's':
- s = 0; m = 1;
if (dopr)
- tcout(TCSTANDOUTEND);
+ tunsetattrs(TXTSTANDOUT);
break;
case 'U':
- u = 1;
if (dopr)
- tcout(TCUNDERLINEBEG);
+ tsetattrs(TXTUNDERLINE);
break;
case 'u':
- u = 0; m = 1;
if (dopr)
- tcout(TCUNDERLINEEND);
+ tunsetattrs(TXTUNDERLINE);
break;
case 'F':
case 'K':
@@ -2491,18 +2488,19 @@ printfmt(char *fmt, int n, int dopr, int doesc)
} else
atr = match_colour(NULL, is_fg, arg);
if (atr != TXT_ERROR)
- set_colour_attribute(atr, is_fg ? COL_SEQ_FG :
- COL_SEQ_BG, 0);
+ tsetattrs(atr);
break;
case 'f':
- set_colour_attribute(TXTNOFGCOLOUR, COL_SEQ_FG, 0);
+ tunsetattrs(TXTFGCOLOUR);
break;
case 'k':
- set_colour_attribute(TXTNOBGCOLOUR, COL_SEQ_BG, 0);
+ tunsetattrs(TXTBGCOLOUR);
break;
case '{':
if (arg)
cc += arg;
+ if (dopr)
+ applytextattributes(0);
for (p++; *p && (*p != '%' || p[1] != '}'); p++) {
if (*p == Meta) {
p++;
@@ -2518,14 +2516,6 @@ printfmt(char *fmt, int n, int dopr, int doesc)
p--;
break;
}
- if (dopr && m) {
- if (b)
- tcout(TCBOLDFACEBEG);
- if (s)
- tcout(TCSTANDOUTBEG);
- if (u)
- tcout(TCUNDERLINEBEG);
- }
} else
break;
p++;
@@ -2533,6 +2523,7 @@ printfmt(char *fmt, int n, int dopr, int doesc)
if (*p == '\n') {
cc++;
if (dopr) {
+ applytextattributes(0);
if (tccan(TCCLEAREOL))
tcout(TCCLEAREOL);
else {
@@ -2551,6 +2542,7 @@ printfmt(char *fmt, int n, int dopr, int doesc)
convchar_t cchar;
int clen = MB_METACHARLENCONV(p, &cchar);
if (dopr) {
+ applytextattributes(0);
while (clen--) {
if (*p == Meta) {
p++;