summaryrefslogtreecommitdiffstats
path: root/screen-write.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2009-03-29 11:06:22 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2009-03-29 11:06:22 +0000
commit4cbf7d489e1d27a0b85c5d2dee791b108bbb6530 (patch)
tree141f8095f3f32eb8542bf6dc53b0481efb7eee92 /screen-write.c
parentae0ba11ac22fa980054c323d3e971a51fa52545a (diff)
- Ignore padding when writing so copying the screen for copy-mode doesn't include extra characters.
- Handle combined characters properly when the previous character is not UTF-8.
Diffstat (limited to 'screen-write.c')
-rw-r--r--screen-write.c17
1 files changed, 13 insertions, 4 deletions
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 <nicm@users.sourceforge.net>
@@ -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++) {