diff options
| author | Oliver Kiddle <opk@zsh.org> | 2025-11-17 04:32:14 +0100 |
|---|---|---|
| committer | Oliver Kiddle <opk@zsh.org> | 2025-11-17 04:32:14 +0100 |
| commit | 5411128bf3c83516da8fdc4cb3d6187f243b6954 (patch) | |
| tree | bbc22904c21ac4ec3f71cc72ffcb2f1e7bfdb697 /Src/Zle | |
| parent | 54083: fix for cursor shape in viopp mode (diff) | |
| download | zsh-5411128bf3c83516da8fdc4cb3d6187f243b6954.tar zsh-5411128bf3c83516da8fdc4cb3d6187f243b6954.tar.gz zsh-5411128bf3c83516da8fdc4cb3d6187f243b6954.tar.bz2 zsh-5411128bf3c83516da8fdc4cb3d6187f243b6954.tar.lz zsh-5411128bf3c83516da8fdc4cb3d6187f243b6954.tar.xz zsh-5411128bf3c83516da8fdc4cb3d6187f243b6954.tar.zst zsh-5411128bf3c83516da8fdc4cb3d6187f243b6954.zip | |
54074, 54082: add an opaque key for use in zle_highlight/region_highlight to allow mixing of colours
Diffstat (limited to 'Src/Zle')
| -rw-r--r-- | Src/Zle/termquery.c | 26 | ||||
| -rw-r--r-- | Src/Zle/zle_main.c | 4 | ||||
| -rw-r--r-- | Src/Zle/zle_refresh.c | 12 |
3 files changed, 26 insertions, 16 deletions
diff --git a/Src/Zle/termquery.c b/Src/Zle/termquery.c index c6f83044d..ea8945895 100644 --- a/Src/Zle/termquery.c +++ b/Src/Zle/termquery.c @@ -439,16 +439,26 @@ handle_color(int bg, int red, int green, int blue) { char *colour; - if (bg == 1) { /* background color */ - /* scale by Rec.709 coefficients for lightness */ - setsparam(MODEVAR, ztrdup( - 0.2126f * red + 0.7152f * green + 0.0722f * blue <= 127 ? - "dark" : "light")); + switch (bg) { + case 0: /* foreground color */ + memo_term_color &= ~TXT_ATTR_FG_MASK; + memo_term_color |= TXT_ATTR_FG_24BIT | (zattr) ((((red << 8) + + green) << 8) + blue) << TXT_ATTR_FG_COL_SHIFT; + break; + case 1: /* background color */ + memo_term_color &= ~TXT_ATTR_BG_MASK; + memo_term_color |= TXT_ATTR_BG_24BIT | (zattr) ((((red << 8) + + green) << 8) + blue) << TXT_ATTR_BG_COL_SHIFT; + /* scale by Rec.709 coefficients for lightness */ + setsparam(MODEVAR, ztrdup( + 0.2126f * red + 0.7152f * green + 0.0722f * blue <= 127 ? + "dark" : "light")); + break; + case 2: /* cursor color */ + memo_cursor = (red << 24) | (green << 16) | (blue << 8); + break; } - if (bg == 2) /* cursor color */ - memo_cursor = (red << 24) | (green << 16) | (blue << 8); - colour = zalloc(8); sprintf(colour, "#%02x%02x%02x", red, green, blue); setsparam(COLORVAR[bg], colour); diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index 46d0e07d2..9ad917d86 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -1277,7 +1277,7 @@ zleread(char **lp, char **rp, int flags, int context, char *init, char *finish) raw_rp = rp; rpromptbuf = promptexpand(rp ? *rp : NULL, 1, markers[2], NULL, NULL); rpmpt_attr = txtcurrentattrs; - prompt_attr = mixattrs(pmpt_attr, pmpt_attr, rpmpt_attr); + prompt_attr = mixattrs(pmpt_attr, pmpt_attr & TXT_ATTR_ALL, rpmpt_attr); free_prepostdisplay(); zlereadflags = flags; @@ -2032,7 +2032,7 @@ reexpandprompt(void) new_rprompt = promptexpand(raw_rp ? *raw_rp : NULL, 1, markers[2], NULL, NULL); rpmpt_attr = txtcurrentattrs; - prompt_attr = mixattrs(pmpt_attr, pmpt_attr, rpmpt_attr); + prompt_attr = mixattrs(pmpt_attr, pmpt_attr & TXT_ATTR_ALL, rpmpt_attr); free(rpromptbuf); rpromptbuf = new_rprompt; } while (looping != reexpanding); diff --git a/Src/Zle/zle_refresh.c b/Src/Zle/zle_refresh.c index 8a89be333..255c701f2 100644 --- a/Src/Zle/zle_refresh.c +++ b/Src/Zle/zle_refresh.c @@ -208,7 +208,7 @@ int predisplaylen, postdisplaylen; * and for ellipsis continuation markers. */ -static zattr default_attr, special_attr, special_mask, ellipsis_attr; +static zattr default_attr, default_mask, special_attr, special_mask, ellipsis_attr; /* * Layer applied to highlighting for special characters @@ -330,7 +330,7 @@ zle_set_highlight(void) int ellipsis_attr_set = 0; struct region_highlight *rhp; - special_attr = default_attr = 0; + special_attr = default_attr = special_mask = default_mask = 0; if (!region_highlights) { region_highlights = (struct region_highlight *) zshcalloc(N_SPECIAL_HIGHLIGHTS*sizeof(struct region_highlight)); @@ -354,12 +354,12 @@ zle_set_highlight(void) for (; *atrs; atrs++) { if (!strcmp(*atrs, "none")) { /* reset attributes for consistency... usually unnecessary */ - special_attr = default_attr = 0; + special_attr = default_attr = special_mask = default_mask = 0; special_attr_set = 1; paste_attr_set = region_attr_set = isearch_attr_set = suffix_attr_set = 1; } else if (strpfx("default:", *atrs)) { - match_highlight(*atrs + 8, &default_attr, NULL, NULL); + match_highlight(*atrs + 8, &default_attr, &default_mask, NULL); } else if (strpfx("special:", *atrs)) { match_highlight(*atrs + 8, &special_attr, &special_mask, &special_layer); @@ -1206,7 +1206,7 @@ zrefresh(void) rpms.s = nbuf[rpms.ln = 0] + lpromptw; rpms.sen = *nbuf + winw; for (t = tmpline, tmppos = 0; tmppos < tmpll; t++, tmppos++) { - zattr base_attr = mixattrs(default_attr, default_attr, prompt_attr); + zattr base_attr = mixattrs(default_attr, default_mask, prompt_attr); zattr all_attr = 0; struct region_highlight *rhp; int layer, nextlayer = 0; @@ -2452,7 +2452,7 @@ singlerefresh(ZLE_STRING_T tmpline, int tmpll, int tmpcs) for (t0 = 0; t0 < tmpll; t0++) { unsigned ireg; - zattr base_attr = 0; + zattr base_attr = mixattrs(default_attr, default_attr, prompt_attr); zattr all_attr; struct region_highlight *rhp; /* |
