diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-07-09 22:48:20 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-07-09 22:48:20 +0000 |
commit | 58361eb96520787c9105b0031efd3a6d8414acf1 (patch) | |
tree | ee1f592661d9aed44cab6172e7f4f26f2155e969 | |
parent | 5f2f07ed8a0ecaa2aacda59768c55e615b897cfb (diff) | |
download | rtmux-58361eb96520787c9105b0031efd3a6d8414acf1.tar.gz rtmux-58361eb96520787c9105b0031efd3a6d8414acf1.tar.bz2 rtmux-58361eb96520787c9105b0031efd3a6d8414acf1.zip |
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 | 43 |
1 files changed, 9 insertions, 34 deletions
@@ -122,44 +122,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; |