diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index f7584a39b182d9..d87374a298fc33 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -537,6 +537,11 @@ def test_complexchar(self): self.assertEqual(str(cc), 'z') self.assertEqual(cc.attr, 0) self.assertEqual(cc.pair, 0) + # attr never carries the color pair. + self.assertEqual(curses.complexchar('A', 0, 1).attr, 0) + self.assertEqual(curses.complexchar('A', curses.A_BOLD, 1).attr, + curses.A_BOLD) + self.assertEqual(curses.complexchar('A', 0, 1).pair, 1) # Immutable rendition. self.assertRaises(AttributeError, setattr, cc, 'attr', 1) self.assertRaises(AttributeError, setattr, cc, 'pair', 1) @@ -592,7 +597,7 @@ def test_in_wch_color(self): stdscr.addch(0, 0, curses.complexchar('A', curses.A_BOLD, 1)) cc = stdscr.in_wch(0, 0) self.assertEqual(str(cc), 'A') - self.assertTrue(cc.attr & curses.A_BOLD) + self.assertEqual(cc.attr, curses.A_BOLD) self.assertEqual(cc.pair, 1) self.assertEqual(curses.complexchar('A', 0, 1).pair, 1) diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 07e924b0fc564b..383de378670ea9 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -798,6 +798,9 @@ curses_getcchar(const cchar_t *wcval, wchar_t *wstr, attr_t *attrs, int *pair) *pair = spair; } #endif + if (rtn != ERR) { + *attrs &= ~(attr_t)A_COLOR; + } return rtn; } @@ -3674,7 +3677,7 @@ _curses_window_inch_impl(PyCursesWindowObject *self, int group_right_1, byte = 0; } } - rtn = (chtype)byte | (attrs & ~(attr_t)A_COLOR) | COLOR_PAIR(pair); + rtn = (chtype)byte | attrs | COLOR_PAIR(pair); #else if (!group_right_1) { rtn = winch(self->win);