mirror of
https://github.com/tmate-io/tmate.git
synced 2025-02-17 02:41:07 +01:00
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.
This commit is contained in:
parent
5f2f07ed8a
commit
58361eb965
43
screen.c
43
screen.c
@ -122,44 +122,19 @@ void
|
|||||||
screen_resize_x(struct screen *s, u_int sx)
|
screen_resize_x(struct screen *s, u_int sx)
|
||||||
{
|
{
|
||||||
struct grid *gd = s->grid;
|
struct grid *gd = s->grid;
|
||||||
const struct grid_cell *gc;
|
|
||||||
const struct grid_utf8 *gu;
|
|
||||||
u_int xx, yy;
|
|
||||||
|
|
||||||
if (sx == 0)
|
if (sx == 0)
|
||||||
fatalx("zero size");
|
fatalx("zero size");
|
||||||
|
|
||||||
/* If getting larger, not much to do. */
|
/*
|
||||||
if (sx > screen_size_x(s)) {
|
* Treat resizing horizontally simply: just ensure the cursor is
|
||||||
gd->sx = sx;
|
* on-screen and change the size. Don't bother to truncate any lines -
|
||||||
return;
|
* then the data should be accessible if the size is then incrased.
|
||||||
}
|
*
|
||||||
|
* The only potential wrinkle is if UTF-8 double-width characters are
|
||||||
/* If getting smaller, nuke any data in lines over the new size. */
|
* left in the last column, but UTF-8 terminals should deal with this
|
||||||
for (yy = gd->hsize; yy < gd->hsize + screen_size_y(s); yy++) {
|
* sanely.
|
||||||
/*
|
*/
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s->cx >= sx)
|
if (s->cx >= sx)
|
||||||
s->cx = sx - 1;
|
s->cx = sx - 1;
|
||||||
gd->sx = sx;
|
gd->sx = sx;
|
||||||
|
Loading…
Reference in New Issue
Block a user