diff --git a/grid.c b/grid.c index d5d2b37f..0d1db844 100644 --- a/grid.c +++ b/grid.c @@ -200,7 +200,7 @@ grid_adjust_lines(struct grid *gd, u_int lines) /* Copy default into a cell. */ static void -grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg) +grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg, int moved) { struct grid_line *gl = &gd->linedata[py]; struct grid_cell_entry *gce = &gl->celldata[px]; @@ -209,7 +209,7 @@ grid_clear_cell(struct grid *gd, u_int px, u_int py, u_int bg) int had_extd = (gce->flags & GRID_FLAG_EXTENDED); memcpy(gce, &grid_cleared_entry, sizeof *gce); - if (had_extd && old_offset < gl->extdsize) { + if (!moved && had_extd && old_offset < gl->extdsize) { gce->flags |= GRID_FLAG_EXTENDED; gce->offset = old_offset; gee = grid_extended_cell(gl, gce, &grid_cleared_cell); @@ -515,7 +515,7 @@ grid_expand_line(struct grid *gd, u_int py, u_int sx, u_int bg) (sx - gl->cellsize) * sizeof *gl->celldata); } for (xx = gl->cellsize; xx < sx; xx++) - grid_clear_cell(gd, xx, py, bg); + grid_clear_cell(gd, xx, py, bg, 0); gl->cellsize = sx; } @@ -683,7 +683,7 @@ grid_clear(struct grid *gd, u_int px, u_int py, u_int nx, u_int ny, u_int bg) grid_expand_line(gd, yy, px + ox, 8); /* default bg first */ for (xx = px; xx < px + ox; xx++) - grid_clear_cell(gd, xx, yy, bg); + grid_clear_cell(gd, xx, yy, bg, 0); } } @@ -777,7 +777,7 @@ grid_move_cells(struct grid *gd, u_int dx, u_int px, u_int py, u_int nx, for (xx = px; xx < px + nx; xx++) { if (xx >= dx && xx < dx + nx) continue; - grid_clear_cell(gd, xx, py, bg); + grid_clear_cell(gd, xx, py, bg, 1); } } diff --git a/screen.c b/screen.c index 7ba70ea0..617ac24c 100644 --- a/screen.c +++ b/screen.c @@ -760,8 +760,9 @@ screen_mode_to_string(int mode) return (tmp); } +/* Convert screen to a string. */ const char * -screen_print(struct screen *s) +screen_print(struct screen *s, int line) { static char *buf; static size_t len = 16384; @@ -777,6 +778,8 @@ screen_print(struct screen *s) buf = xmalloc(len); for (y = 0; y < screen_hsize(s) + s->grid->sy; y++) { + if (line >= 0 && y != (u_int)line) + continue; n = snprintf(buf + last, len - last, "%.4d \"", y); if (n <= 0 || (u_int)n >= len - last) goto out; diff --git a/tmux.h b/tmux.h index 87bcac78..49519d0e 100644 --- a/tmux.h +++ b/tmux.h @@ -3296,7 +3296,7 @@ int screen_select_cell(struct screen *, struct grid_cell *, void screen_alternate_on(struct screen *, struct grid_cell *, int); void screen_alternate_off(struct screen *, struct grid_cell *, int); const char *screen_mode_to_string(int); -const char *screen_print(struct screen *); +const char *screen_print(struct screen *, int); /* window.c */ extern struct windows windows;