diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-07-12 17:03:11 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-07-12 17:03:11 +0000 |
commit | 8be8016a7653a202666fb1cb46a91d881cbd3ac2 (patch) | |
tree | a536e9d0a305d550e09f5f293327d53294eccdba | |
parent | d4a143a4251c5606136a8c9421ff18f7523f48cc (diff) |
When the terminal size is reduced horizontally, don't truncate lines to the new
width, so that if the same lines are later increased in size the content
reappears.
-rw-r--r-- | screen.c | 45 |
1 files changed, 10 insertions, 35 deletions
@@ -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; |