mirror of
https://github.com/tmux/tmux.git
synced 2024-12-12 17:38:48 +00:00
ECH needs to use background colour.
This commit is contained in:
parent
7d3e2c83d4
commit
886d50dcab
3
input.c
3
input.c
@ -1308,7 +1308,8 @@ input_csi_dispatch(struct input_ctx *ictx)
|
||||
}
|
||||
break;
|
||||
case INPUT_CSI_ECH:
|
||||
screen_write_clearcharacter(sctx, input_get(ictx, 0, 1, 1));
|
||||
screen_write_clearcharacter(sctx, input_get(ictx, 0, 1, 1),
|
||||
ictx->cell.cell.bg);
|
||||
break;
|
||||
case INPUT_CSI_DCH:
|
||||
screen_write_deletecharacter(sctx, input_get(ictx, 0, 1, 1),
|
||||
|
@ -606,7 +606,7 @@ screen_write_deletecharacter(struct screen_write_ctx *ctx, u_int nx, u_int bg)
|
||||
|
||||
/* Clear nx characters. */
|
||||
void
|
||||
screen_write_clearcharacter(struct screen_write_ctx *ctx, u_int nx)
|
||||
screen_write_clearcharacter(struct screen_write_ctx *ctx, u_int nx, u_int bg)
|
||||
{
|
||||
struct screen *s = ctx->s;
|
||||
struct tty_ctx ttyctx;
|
||||
@ -623,6 +623,7 @@ screen_write_clearcharacter(struct screen_write_ctx *ctx, u_int nx)
|
||||
return;
|
||||
|
||||
screen_write_initctx(ctx, &ttyctx);
|
||||
ttyctx.bg = bg;
|
||||
|
||||
grid_view_clear(s->grid, s->cx, s->cy, nx, 1, 8);
|
||||
|
||||
|
4
tmux.h
4
tmux.h
@ -792,6 +792,7 @@ struct window_pane {
|
||||
struct event modetimer;
|
||||
time_t modelast;
|
||||
u_int modeprefix;
|
||||
char *searchstr;
|
||||
|
||||
TAILQ_ENTRY(window_pane) entry;
|
||||
RB_ENTRY(window_pane) tree_entry;
|
||||
@ -1996,7 +1997,7 @@ void screen_write_cursorleft(struct screen_write_ctx *, u_int);
|
||||
void screen_write_alignmenttest(struct screen_write_ctx *);
|
||||
void screen_write_insertcharacter(struct screen_write_ctx *, u_int, u_int);
|
||||
void screen_write_deletecharacter(struct screen_write_ctx *, u_int, u_int);
|
||||
void screen_write_clearcharacter(struct screen_write_ctx *, u_int);
|
||||
void screen_write_clearcharacter(struct screen_write_ctx *, u_int, u_int);
|
||||
void screen_write_insertline(struct screen_write_ctx *, u_int, u_int);
|
||||
void screen_write_deleteline(struct screen_write_ctx *, u_int, u_int);
|
||||
void screen_write_clearline(struct screen_write_ctx *, u_int);
|
||||
@ -2177,7 +2178,6 @@ void window_copy_vadd(struct window_pane *, const char *, va_list);
|
||||
void window_copy_pageup(struct window_pane *, int);
|
||||
void window_copy_start_drag(struct client *, struct mouse_event *);
|
||||
int window_copy_scroll_position(struct window_pane *);
|
||||
const char *window_copy_search_string(struct window_pane *);
|
||||
|
||||
/* window-choose.c */
|
||||
extern const struct window_mode window_choose_mode;
|
||||
|
14
tty.c
14
tty.c
@ -798,6 +798,7 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py,
|
||||
u_int ny, u_int px, u_int nx, u_int bg)
|
||||
{
|
||||
u_int yy;
|
||||
char tmp[64];
|
||||
|
||||
log_debug("%s: %u,%u at %u,%u", __func__, nx, ny, px, py);
|
||||
|
||||
@ -815,6 +816,17 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py,
|
||||
tty_putcode(tty, TTYC_ED);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we're setting a background colour (so it is not default),
|
||||
* we can use DECFRA.
|
||||
*/
|
||||
if (tty->term_type == TTY_VT420 && bg != 8) {
|
||||
xsnprintf(tmp, sizeof tmp, "\033[32;%u;%u;%u;%u$x",
|
||||
py + 1, px + 1, py + ny, px + nx);
|
||||
tty_puts(tty, tmp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Couldn't use an escape sequence, loop over the lines. */
|
||||
@ -1023,7 +1035,7 @@ tty_cmd_deletecharacter(struct tty *tty, const struct tty_ctx *ctx)
|
||||
void
|
||||
tty_cmd_clearcharacter(struct tty *tty, const struct tty_ctx *ctx)
|
||||
{
|
||||
tty_attributes(tty, &grid_default_cell, ctx->wp);
|
||||
tty_default_attributes(tty, ctx->wp, ctx->bg);
|
||||
|
||||
tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user