diff --git a/options-table.c b/options-table.c index 0a75700d..b09dcc3d 100644 --- a/options-table.c +++ b/options-table.c @@ -1026,6 +1026,24 @@ const struct options_table_entry options_table[] = { .text = "Format of the position indicator in copy mode." }, + { .name = "copy-mode-position-style", + .type = OPTIONS_TABLE_STRING, + .scope = OPTIONS_TABLE_WINDOW, + .default_str = "#{mode-style}", + .flags = OPTIONS_TABLE_IS_STYLE, + .separator = ",", + .text = "Style of position indicator in copy mode." + }, + + { .name = "copy-mode-selection-style", + .type = OPTIONS_TABLE_STRING, + .scope = OPTIONS_TABLE_WINDOW, + .default_str = "#{mode-style}", + .flags = OPTIONS_TABLE_IS_STYLE, + .separator = ",", + .text = "Style of selection in copy mode." + }, + { .name = "fill-character", .type = OPTIONS_TABLE_STRING, .scope = OPTIONS_TABLE_WINDOW, diff --git a/tmux.1 b/tmux.1 index 5f584acf..43a7b681 100644 --- a/tmux.1 +++ b/tmux.1 @@ -4888,6 +4888,22 @@ or contains .Ql vi . .Pp +.It Ic copy-mode-position-style Ar style +Set the style of the position indicator in copy mode. +For how to specify +.Ar style , +see the +.Sx STYLES +section. +.Pp +.It Ic copy-mode-selection-style Ar style +Set the style of the selection in copy mode. +For how to specify +.Ar style , +see the +.Sx STYLES +section. +.Pp .It Ic mode-style Ar style Set window modes style. For how to specify diff --git a/window-copy.c b/window-copy.c index 36b9f89c..1cda6d39 100644 --- a/window-copy.c +++ b/window-copy.c @@ -4391,13 +4391,15 @@ window_copy_write_line(struct window_mode_entry *wme, char *expanded; struct format_tree *ft; - style_apply(&gc, oo, "mode-style", NULL); + ft = format_create_defaults(NULL, NULL, NULL, NULL, wp); + + style_apply(&gc, oo, "copy-mode-position-style", ft); gc.flags |= GRID_FLAG_NOPALETTE; - style_apply(&mgc, oo, "copy-mode-match-style", NULL); + style_apply(&mgc, oo, "copy-mode-match-style", ft); mgc.flags |= GRID_FLAG_NOPALETTE; - style_apply(&cgc, oo, "copy-mode-current-match-style", NULL); + style_apply(&cgc, oo, "copy-mode-current-match-style", ft); cgc.flags |= GRID_FLAG_NOPALETTE; - style_apply(&mkgc, oo, "copy-mode-mark-style", NULL); + style_apply(&mkgc, oo, "copy-mode-mark-style", ft); mkgc.flags |= GRID_FLAG_NOPALETTE; window_copy_write_one(wme, ctx, py, hsize - data->oy + py, @@ -4406,14 +4408,12 @@ window_copy_write_line(struct window_mode_entry *wme, if (py == 0 && s->rupper < s->rlower && !data->hide_position) { value = options_get_string(oo, "copy-mode-position-format"); if (*value != '\0') { - ft = format_create_defaults(NULL, NULL, NULL, NULL, wp); expanded = format_expand(ft, value); if (*expanded != '\0') { screen_write_cursormove(ctx, 0, 0, 0); format_draw(ctx, &gc, sx, expanded, NULL, 0); } free(expanded); - format_free(ft); } } @@ -4421,6 +4421,8 @@ window_copy_write_line(struct window_mode_entry *wme, screen_write_cursormove(ctx, screen_size_x(s) - 1, py, 0); screen_write_putc(ctx, &grid_default_cell, '$'); } + + format_free(ft); } static void @@ -4668,6 +4670,7 @@ window_copy_set_selection(struct window_mode_entry *wme, int may_redraw, struct grid_cell gc; u_int sx, sy, cy, endsx, endsy; int startrelpos, endrelpos; + struct format_tree *ft; window_copy_synchronize_cursor(wme, no_reset); @@ -4689,8 +4692,10 @@ window_copy_set_selection(struct window_mode_entry *wme, int may_redraw, } /* Set colours and selection. */ - style_apply(&gc, oo, "mode-style", NULL); + ft = format_create_defaults(NULL, NULL, NULL, NULL, wp); + style_apply(&gc, oo, "copy-mode-selection-style", ft); gc.flags |= GRID_FLAG_NOPALETTE; + format_free(ft); screen_set_selection(s, sx, sy, endsx, endsy, data->rectflag, data->modekeys, &gc);