aboutsummaryrefslogtreecommitdiff
path: root/screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'screen.c')
-rw-r--r--screen.c45
1 files changed, 10 insertions, 35 deletions
diff --git a/screen.c b/screen.c
index 40274cdd..a5d7161d 100644
--- a/screen.c
+++ b/screen.c
@@ -1,4 +1,4 @@
-/* $Id: screen.c,v 1.90 2009-07-08 18:03:03 nicm Exp $ */
+/* $Id: screen.c,v 1.91 2009-07-12 17:03:11 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -121,44 +121,19 @@ void
screen_resize_x(struct screen *s, u_int sx)
{
struct grid *gd = s->grid;
- const struct grid_cell *gc;
- const struct grid_utf8 *gu;
- u_int xx, yy;
if (sx == 0)
fatalx("zero size");
- /* If getting larger, not much to do. */
- if (sx > screen_size_x(s)) {
- gd->sx = sx;
- return;
- }
-
- /* If getting smaller, nuke any data in lines over the new size. */
- for (yy = gd->hsize; yy < gd->hsize + screen_size_y(s); yy++) {
- /*
- * If the character after the last is wide or padding, remove
- * it and any leading padding.
- */
- gc = &grid_default_cell;
- for (xx = sx; xx > 0; xx--) {
- gc = grid_peek_cell(gd, xx - 1, yy);
- if (!(gc->flags & GRID_FLAG_PADDING))
- break;
- grid_set_cell(gd, xx - 1, yy, &grid_default_cell);
- }
- if (xx > 0 && xx != sx && gc->flags & GRID_FLAG_UTF8) {
- gu = grid_peek_utf8(gd, xx - 1, yy);
- if (gu->width > 1) {
- grid_set_cell(
- gd, xx - 1, yy, &grid_default_cell);
- }
- }
-
- /* Reduce the line size. */
- grid_reduce_line(gd, yy, sx);
- }
-
+ /*
+ * Treat resizing horizontally simply: just ensure the cursor is
+ * on-screen and change the size. Don't bother to truncate any lines -
+ * then the data should be accessible if the size is then incrased.
+ *
+ * The only potential wrinkle is if UTF-8 double-width characters are
+ * left in the last column, but UTF-8 terminals should deal with this
+ * sanely.
+ */
if (s->cx >= sx)
s->cx = sx - 1;
gd->sx = sx;