aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2021-10-13 14:01:16 +0100
committerThomas Adam <thomas@xteddy.org>2021-10-13 14:01:16 +0100
commitfb23df679b31418dbef21bc7b98c891ee3a48d42 (patch)
tree5d685379ae3b1114a348707fd57fd0ef440e9b88
parentaff2a473ec3c16396d6be9d61c5e5dc1201a725b (diff)
parent837ca176d1874273f3de615c75b506e1b1787a1b (diff)
downloadrtmux-fb23df679b31418dbef21bc7b98c891ee3a48d42.tar.gz
rtmux-fb23df679b31418dbef21bc7b98c891ee3a48d42.tar.bz2
rtmux-fb23df679b31418dbef21bc7b98c891ee3a48d42.zip
Merge branch 'obsd-master' into master
-rw-r--r--mode-tree.c2
-rw-r--r--options-table.c18
-rw-r--r--popup.c14
-rw-r--r--screen-write.c12
-rw-r--r--tmux.118
-rw-r--r--tmux.h3
-rw-r--r--window-tree.c2
7 files changed, 59 insertions, 10 deletions
diff --git a/mode-tree.c b/mode-tree.c
index c92f7cff..2d2d8d5c 100644
--- a/mode-tree.c
+++ b/mode-tree.c
@@ -747,7 +747,7 @@ mode_tree_draw(struct mode_tree_data *mtd)
mti = mti->parent;
screen_write_cursormove(&ctx, 0, h, 0);
- screen_write_box(&ctx, w, sy - h);
+ screen_write_box(&ctx, w, sy - h, NULL);
if (mtd->sort_list != NULL) {
xasprintf(&text, " %s (sort: %s%s)", mti->name,
diff --git a/options-table.c b/options-table.c
index 76c2b053..b63ae117 100644
--- a/options-table.c
+++ b/options-table.c
@@ -981,6 +981,24 @@ const struct options_table_entry options_table[] = {
.text = "The default colour palette for colours zero to 255."
},
+ { .name = "popup-style",
+ .type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_WINDOW,
+ .default_str = "default",
+ .flags = OPTIONS_TABLE_IS_STYLE,
+ .separator = ",",
+ .text = "Default style of popups."
+ },
+
+ { .name = "popup-border-style",
+ .type = OPTIONS_TABLE_STRING,
+ .scope = OPTIONS_TABLE_WINDOW,
+ .default_str = "default",
+ .flags = OPTIONS_TABLE_IS_STYLE,
+ .separator = ",",
+ .text = "Default style of popup borders."
+ },
+
{ .name = "remain-on-exit",
.type = OPTIONS_TABLE_CHOICE,
.scope = OPTIONS_TABLE_WINDOW|OPTIONS_TABLE_PANE,
diff --git a/popup.c b/popup.c
index 0edf76e4..7616d5ca 100644
--- a/popup.c
+++ b/popup.c
@@ -211,16 +211,22 @@ popup_draw_cb(struct client *c, void *data, struct screen_redraw_ctx *rctx)
u_int i, px = pd->px, py = pd->py;
struct colour_palette *palette = &pd->palette;
struct grid_cell gc;
+ struct grid_cell bgc;
+ struct options *o = c->session->curw->window->options;
screen_init(&s, pd->sx, pd->sy, 0);
screen_write_start(&ctx, &s);
screen_write_clearscreen(&ctx, 8);
+ memcpy(&bgc, &grid_default_cell, sizeof bgc);
+ style_apply(&bgc, o, "popup-border-style", NULL);
+ bgc.attr = 0;
+
if (pd->flags & POPUP_NOBORDER) {
screen_write_cursormove(&ctx, 0, 0, 0);
screen_write_fast_copy(&ctx, &pd->s, 0, 0, pd->sx, pd->sy);
} else if (pd->sx > 2 && pd->sy > 2) {
- screen_write_box(&ctx, pd->sx, pd->sy);
+ screen_write_box(&ctx, pd->sx, pd->sy, &bgc);
screen_write_cursormove(&ctx, 1, 1, 0);
screen_write_fast_copy(&ctx, &pd->s, 0, 0, pd->sx - 2,
pd->sy - 2);
@@ -228,8 +234,10 @@ popup_draw_cb(struct client *c, void *data, struct screen_redraw_ctx *rctx)
screen_write_stop(&ctx);
memcpy(&gc, &grid_default_cell, sizeof gc);
- gc.fg = pd->palette.fg;
- gc.bg = pd->palette.bg;
+ style_apply(&gc, o, "popup-style", NULL);
+ gc.attr = 0;
+ palette->fg = gc.fg;
+ palette->bg = gc.bg;
if (pd->md != NULL) {
c->overlay_check = menu_check_cb;
diff --git a/screen-write.c b/screen-write.c
index c09d09ab..e3b2b977 100644
--- a/screen-write.c
+++ b/screen-write.c
@@ -645,7 +645,7 @@ screen_write_menu(struct screen_write_ctx *ctx, struct menu *menu,
memcpy(&default_gc, &grid_default_cell, sizeof default_gc);
- screen_write_box(ctx, menu->width + 4, menu->count + 2);
+ screen_write_box(ctx, menu->width + 4, menu->count + 2, NULL);
screen_write_cursormove(ctx, cx + 2, cy, 0);
format_draw(ctx, &default_gc, menu->width, menu->title, NULL);
@@ -677,16 +677,20 @@ screen_write_menu(struct screen_write_ctx *ctx, struct menu *menu,
/* Draw a box on screen. */
void
-screen_write_box(struct screen_write_ctx *ctx, u_int nx, u_int ny)
+screen_write_box(struct screen_write_ctx *ctx, u_int nx, u_int ny,
+ const struct grid_cell *gcp)
{
struct screen *s = ctx->s;
- struct grid_cell gc;
+ struct grid_cell gc;
u_int cx, cy, i;
cx = s->cx;
cy = s->cy;
- memcpy(&gc, &grid_default_cell, sizeof gc);
+ if (gcp != NULL)
+ memcpy(&gc, gcp, sizeof gc);
+ else
+ memcpy(&gc, &grid_default_cell, sizeof gc);
gc.attr |= GRID_ATTR_CHARSET;
gc.flags |= GRID_FLAG_NOPALETTE;
diff --git a/tmux.1 b/tmux.1
index d349ae25..e9d5d572 100644
--- a/tmux.1
+++ b/tmux.1
@@ -4258,6 +4258,24 @@ see the
section.
Attributes are ignored.
.Pp
+.It Ic popup-style Ar style
+Set the popup style.
+For how to specify
+.Ar style ,
+see the
+.Sx STYLES
+section.
+Attributes are ignored.
+.Pp
+.It Ic popup-border-style Ar style
+Set the popup border style.
+For how to specify
+.Ar style ,
+see the
+.Sx STYLES
+section.
+Attributes are ignored.
+.Pp
.It Ic window-status-activity-style Ar style
Set status line style for windows with an activity alert.
For how to specify
diff --git a/tmux.h b/tmux.h
index f8b11e15..236a2676 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2700,7 +2700,8 @@ void screen_write_hline(struct screen_write_ctx *, u_int, int, int);
void screen_write_vline(struct screen_write_ctx *, u_int, int, int);
void screen_write_menu(struct screen_write_ctx *, struct menu *, int,
const struct grid_cell *);
-void screen_write_box(struct screen_write_ctx *, u_int, u_int);
+void screen_write_box(struct screen_write_ctx *, u_int, u_int,
+ const struct grid_cell *gc);
void screen_write_preview(struct screen_write_ctx *, struct screen *, u_int,
u_int);
void screen_write_backspace(struct screen_write_ctx *);
diff --git a/window-tree.c b/window-tree.c
index 4998e1aa..daa183f5 100644
--- a/window-tree.c
+++ b/window-tree.c
@@ -519,7 +519,7 @@ window_tree_draw_label(struct screen_write_ctx *ctx, u_int px, u_int py,
if (ox > 1 && ox + len < sx - 1 && sy >= 3) {
screen_write_cursormove(ctx, px + ox - 1, py + oy - 1, 0);
- screen_write_box(ctx, len + 2, 3);
+ screen_write_box(ctx, len + 2, 3, NULL);
}
screen_write_cursormove(ctx, px + ox, py + oy, 0);
screen_write_puts(ctx, gc, "%s", label);