Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: curses: use setcchar in zccmd_bg if available
This allows using more than 256 color pairs.
---
Src/Modules/curses.c | 40 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
diff --git a/Src/Modules/curses.c b/Src/Modules/curses.c
index a6d6cecf36..5cb03046d3 100644
--- a/Src/Modules/curses.c
+++ b/Src/Modules/curses.c
@@ -932,7 +932,14 @@ zccmd_bg(const char *nam, char **args)
ZCWin w;
char **attrs;
int ret = 0;
+#ifdef HAVE_SETCCHAR
+ cchar_t cc;
+ wchar_t wch = L' ';
+ attr_t bg_attrs = A_NORMAL;
+ short bg_cp = 0;
+#else
chtype ch = 0;
+#endif
if (!args[0])
return 1;
@@ -945,12 +952,20 @@ zccmd_bg(const char *nam, char **args)
w = (ZCWin)getdata(node);
- for(attrs = args+1; *attrs; attrs++) {
+ for (attrs = args+1; *attrs; attrs++) {
if (strchr(*attrs, '/')) {
Colorpairnode cpn;
if ((cpn = zcurses_colorget(nam, *attrs)) == NULL)
ret = 1;
- else if (cpn->colorpair >= 256) {
+ else
+#ifdef HAVE_SETCCHAR
+ bg_cp = (short)cpn->colorpair;
+ } else if (**attrs == '@') {
+ wch = (wchar_t)(unsigned char)((*attrs)[1] == Meta
+ ? (*attrs)[2] ^ 32
+ : (*attrs)[1]);
+#else
+ if (cpn->colorpair >= 256) {
/* pretty unlikely, but... */
zwarnnam(nam, "bg color pair %s has index (%d) too large (max 255)",
cpn->node.nam, cpn->colorpair);
@@ -960,6 +975,7 @@ zccmd_bg(const char *nam, char **args)
}
} else if (**attrs == '@') {
ch |= (*attrs)[1] == Meta ? (*attrs)[2] ^ 32 : (*attrs)[1];
+#endif
} else {
char *ptr;
int onoff;
@@ -983,6 +999,25 @@ zccmd_bg(const char *nam, char **args)
zwarnnam(nam, "attribute `%s' not known", ptr);
ret = 1;
} else {
+#ifdef HAVE_SETCCHAR
+ switch (onoff) {
+ case ZCURSES_ATTRON:
+ bg_attrs |= zca->number;
+ break;
+ case ZCURSES_ATTROFF:
+ bg_attrs &= ~zca->number;
+ break;
+ }
+ }
+ }
+ }
+
+ if (ret == 0) {
+ if (setcchar(&cc, &wch, bg_attrs, bg_cp, NULL) == ERR)
+ return 1;
+ return wbkgrnd(w->win, &cc) != OK;
+ }
+#else
switch(onoff) {
case ZCURSES_ATTRON:
ch |= zca->number;
@@ -997,6 +1032,7 @@ zccmd_bg(const char *nam, char **args)
if (ret == 0)
return wbkgd(w->win, ch) != OK;
+#endif
return ret;
}
--
2.38.1
Messages sorted by:
Reverse Date,
Date,
Thread,
Author