“失败”是指该功能无法按预期工作。
我正在尝试使用 NCurses 为宽字符添加颜色。以下函数正确显示文本 --- 但仅以终端的默认颜色显示,无论pair
颜色对的值如何。(根据 GDB,在宏pair
之后保存正确的值。)如果我用一个常量(如)替换,该函数会正确地以颜色写入文本。 wattr_get
pair
4
我在 GDB 和 NCurses 5.9 源代码上花了一些时间,但我无法解释为什么常量有效而变量无效。
void color_write( const std::wstring &w ) {
// Convert to cchar_t for NCurses
attr_t attrs;
short pair;
wattr_get( window_, &attrs, &pair, nullptr );
std::vector< cchar_t > color_str;
std::wstring wt;
cchar_t ct;
for( auto& i: w ) {
wt = i;
if( OK != ::setcchar( &ct, wt.c_str(), attrs, pair, nullptr ) ) throw;
color_str.push_back( ct );
}
ct.chars[0] = 0;
color_str.push_back( ct );
::wadd_wchnstr( window_, color_str.data(), -1 );
}