Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam
2026-05-27 20:15:06 +01:00
4 changed files with 68 additions and 42 deletions

View File

@@ -188,7 +188,7 @@ static const char *options_table_copy_mode_line_numbers_list[] = {
"#{E:pane-status-style}" \
"]" \
"#[push-default]" \
"#P[#{pane_width}x#{pane_height}]" \
"#{T:window-pane-status-format}" \
"#[pop-default]" \
"#[norange list=on default] " \
"," \
@@ -199,7 +199,7 @@ static const char *options_table_copy_mode_line_numbers_list[] = {
"}" \
"]" \
"#[push-default]" \
"#P[#{pane_width}x#{pane_height}]*" \
"#{T:window-pane-current-status-format}" \
"#[pop-default]" \
"#[norange list=on default] " \
"}"
@@ -1518,6 +1518,21 @@ const struct options_table_entry options_table[] = {
.text = "Default style of the active pane."
},
{ .name = "window-pane-current-status-format",
.type = OPTIONS_TABLE_STRING,
.scope = OPTIONS_TABLE_WINDOW,
.default_str = "#P:[#T]#{?pane_flags,#{pane_flags}, }",
.text = "Format of the current window pane in the status line."
},
{ .name = "window-pane-status-format",
.type = OPTIONS_TABLE_STRING,
.scope = OPTIONS_TABLE_WINDOW,
.default_str = "#P:[#T]#{?pane_flags,#{pane_flags}, }",
.text = "Format of window panes in the status line, except the "
"current pane."
},
{ .name = "window-size",
.type = OPTIONS_TABLE_CHOICE,
.scope = OPTIONS_TABLE_WINDOW,

View File

@@ -603,9 +603,7 @@ screen_redraw_make_pane_status(struct client *c, struct window_pane *wp,
border_option = "pane-active-border-style";
else
border_option = "pane-border-style";
style_apply(&gc, w->options, border_option, ft);
if (options_get_only(wp->options, border_option) != NULL)
style_add(&gc, wp->options, border_option, ft);
style_apply(&gc, wp->options, border_option, ft);
fmt = options_get_string(wp->options, "pane-border-format");
expanded = format_expand_time(ft, fmt);
@@ -872,7 +870,6 @@ screen_redraw_draw_borders_style(struct screen_redraw_ctx *ctx, u_int x,
{
struct client *c = ctx->c;
struct session *s = c->session;
struct window *w = s->curw->window;
struct window_pane *active = server_client_get_pane(c);
struct grid_cell *gc;
const char *border_option;
@@ -891,11 +888,7 @@ screen_redraw_draw_borders_style(struct screen_redraw_ctx *ctx, u_int x,
if (!*flag) {
ft = format_create_defaults(NULL, c, s, s->curw, wp);
style_apply(gc, w->options, border_option, ft);
if (options_get_only(wp->options, border_option) != NULL)
style_add(gc, wp->options, border_option, ft);
style_apply(gc, wp->options, border_option, ft);
format_free(ft);
*flag = 1;
}
@@ -1152,6 +1145,10 @@ screen_redraw_get_visible_ranges(struct window_pane *base_wp, u_int px,
return (&sr);
}
w = base_wp->window;
if (px + width > w->sx)
width = w->sx - px;
if (r == NULL) {
/* Start with the entire width of the range. */
server_client_ensure_ranges(&base_wp->r, 1);
@@ -1161,7 +1158,6 @@ screen_redraw_get_visible_ranges(struct window_pane *base_wp, u_int px,
r->used = 1;
}
w = base_wp->window;
sb = options_get_number(w->options, "pane-scrollbars");
sb_pos = options_get_number(w->options, "pane-scrollbars-position");

14
tmux.1
View File

@@ -5767,6 +5767,20 @@ For how to specify
see the
.Sx STYLES
section.
.Pp
.It Ic window-pane-status-format Ar string
Set the format in which the window pane is displayed in the status line window
pane list.
See the
.Sx FORMATS
and
.Sx STYLES
sections.
.Pp
.It Ic window-pane-current-status-format Ar string
Like
.Ar window-status-format ,
but is the format used when the window is the current window.
.El
.Sh HOOKS
.Nm

29
tty.c
View File

@@ -3030,41 +3030,42 @@ tty_window_default_style(struct grid_cell *gc, struct window_pane *wp)
gc->bg = wp->palette.bg;
}
void
tty_default_colours(struct grid_cell *gc, struct window_pane *wp)
static void
tty_style_changed(struct window_pane *wp)
{
struct options *oo = wp->options;
struct format_tree *ft;
memcpy(gc, &grid_default_cell, sizeof *gc);
if (wp->flags & PANE_STYLECHANGED) {
log_debug("%%%u: style changed", wp->id);
wp->flags &= ~PANE_STYLECHANGED;
ft = format_create(NULL, NULL, FORMAT_PANE|wp->id,
FORMAT_NOJOBS);
ft = format_create(NULL, NULL, FORMAT_PANE|wp->id, FORMAT_NOJOBS);
format_defaults(ft, NULL, NULL, NULL, wp);
tty_window_default_style(&wp->cached_active_gc, wp);
style_add(&wp->cached_active_gc, oo, "window-active-style", ft);
tty_window_default_style(&wp->cached_gc, wp);
style_add(&wp->cached_gc, oo, "window-style", ft);
format_free(ft);
}
if (gc->fg == 8) {
format_free(ft);
}
void
tty_default_colours(struct grid_cell *gc, struct window_pane *wp)
{
if (wp->flags & PANE_STYLECHANGED)
tty_style_changed (wp);
memcpy(gc, &grid_default_cell, sizeof *gc);
if (wp == wp->window->active && wp->cached_active_gc.fg != 8)
gc->fg = wp->cached_active_gc.fg;
else
gc->fg = wp->cached_gc.fg;
}
if (gc->bg == 8) {
if (wp == wp->window->active && wp->cached_active_gc.bg != 8)
gc->bg = wp->cached_active_gc.bg;
else
gc->bg = wp->cached_gc.bg;
}
}
void