Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam
2025-05-22 10:01:08 +01:00
5 changed files with 38 additions and 8 deletions

View File

@ -719,7 +719,7 @@ format_draw(struct screen_write_ctx *octx, const struct grid_cell *base,
int focus_start = -1, focus_end = -1; int focus_start = -1, focus_end = -1;
int list_state = -1, fill = -1, even; int list_state = -1, fill = -1, even;
enum style_align list_align = STYLE_ALIGN_DEFAULT; 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 style sy, saved_sy;
struct utf8_data *ud = &sy.gc.data; struct utf8_data *ud = &sy.gc.data;
const char *cp, *end; 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 format_ranges frs;
struct style_range *sr; struct style_range *sr;
memcpy(&base_default, base, sizeof base_default);
memcpy(&current_default, base, sizeof current_default); memcpy(&current_default, base, sizeof current_default);
base = &base_default;
style_set(&sy, &current_default); style_set(&sy, &current_default);
TAILQ_INIT(&frs); TAILQ_INIT(&frs);
log_debug("%s: %s", __func__, expanded); 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) { } else if (sy.default_type == STYLE_DEFAULT_POP) {
memcpy(&current_default, base, sizeof current_default); memcpy(&current_default, base, sizeof current_default);
sy.default_type = STYLE_DEFAULT_BASE; sy.default_type = STYLE_DEFAULT_BASE;
} else if (sy.default_type == STYLE_DEFAULT_SET) {
memcpy(&base_default, &saved_sy.gc,
sizeof base_default);
memcpy(&current_default, &saved_sy.gc,
sizeof current_default);
sy.default_type = STYLE_DEFAULT_BASE;
} }
/* Check the list state. */ /* Check the list state. */

View File

@ -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; u_int ex = wp->xoff + wp->sx, ey = wp->yoff + wp->sy;
int hsplit = 0, vsplit = 0, pane_status = ctx->pane_status; int hsplit = 0, vsplit = 0, pane_status = ctx->pane_status;
int pane_scrollbars = ctx->pane_scrollbars, sb_w = 0; 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. */ /* Inside pane. */
if (px >= wp->xoff && px < ex && py >= wp->yoff && py < ey) 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 (wp->xoff - sb_w == 0 && px == wp->sx + sb_w)
if (!hsplit || (hsplit && py <= wp->sy / 2)) if (!hsplit || (hsplit && py <= wp->sy / 2))
return (SCREEN_REDRAW_BORDER_RIGHT); return (SCREEN_REDRAW_BORDER_RIGHT);
if (wp->xoff - sb_w != 0 && px == wp->xoff - sb_w - 1) if (wp->xoff - sb_w != 0) {
if (!hsplit || (hsplit && py > wp->sy / 2)) if (px == wp->xoff - sb_w - 1 &&
(!hsplit || (hsplit && py > wp->sy / 2)))
return (SCREEN_REDRAW_BORDER_LEFT); 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 (wp->xoff == 0 && px == wp->sx + sb_w)
if (!hsplit || (hsplit && py <= wp->sy / 2)) if (!hsplit || (hsplit && py <= wp->sy / 2))
return (SCREEN_REDRAW_BORDER_RIGHT); return (SCREEN_REDRAW_BORDER_RIGHT);
if (wp->xoff != 0 && px == wp->xoff - 1) if (wp->xoff != 0) {
if (!hsplit || (hsplit && py > wp->sy / 2)) if (px == wp->xoff - 1 &&
(!hsplit || (hsplit && py > wp->sy / 2)))
return (SCREEN_REDRAW_BORDER_LEFT); return (SCREEN_REDRAW_BORDER_LEFT);
if (px == wp->xoff + wp->sx + sb_w)
return (SCREEN_REDRAW_BORDER_RIGHT);
}
} }
} }

View File

@ -98,6 +98,8 @@ style_parse(struct style *sy, const struct grid_cell *base, const char *in)
sy->default_type = STYLE_DEFAULT_PUSH; sy->default_type = STYLE_DEFAULT_PUSH;
else if (strcasecmp(tmp, "pop-default") == 0) else if (strcasecmp(tmp, "pop-default") == 0)
sy->default_type = STYLE_DEFAULT_POP; 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) else if (strcasecmp(tmp, "nolist") == 0)
sy->list = STYLE_LIST_OFF; sy->list = STYLE_LIST_OFF;
else if (strncasecmp(tmp, "list=", 5) == 0) { else if (strncasecmp(tmp, "list=", 5) == 0) {
@ -310,6 +312,8 @@ style_tostring(struct style *sy)
tmp = "push-default"; tmp = "push-default";
else if (sy->default_type == STYLE_DEFAULT_POP) else if (sy->default_type == STYLE_DEFAULT_POP)
tmp = "pop-default"; 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); off += xsnprintf(s + off, sizeof s - off, "%s%s", comma, tmp);
comma = ","; comma = ",";
} }

4
tmux.1
View File

@ -6359,6 +6359,10 @@ will be available in the
format variable. format variable.
.Ql X .Ql X
must be at most 15 bytes in length. 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 .El
.Pp .Pp
Examples are: Examples are:

3
tmux.h
View File

@ -890,7 +890,8 @@ TAILQ_HEAD(style_ranges, style_range);
enum style_default_type { enum style_default_type {
STYLE_DEFAULT_BASE, STYLE_DEFAULT_BASE,
STYLE_DEFAULT_PUSH, STYLE_DEFAULT_PUSH,
STYLE_DEFAULT_POP STYLE_DEFAULT_POP,
STYLE_DEFAULT_SET
}; };
/* Style option. */ /* Style option. */