diff --git a/TODO b/TODO index 905fda4f..4405ca05 100644 --- a/TODO +++ b/TODO @@ -87,7 +87,7 @@ (hopefully) for 0.8, in no particular order: - swap-pane-up, swap-pane-down (maybe move-pane-*) - test bug sshing from freebsd console -- c&p is funny w/ UTF-8: a) skips over width=2 b) displays padding cells +- c&p is funny w/ UTF-8: skips over width=2 - fix compare fn for UTF-8 - document repeat behaviour and -r on bind-key diff --git a/screen-write.c b/screen-write.c index c1808a71..e6fbe514 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1,4 +1,4 @@ -/* $Id: screen-write.c,v 1.40 2009-03-28 20:17:29 nicm Exp $ */ +/* $Id: screen-write.c,v 1.41 2009-03-29 11:06:22 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -533,6 +533,10 @@ screen_write_cell( struct grid_cell tmp_gc, *tmp_gc2; size_t size; + /* Ignore padding. */ + if (gc->flags & GRID_FLAG_PADDING) + return; + /* Find character width. */ if (gc->flags & GRID_FLAG_UTF8) { uvalue = utf8_combine(udata); @@ -547,9 +551,14 @@ screen_write_cell( if (width == 0) { if (s->cx == 0) return; - gc = grid_view_peek_cell(gd, s->cx - 1, s->cy); - if (!(gc->flags & GRID_FLAG_UTF8)) - return; + tmp_gc2 = grid_view_get_cell(gd, s->cx - 1, s->cy); + if (!(tmp_gc2->flags & GRID_FLAG_UTF8)) { + tmp_gc2->flags |= GRID_FLAG_UTF8; + memset(&gu.data, 0xff, sizeof gu.data); + *gu.data = tmp_gc2->data; + gu.width = 1; + grid_view_set_utf8(gd, s->cx - 1, s->cy, &gu); + } tmp_gu = grid_view_get_utf8(gd, s->cx - 1, s->cy); for (i = 0; i < 8; i++) {