(address . bug-guix@gnu.org)
Hello
With ncurses, the "attrset" colour pair is ignored when the background
colour pair is set with "bkgd".
I ran into this issue when compiling robotfindskitten, but it is not
specific to that program and can be reproduced with the attached small
test code. When compiled with "gcc test.c -lncurses", "./a.out" is
expected to display the sample text in yellow (the brownish curses
equivalent of yellow), which is set with "attrset". It does so when
compiled as usual without guix. If compiled in guix, the sample text is
blue instead, which is set with "bkgd" for background and for some
reason is not overridden by "attrset". If the "bkgd" line is removed,
"attrset" works as usual.
This affects software compiled in a guix shell (guix environment), or
on a guix system, or with "guix build" and "guix install".
It does not seem to be caused by the terminal properties or environment
variables because it can be reproduced on the same Debian machine after
compiling (1) with guix (in a guix environment) and (2) without guix.
I tried compiling with guix having ncurses 6.2.20210619 (current guix)
and 6.2.20200212 (from the older guix image from the website and in
Debian bullseye). I tried compiling without guix on Debian with
development packages for ncurses 6.2+20201114-2 (bullseye) and 6.3-2
(bookworm) and on Fedora with its development package for ncurses
6.2.20210508.
I was pointed in a forum to "render_char" function in lib_addch.c, [1]
which defines how colour is applied. But there seem to be no
modifications to that in guix as far as I can see.
[1]:
Roman
#include <ncurses.h>
int main() {
initscr();
start_color();
init_pair ( 1, COLOR_BLUE, COLOR_BLACK );
init_pair ( 2, COLOR_YELLOW, COLOR_BLACK );
bkgd ( (chtype) COLOR_PAIR(1) );
attrset ( COLOR_PAIR(2) );
printw ( "NO WAR!" );
refresh();
getch();
endwin();
return 0;
}