mirror of
https://github.com/tmux/tmux.git
synced 2025-01-14 12:38:57 +00:00
Merge branch 'obsd-master'
This commit is contained in:
commit
857fca1095
@ -46,7 +46,7 @@ struct screen_write_collect_item {
|
|||||||
u_int x;
|
u_int x;
|
||||||
int wrapped;
|
int wrapped;
|
||||||
|
|
||||||
enum { TEXT, CLEAR, CLEAR_END, CLEAR_START } type;
|
enum { TEXT, CLEAR_END, CLEAR_START } type;
|
||||||
u_int used;
|
u_int used;
|
||||||
union {
|
union {
|
||||||
u_int bg;
|
u_int bg;
|
||||||
@ -58,6 +58,7 @@ struct screen_write_collect_item {
|
|||||||
TAILQ_ENTRY(screen_write_collect_item) entry;
|
TAILQ_ENTRY(screen_write_collect_item) entry;
|
||||||
};
|
};
|
||||||
struct screen_write_collect_line {
|
struct screen_write_collect_line {
|
||||||
|
u_int bg;
|
||||||
TAILQ_HEAD(, screen_write_collect_item) items;
|
TAILQ_HEAD(, screen_write_collect_item) items;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -932,10 +933,9 @@ screen_write_deleteline(struct screen_write_ctx *ctx, u_int ny, u_int bg)
|
|||||||
void
|
void
|
||||||
screen_write_clearline(struct screen_write_ctx *ctx, u_int bg)
|
screen_write_clearline(struct screen_write_ctx *ctx, u_int bg)
|
||||||
{
|
{
|
||||||
struct screen *s = ctx->s;
|
struct screen *s = ctx->s;
|
||||||
struct grid_line *gl;
|
struct grid_line *gl;
|
||||||
u_int sx = screen_size_x(s);
|
u_int sx = screen_size_x(s);
|
||||||
struct screen_write_collect_item *ci = ctx->item;
|
|
||||||
|
|
||||||
gl = grid_get_line(s->grid, s->grid->hsize + s->cy);
|
gl = grid_get_line(s->grid, s->grid->hsize + s->cy);
|
||||||
if (gl->cellsize == 0 && COLOUR_DEFAULT(bg))
|
if (gl->cellsize == 0 && COLOUR_DEFAULT(bg))
|
||||||
@ -944,11 +944,8 @@ screen_write_clearline(struct screen_write_ctx *ctx, u_int bg)
|
|||||||
grid_view_clear(s->grid, 0, s->cy, sx, 1, bg);
|
grid_view_clear(s->grid, 0, s->cy, sx, 1, bg);
|
||||||
|
|
||||||
screen_write_collect_clear(ctx, s->cy, 1);
|
screen_write_collect_clear(ctx, s->cy, 1);
|
||||||
ci->x = 0;
|
ctx->list[s->cy].bg = 1 + bg;
|
||||||
ci->type = CLEAR;
|
ctx->item->used = 0;
|
||||||
ci->bg = bg;
|
|
||||||
TAILQ_INSERT_TAIL(&ctx->list[s->cy].items, ci, entry);
|
|
||||||
ctx->item = xcalloc(1, sizeof *ctx->item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear to end of line from cursor. */
|
/* Clear to end of line from cursor. */
|
||||||
@ -1250,8 +1247,6 @@ screen_write_collect_clear_start(struct screen_write_ctx *ctx, u_int y, u_int x,
|
|||||||
return (0);
|
return (0);
|
||||||
TAILQ_FOREACH_SAFE(ci, &ctx->list[y].items, entry, tmp) {
|
TAILQ_FOREACH_SAFE(ci, &ctx->list[y].items, entry, tmp) {
|
||||||
switch (ci->type) {
|
switch (ci->type) {
|
||||||
case CLEAR:
|
|
||||||
continue;
|
|
||||||
case CLEAR_START:
|
case CLEAR_START:
|
||||||
if (ci->x >= x) {
|
if (ci->x >= x) {
|
||||||
if (ci->bg == bg)
|
if (ci->bg == bg)
|
||||||
@ -1293,8 +1288,6 @@ screen_write_collect_clear_end(struct screen_write_ctx *ctx, u_int y, u_int x,
|
|||||||
return (0);
|
return (0);
|
||||||
TAILQ_FOREACH_SAFE(ci, &ctx->list[y].items, entry, tmp) {
|
TAILQ_FOREACH_SAFE(ci, &ctx->list[y].items, entry, tmp) {
|
||||||
switch (ci->type) {
|
switch (ci->type) {
|
||||||
case CLEAR:
|
|
||||||
continue;
|
|
||||||
case CLEAR_START:
|
case CLEAR_START:
|
||||||
if (ci->x >= x)
|
if (ci->x >= x)
|
||||||
ci->x = x;
|
ci->x = x;
|
||||||
@ -1395,13 +1388,15 @@ screen_write_collect_flush(struct screen_write_ctx *ctx, int scroll_only,
|
|||||||
|
|
||||||
cx = s->cx; cy = s->cy;
|
cx = s->cx; cy = s->cy;
|
||||||
for (y = 0; y < screen_size_y(s); y++) {
|
for (y = 0; y < screen_size_y(s); y++) {
|
||||||
|
if (ctx->list[y].bg != 0) {
|
||||||
|
screen_write_set_cursor(ctx, 0, y);
|
||||||
|
screen_write_initctx(ctx, &ttyctx, 1);
|
||||||
|
ttyctx.bg = ctx->list[y].bg - 1;
|
||||||
|
tty_write(tty_cmd_clearline, &ttyctx);
|
||||||
|
}
|
||||||
TAILQ_FOREACH_SAFE(ci, &ctx->list[y].items, entry, tmp) {
|
TAILQ_FOREACH_SAFE(ci, &ctx->list[y].items, entry, tmp) {
|
||||||
screen_write_set_cursor(ctx, ci->x, y);
|
screen_write_set_cursor(ctx, ci->x, y);
|
||||||
if (ci->type == CLEAR) {
|
if (ci->type == CLEAR_END) {
|
||||||
screen_write_initctx(ctx, &ttyctx, 1);
|
|
||||||
ttyctx.bg = ci->bg;
|
|
||||||
tty_write(tty_cmd_clearline, &ttyctx);
|
|
||||||
} else if (ci->type == CLEAR_END) {
|
|
||||||
screen_write_initctx(ctx, &ttyctx, 1);
|
screen_write_initctx(ctx, &ttyctx, 1);
|
||||||
ttyctx.bg = ci->bg;
|
ttyctx.bg = ci->bg;
|
||||||
tty_write(tty_cmd_clearendofline, &ttyctx);
|
tty_write(tty_cmd_clearendofline, &ttyctx);
|
||||||
|
Loading…
Reference in New Issue
Block a user