diff --git a/format-draw.c b/format-draw.c index a42dfe1d..efc6ab1a 100644 --- a/format-draw.c +++ b/format-draw.c @@ -719,7 +719,7 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, int focus_start = -1, focus_end = -1; int list_state = -1, fill = -1, even; enum style_align list_align = STYLE_ALIGN_DEFAULT; - struct grid_cell gc, current_default; + struct grid_cell gc, current_default, base_default; struct style sy, saved_sy; struct utf8_data *ud = &sy.gc.data; const char *cp, *end; @@ -729,7 +729,9 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, struct format_ranges frs; struct style_range *sr; + memcpy(&base_default, base, sizeof base_default); memcpy(¤t_default, base, sizeof current_default); + base = &base_default; style_set(&sy, ¤t_default); TAILQ_INIT(&frs); log_debug("%s: %s", __func__, expanded); @@ -847,6 +849,12 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base, } else if (sy.default_type == STYLE_DEFAULT_POP) { memcpy(¤t_default, base, sizeof current_default); sy.default_type = STYLE_DEFAULT_BASE; + } else if (sy.default_type == STYLE_DEFAULT_SET) { + memcpy(&base_default, &saved_sy.gc, + sizeof base_default); + memcpy(¤t_default, &saved_sy.gc, + sizeof current_default); + sy.default_type = STYLE_DEFAULT_BASE; } /* Check the list state. */ diff --git a/screen-redraw.c b/screen-redraw.c index 0d2acad6..f9bef59e 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -121,7 +121,12 @@ screen_redraw_pane_border(struct screen_redraw_ctx *ctx, struct window_pane *wp, u_int ex = wp->xoff + wp->sx, ey = wp->yoff + wp->sy; int hsplit = 0, vsplit = 0, pane_status = ctx->pane_status; int pane_scrollbars = ctx->pane_scrollbars, sb_w = 0; - int sb_pos = ctx->pane_scrollbars_pos; + int sb_pos; + + if (pane_scrollbars != 0) + sb_pos = ctx->pane_scrollbars_pos; + else + sb_pos = 0; /* Inside pane. */ if (px >= wp->xoff && px < ex && py >= wp->yoff && py < ey) @@ -149,16 +154,24 @@ screen_redraw_pane_border(struct screen_redraw_ctx *ctx, struct window_pane *wp, if (wp->xoff - sb_w == 0 && px == wp->sx + sb_w) if (!hsplit || (hsplit && py <= wp->sy / 2)) return (SCREEN_REDRAW_BORDER_RIGHT); - if (wp->xoff - sb_w != 0 && px == wp->xoff - sb_w - 1) - if (!hsplit || (hsplit && py > wp->sy / 2)) + if (wp->xoff - sb_w != 0) { + if (px == wp->xoff - sb_w - 1 && + (!hsplit || (hsplit && py > wp->sy / 2))) return (SCREEN_REDRAW_BORDER_LEFT); - } else { /* sb_pos == PANE_SCROLLBARS_RIGHT */ + if (px == wp->xoff + wp->sx + sb_w - 1) + return (SCREEN_REDRAW_BORDER_RIGHT); + } + } else { /* sb_pos == PANE_SCROLLBARS_RIGHT or disabled*/ if (wp->xoff == 0 && px == wp->sx + sb_w) if (!hsplit || (hsplit && py <= wp->sy / 2)) return (SCREEN_REDRAW_BORDER_RIGHT); - if (wp->xoff != 0 && px == wp->xoff - 1) - if (!hsplit || (hsplit && py > wp->sy / 2)) + if (wp->xoff != 0) { + if (px == wp->xoff - 1 && + (!hsplit || (hsplit && py > wp->sy / 2))) return (SCREEN_REDRAW_BORDER_LEFT); + if (px == wp->xoff + wp->sx + sb_w) + return (SCREEN_REDRAW_BORDER_RIGHT); + } } } diff --git a/style.c b/style.c index c9e5b15e..4e4f6fcc 100644 --- a/style.c +++ b/style.c @@ -98,6 +98,8 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in) sy->default_type = STYLE_DEFAULT_PUSH; else if (strcasecmp(tmp, "pop-default") == 0) sy->default_type = STYLE_DEFAULT_POP; + else if (strcasecmp(tmp, "set-default") == 0) + sy->default_type = STYLE_DEFAULT_SET; else if (strcasecmp(tmp, "nolist") == 0) sy->list = STYLE_LIST_OFF; else if (strncasecmp(tmp, "list=", 5) == 0) { @@ -310,6 +312,8 @@ style_tostring(struct style *sy) tmp = "push-default"; else if (sy->default_type == STYLE_DEFAULT_POP) tmp = "pop-default"; + else if (sy->default_type == STYLE_DEFAULT_SET) + tmp = "set-default"; off += xsnprintf(s + off, sizeof s - off, "%s%s", comma, tmp); comma = ","; } diff --git a/tmux.1 b/tmux.1 index da3225bc..0c7c3e68 100644 --- a/tmux.1 +++ b/tmux.1 @@ -6359,6 +6359,10 @@ will be available in the format variable. .Ql X must be at most 15 bytes in length. +.It Ic set-default +Set the current colours and attributes as the default, overwriting any previous +default. +The previous default cannot be restored. .El .Pp Examples are: diff --git a/tmux.h b/tmux.h index 55334e93..159148ba 100644 --- a/tmux.h +++ b/tmux.h @@ -890,7 +890,8 @@ TAILQ_HEAD(style_ranges, style_range); enum style_default_type { STYLE_DEFAULT_BASE, STYLE_DEFAULT_PUSH, - STYLE_DEFAULT_POP + STYLE_DEFAULT_POP, + STYLE_DEFAULT_SET }; /* Style option. */