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}" \ "#{E:pane-status-style}" \
"]" \ "]" \
"#[push-default]" \ "#[push-default]" \
"#P[#{pane_width}x#{pane_height}]" \ "#{T:window-pane-status-format}" \
"#[pop-default]" \ "#[pop-default]" \
"#[norange list=on default] " \ "#[norange list=on default] " \
"," \ "," \
@@ -199,7 +199,7 @@ static const char *options_table_copy_mode_line_numbers_list[] = {
"}" \ "}" \
"]" \ "]" \
"#[push-default]" \ "#[push-default]" \
"#P[#{pane_width}x#{pane_height}]*" \ "#{T:window-pane-current-status-format}" \
"#[pop-default]" \ "#[pop-default]" \
"#[norange list=on default] " \ "#[norange list=on default] " \
"}" "}"
@@ -1518,6 +1518,21 @@ const struct options_table_entry options_table[] = {
.text = "Default style of the active pane." .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", { .name = "window-size",
.type = OPTIONS_TABLE_CHOICE, .type = OPTIONS_TABLE_CHOICE,
.scope = OPTIONS_TABLE_WINDOW, .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"; border_option = "pane-active-border-style";
else else
border_option = "pane-border-style"; border_option = "pane-border-style";
style_apply(&gc, w->options, border_option, ft); style_apply(&gc, wp->options, border_option, ft);
if (options_get_only(wp->options, border_option) != NULL)
style_add(&gc, wp->options, border_option, ft);
fmt = options_get_string(wp->options, "pane-border-format"); fmt = options_get_string(wp->options, "pane-border-format");
expanded = format_expand_time(ft, fmt); 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 client *c = ctx->c;
struct session *s = c->session; struct session *s = c->session;
struct window *w = s->curw->window;
struct window_pane *active = server_client_get_pane(c); struct window_pane *active = server_client_get_pane(c);
struct grid_cell *gc; struct grid_cell *gc;
const char *border_option; const char *border_option;
@@ -891,11 +888,7 @@ screen_redraw_draw_borders_style(struct screen_redraw_ctx *ctx, u_int x,
if (!*flag) { if (!*flag) {
ft = format_create_defaults(NULL, c, s, s->curw, wp); ft = format_create_defaults(NULL, c, s, s->curw, wp);
style_apply(gc, wp->options, border_option, ft);
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);
format_free(ft); format_free(ft);
*flag = 1; *flag = 1;
} }
@@ -1152,6 +1145,10 @@ screen_redraw_get_visible_ranges(struct window_pane *base_wp, u_int px,
return (&sr); return (&sr);
} }
w = base_wp->window;
if (px + width > w->sx)
width = w->sx - px;
if (r == NULL) { if (r == NULL) {
/* Start with the entire width of the range. */ /* Start with the entire width of the range. */
server_client_ensure_ranges(&base_wp->r, 1); 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; r->used = 1;
} }
w = base_wp->window;
sb = options_get_number(w->options, "pane-scrollbars"); sb = options_get_number(w->options, "pane-scrollbars");
sb_pos = options_get_number(w->options, "pane-scrollbars-position"); 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 see the
.Sx STYLES .Sx STYLES
section. 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 .El
.Sh HOOKS .Sh HOOKS
.Nm .Nm

25
tty.c
View File

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