Trim output overwritten by later text or clears completely rather than

only in a few cases. This means we can better track when a line should
wrap. GitHub issue 2537.
This commit is contained in:
nicm
2021-01-29 09:48:43 +00:00
parent 8156d9ba41
commit 255802d8d7
4 changed files with 230 additions and 209 deletions

65
tmux.h
View File

@@ -55,8 +55,8 @@ struct mouse_event;
struct options;
struct options_array_item;
struct options_entry;
struct screen_write_collect_item;
struct screen_write_collect_line;
struct screen_write_citem;
struct screen_write_cline;
struct screen_write_ctx;
struct session;
struct tty_ctx;
@@ -794,55 +794,51 @@ struct style {
struct screen_sel;
struct screen_titles;
struct screen {
char *title;
char *path;
struct screen_titles *titles;
char *title;
char *path;
struct screen_titles *titles;
struct grid *grid; /* grid data */
struct grid *grid; /* grid data */
u_int cx; /* cursor x */
u_int cy; /* cursor y */
u_int cx; /* cursor x */
u_int cy; /* cursor y */
u_int cstyle; /* cursor style */
char *ccolour; /* cursor colour string */
u_int cstyle; /* cursor style */
char *ccolour; /* cursor colour string */
u_int rupper; /* scroll region top */
u_int rlower; /* scroll region bottom */
u_int rupper; /* scroll region top */
u_int rlower; /* scroll region bottom */
int mode;
int mode;
u_int saved_cx;
u_int saved_cy;
struct grid *saved_grid;
struct grid_cell saved_cell;
int saved_flags;
u_int saved_cx;
u_int saved_cy;
struct grid *saved_grid;
struct grid_cell saved_cell;
int saved_flags;
bitstr_t *tabs;
struct screen_sel *sel;
bitstr_t *tabs;
struct screen_sel *sel;
struct screen_write_collect_line *write_list;
struct screen_write_cline *write_list;
};
/* Screen write context. */
typedef void (*screen_write_init_ctx_cb)(struct screen_write_ctx *,
struct tty_ctx *);
struct screen_write_ctx {
struct window_pane *wp;
struct screen *s;
struct window_pane *wp;
struct screen *s;
int flags;
int flags;
#define SCREEN_WRITE_SYNC 0x1
screen_write_init_ctx_cb init_ctx_cb;
void *arg;
screen_write_init_ctx_cb init_ctx_cb;
void *arg;
struct screen_write_collect_item *item;
u_int scrolled;
u_int bg;
u_int cells;
u_int written;
u_int skipped;
struct screen_write_citem *item;
u_int scrolled;
u_int bg;
};
/* Screen redraw context. */
@@ -1001,9 +997,6 @@ struct window_pane {
char *searchstr;
int searchregex;
size_t written;
size_t skipped;
int border_gc_set;
struct grid_cell border_gc;