diff --git a/src/terminal/terminaldisplay.cc b/src/terminal/terminaldisplay.cc index de2559a..f546a4d 100644 --- a/src/terminal/terminaldisplay.cc +++ b/src/terminal/terminaldisplay.cc @@ -462,21 +462,6 @@ FrameState::FrameState( const Framebuffer &s_last ) str.reserve( last_frame.ds.get_width() * last_frame.ds.get_height() * 4 ); } -/* Write a character cell */ -void FrameState::append_cell(const Cell & cell) -{ - if ( cell.contents.empty() ) { - append( ' ' ); - return; - } - /* cells that begin with combining character get combiner attached to no-break space */ - if ( cell.fallback ) { - append( "\xC2\xA0" ); - } - append( cell.contents ); -} - - void FrameState::append_silent_move( int y, int x ) { if ( cursor_x == x && cursor_y == y ) return; diff --git a/src/terminal/terminaldisplay.h b/src/terminal/terminaldisplay.h index 9cc7b5e..188cd1f 100644 --- a/src/terminal/terminaldisplay.h +++ b/src/terminal/terminaldisplay.h @@ -56,7 +56,7 @@ namespace Terminal { void append( const Cell::content_type &contents ) { str.append( contents.begin(), contents.end() ); } void append_string( const std::string &append ) { str.append(append); } - void append_cell(const Cell & cell); + void append_cell(const Cell & cell) { cell.print_grapheme( str ); } void append_silent_move( int y, int x ); void append_move( int y, int x ); void update_rendition( const Renditions &r, bool force = false ); diff --git a/src/terminal/terminalframebuffer.h b/src/terminal/terminalframebuffer.h index 6324a32..3ec29b5 100644 --- a/src/terminal/terminalframebuffer.h +++ b/src/terminal/terminalframebuffer.h @@ -113,6 +113,7 @@ namespace Terminal { bool is_blank( void ) const { + // XXX fix. return ( contents.empty() || contents == " " || contents == "\xC2\xA0" ); @@ -161,6 +162,22 @@ namespace Terminal { size_t len = wcrtomb(tmp, c, &ps); contents.insert( contents.end(), tmp, tmp+len ); } + + void print_grapheme( std::string &output ) const + { + if ( cell.contents.empty() ) { + output.append( ' ' ); + return; + } + /* + * cells that begin with combining character get combiner + * attached to no-break space + */ + if ( cell.fallback ) { + output.append( "\xC2\xA0" ); + } + output.append( cell.contents ); + } }; class Row {