関数が期待どおりに機能しないという意味での「失敗」。
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 );
}