This looks good now, thanks, although I will need to find some time to
play with it a bit. We still have the question of terminals without
BCE. You can try to make tmux itself support BCE if you like which would
be nice and have a bit of overlap with this diff, or add BCE support
back on top of this like you had before.
On Thu, Feb 19, 2015 at 11:26:58PM -0600, J Raynor wrote:
> I've attached a new patch. This patch:
>
> * Adds Thomas's fix for pane selection via the mouse
> * Gets rid of nflags in cmd_display_panes_exec
> * Fixes the usage of memcpy in window.c
> * Leaves tty_reset unchanged
> * Has the tty_cmd_* functions call tty_attributes instead of tty_reset
> * Includes updates to the man page
> diff --git a/cmd-display-panes.c b/cmd-display-panes.c
> index 9ce8971..2cc29e4 100644
> --- a/cmd-display-panes.c
> +++ b/cmd-display-panes.c
> @@ -18,18 +18,21 @@
>
> #include <sys/types.h>
>
> +#include <stdlib.h>
> +#include <string.h>
> +
> #include "tmux.h"
>
> /*
> - * Display panes on a client.
> + * Display panes on a client, or get/set pane default fg/bg colours.
> */
>
> enum cmd_retval cmd_display_panes_exec(struct cmd *, struct cmd_q *);
>
> const struct cmd_entry cmd_display_panes_entry = {
> "display-panes", "displayp",
> - "t:", 0, 0,
> - CMD_TARGET_CLIENT_USAGE,
> + "gt:P:", 0, 0,
> + "[-g] [-P style] " CMD_TARGET_CLIENT_USAGE,
> 0,
> cmd_display_panes_exec
> };
> @@ -37,13 +40,48 @@ const struct cmd_entry cmd_display_panes_entry = {
> enum cmd_retval
> cmd_display_panes_exec(struct cmd *self, struct cmd_q *cmdq)
> {
> - struct args *args = self->args;
> - struct client *c;
> + struct args *args = self->args;
> + struct client *c;
> + struct session *s;
> + struct winlink *wl;
> + struct window_pane *wp;
> + const char *str;
> +
> + if (!args_has(args, 'g') && !args_has(args, 'P')) {
> +
> + if ((c = cmd_find_client(cmdq, args_get(args, 't'), 0)) == NULL)
> + return (CMD_RETURN_ERROR);
> +
> + server_set_identify(c);
> +
> + return (CMD_RETURN_NORMAL);
> + }
> +
>
> - if ((c = cmd_find_client(cmdq, args_get(args, 't'), 0)) == NULL)
> + if ((wl = cmd_find_pane(cmdq, args_get(args, 't'), &s, &wp)) == NULL)
> return (CMD_RETURN_ERROR);
>
> - server_set_identify(c);
> + if (args_has(args, 'g')) {
> +
> + if (args_has(args, 'P')) {
> + cmdq_error(cmdq, "don't use -P with -g");
> + return (CMD_RETURN_ERROR);
> + }
> +
> + cmdq_print(cmdq, "%s", style_tostring(&wp->colgc));
> +
> + return (CMD_RETURN_NORMAL);
> + }
> +
> + if (args_has(args, 'P')) {
> + str = args_get(args, 'P');
> + if (style_parse(&grid_default_cell, &wp->colgc, str) == -1) {
> + cmdq_error(cmdq, "bad style: %s", str);
> + return (CMD_RETURN_ERROR);
> + }
> +
> + wp->flags |= PANE_REDRAW;
> + }
>
> return (CMD_RETURN_NORMAL);
> }
> diff --git a/options-table.c b/options-table.c
> index 2bcf29b..d7057bf 100644
> --- a/options-table.c
> +++ b/options-table.c
> @@ -667,6 +667,16 @@ const struct options_table_entry window_options_table[]
> = {
> .default_num = 0 /* overridden in main() */
> },
>
> + { .name = "window-active-style",
> + .type = OPTIONS_TABLE_STYLE,
> + .default_str = "default"
> + },
> +
> + { .name = "window-style",
> + .type = OPTIONS_TABLE_STYLE,
> + .default_str = "default"
> + },
> +
> { .name = "window-status-activity-attr",
> .type = OPTIONS_TABLE_ATTRIBUTES,
> .default_num = GRID_ATTR_REVERSE,
> diff --git a/screen-redraw.c b/screen-redraw.c
> index c2b2ece..c718609 100644
> --- a/screen-redraw.c
> +++ b/screen-redraw.c
> @@ -266,7 +266,7 @@ screen_redraw_pane(struct client *c, struct window_pane
> *wp)
> yoff++;
>
> for (i = 0; i < wp->sy; i++)
> - tty_draw_line(&c->tty, wp->screen, i, wp->xoff, yoff);
> + tty_draw_line(&c->tty, wp->screen, i, wp->xoff, yoff, wp);
> tty_reset(&c->tty);
> }
>
> @@ -323,9 +323,9 @@ screen_redraw_draw_borders(struct client *c, int status,
> u_int top)
> small && i > msgx && j == msgy)
> continue;
> if (screen_redraw_check_active(i, j, type, w, wp))
> - tty_attributes(tty, &active_gc);
> + tty_attributes(tty, &active_gc, wp);
> else
> - tty_attributes(tty, &other_gc);
> + tty_attributes(tty, &other_gc, wp);
> tty_cursor(tty, i, top + j);
> tty_putc(tty, CELL_BORDERS[type]);
> }
> @@ -333,7 +333,7 @@ screen_redraw_draw_borders(struct client *c, int status,
> u_int top)
>
> if (small) {
> memcpy(&msg_gc, &grid_default_cell, sizeof msg_gc);
> - tty_attributes(tty, &msg_gc);
> + tty_attributes(tty, &msg_gc, wp);
> tty_cursor(tty, msgx, msgy);
> tty_puts(tty, msg);
> }
> @@ -354,7 +354,7 @@ screen_redraw_draw_panes(struct client *c, u_int top)
> continue;
> s = wp->screen;
> for (i = 0; i < wp->sy; i++)
> - tty_draw_line(tty, s, i, wp->xoff, top + wp->yoff);
> + tty_draw_line(tty, s, i, wp->xoff, top + wp->yoff, wp);
> if (c->flags & CLIENT_IDENTIFY)
> screen_redraw_draw_number(c, wp);
> }
> @@ -367,9 +367,9 @@ screen_redraw_draw_status(struct client *c, u_int top)
> struct tty *tty = &c->tty;
>
> if (top)
> - tty_draw_line(tty, &c->status, 0, 0, 0);
> + tty_draw_line(tty, &c->status, 0, 0, 0, NULL);
> else
> - tty_draw_line(tty, &c->status, 0, 0, tty->sy - 1);
> + tty_draw_line(tty, &c->status, 0, 0, tty->sy - 1, NULL);
> }
>
> /* Draw number on a pane. */
> @@ -411,7 +411,7 @@ screen_redraw_draw_number(struct client *c, struct
> window_pane *wp)
> colour_set_bg(&gc, active_colour);
> else
> colour_set_bg(&gc, colour);
> - tty_attributes(tty, &gc);
> + tty_attributes(tty, &gc, wp);
> for (ptr = buf; *ptr != '\0'; ptr++) {
> if (*ptr < '0' || *ptr > '9')
> continue;
> @@ -438,7 +438,7 @@ draw_text:
> colour_set_fg(&gc, active_colour);
> else
> colour_set_fg(&gc, colour);
> - tty_attributes(tty, &gc);
> + tty_attributes(tty, &gc, wp);
> tty_puts(tty, buf);
>
> tty_cursor(tty, 0, 0);
> diff --git a/server-client.c b/server-client.c
> index 3ca9907..f234f50 100644
> --- a/server-client.c
> +++ b/server-client.c
> @@ -328,8 +328,7 @@ server_client_check_mouse(struct client *c, struct
> window_pane *wp)
> if (options_get_number(oo, "mouse-select-pane") &&
> (m->event == MOUSE_EVENT_DOWN || m->event == MOUSE_EVENT_WHEEL)) {
> window_set_active_at(wp->window, m->x, m->y);
> - server_status_window(wp->window);
> - server_redraw_window_borders(wp->window);
> + server_redraw_window(wp->window);
> wp = wp->window->active; /* may have changed */
> }
>
> diff --git a/tmux.1 b/tmux.1
> index f615dd0..656a2a7 100644
> --- a/tmux.1
> +++ b/tmux.1
> @@ -1305,9 +1305,14 @@ flag, see the
> .Sx FORMATS
> section.
> This command works only if at least one client is attached.
> -.It Ic display-panes Op Fl t Ar target-client
> +.It Xo Ic display-panes
> +.Op Fl g
> +.Op Fl P Ar style
> +.Op Fl t Ar target-client
> +.Xc
> .D1 (alias: Ic displayp )
> -Display a visible indicator of each pane shown by
> +If no flags have been specified, display a visible indicator of
> +each pane shown by
> .Ar target-client .
> See the
> .Ic display-panes-time ,
> @@ -1320,6 +1325,15 @@ While the indicator is on screen, a pane may be
> selected with the
> to
> .Ql 9
> keys.
> +.Pp
> +With
> +.Fl P,
> +a style argument can be passed to set a pane's foreground and
> +background colour. The style will override any style that
> +has been set with the window-style or window-active-style options.
> +The
> +.Fl g
> +flag will show what colour style has been set for the pane.
> .It Xo Ic find-window
> .Op Fl CNT
> .Op Fl F Ar format
> @@ -2928,6 +2942,15 @@ Instructs
> .Nm
> to expect UTF-8 sequences to appear in this window.
> .Pp
> +.It Ic window-active-style Ar style
> +Set the default foreground and background colours for the active pane in the
> +window via a style argument.
> +For how to specify
> +.Ar style ,
> +see the
> +.Ic message-command-style
> +option.
> +.Pp
> .It Ic window-status-activity-style Ar style
> Set status line style for windows with an activity alert.
> For how to specify
> @@ -2985,6 +3008,14 @@ see the
> .Ic message-command-style
> option.
> .Pp
> +.It Ic window-style Ar style
> +Set the default window foreground and background colours via a style
> argument.
> +For how to specify
> +.Ar style ,
> +see the
> +.Ic message-command-style
> +option.
> +.Pp
> .It Xo Ic xterm-keys
> .Op Ic on | off
> .Xc
> diff --git a/tmux.h b/tmux.h
> index e296ac7..4751cbd 100644
> --- a/tmux.h
> +++ b/tmux.h
> @@ -900,6 +900,9 @@ struct window_pane {
>
> struct input_ctx ictx;
>
> + /* Default fg/bg grid cell colours */
> + struct grid_cell colgc;
> +
> int pipe_fd;
> struct bufferevent *pipe_event;
> size_t pipe_off;
> @@ -1604,7 +1607,8 @@ void environ_push(struct environ *);
> /* tty.c */
> void tty_init_termios(int, struct termios *, struct bufferevent *);
> void tty_raw(struct tty *, const char *);
> -void tty_attributes(struct tty *, const struct grid_cell *);
> +void tty_attributes(struct tty *, const struct grid_cell *,
> + const struct window_pane *);
> void tty_reset(struct tty *);
> void tty_region_pane(struct tty *, const struct tty_ctx *, u_int, u_int);
> void tty_region(struct tty *, u_int, u_int);
> @@ -1628,7 +1632,8 @@ void tty_stop_tty(struct tty *);
> void tty_set_title(struct tty *, const char *);
> void tty_update_mode(struct tty *, int, struct screen *);
> void tty_force_cursor_colour(struct tty *, const char *);
> -void tty_draw_line(struct tty *, struct screen *, u_int, u_int, u_int);
> +void tty_draw_line(struct tty *, struct screen *, u_int, u_int, u_int,
> + const struct window_pane *);
> int tty_open(struct tty *, char **);
> void tty_close(struct tty *);
> void tty_free(struct tty *);
> diff --git a/tty.c b/tty.c
> index 1bb8981..257ebf8 100644
> --- a/tty.c
> +++ b/tty.c
> @@ -47,7 +47,9 @@ void tty_redraw_region(struct tty *, const struct
> tty_ctx *);
> void tty_emulate_repeat(
> struct tty *, enum tty_code_code, enum tty_code_code, u_int);
> void tty_repeat_space(struct tty *, u_int);
> -void tty_cell(struct tty *, const struct grid_cell *);
> +void tty_cell(struct tty *, const struct grid_cell *,
> + const struct window_pane *);
> +void tty_default_colours(struct grid_cell *, const struct window_pane *);
>
> #define tty_use_acs(tty) \
> (tty_term_has((tty)->term, TTYC_ACSC) && !((tty)->flags & TTY_UTF8))
> @@ -604,15 +606,16 @@ tty_redraw_region(struct tty *tty, const struct tty_ctx
> *ctx)
>
> if (ctx->ocy < ctx->orupper || ctx->ocy > ctx->orlower) {
> for (i = ctx->ocy; i < screen_size_y(s); i++)
> - tty_draw_line(tty, s, i, ctx->xoff, ctx->yoff);
> + tty_draw_line(tty, s, i, ctx->xoff, ctx->yoff, wp);
> } else {
> for (i = ctx->orupper; i <= ctx->orlower; i++)
> - tty_draw_line(tty, s, i, ctx->xoff, ctx->yoff);
> + tty_draw_line(tty, s, i, ctx->xoff, ctx->yoff, wp);
> }
> }
>
> void
> -tty_draw_line(struct tty *tty, struct screen *s, u_int py, u_int ox, u_int
> oy)
> +tty_draw_line(struct tty *tty, struct screen *s, u_int py, u_int ox, u_int
> oy,
> + const struct window_pane *wp)
> {
> const struct grid_cell *gc;
> struct grid_line *gl;
> @@ -650,16 +653,16 @@ tty_draw_line(struct tty *tty, struct screen *s, u_int
> py, u_int ox, u_int oy)
> ~(GRID_FLAG_FG256|GRID_FLAG_BG256);
> tmpgc.flags |= s->sel.cell.flags &
> (GRID_FLAG_FG256|GRID_FLAG_BG256);
> - tty_cell(tty, &tmpgc);
> + tty_cell(tty, &tmpgc, wp);
> } else
> - tty_cell(tty, gc);
> + tty_cell(tty, gc, wp);
> }
>
> if (sx >= tty->sx) {
> tty_update_mode(tty, tty->mode, s);
> return;
> }
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_cursor(tty, ox + sx, oy + py);
> if (sx != screen_size_x(s) && ox + screen_size_x(s) >= tty->sx &&
> @@ -713,11 +716,12 @@ tty_cmd_insertcharacter(struct tty *tty, const struct
> tty_ctx *ctx)
> struct window_pane *wp = ctx->wp;
>
> if (!tty_pane_full_width(tty, ctx)) {
> - tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff);
> + tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff,
> + wp);
> return;
> }
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
>
> @@ -725,7 +729,8 @@ tty_cmd_insertcharacter(struct tty *tty, const struct
> tty_ctx *ctx)
> tty_term_has(tty->term, TTYC_ICH1))
> tty_emulate_repeat(tty, TTYC_ICH, TTYC_ICH1, ctx->num);
> else
> - tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff);
> + tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff,
> + wp);
> }
>
> void
> @@ -736,11 +741,12 @@ tty_cmd_deletecharacter(struct tty *tty, const struct
> tty_ctx *ctx)
> if (!tty_pane_full_width(tty, ctx) ||
> (!tty_term_has(tty->term, TTYC_DCH) &&
> !tty_term_has(tty->term, TTYC_DCH1))) {
> - tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff);
> + tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff,
> + wp);
> return;
> }
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
>
> @@ -754,7 +760,7 @@ tty_cmd_clearcharacter(struct tty *tty, const struct
> tty_ctx *ctx)
> {
> u_int i;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, ctx->wp);
>
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
>
> @@ -776,7 +782,7 @@ tty_cmd_insertline(struct tty *tty, const struct tty_ctx
> *ctx)
> return;
> }
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, ctx->wp);
>
> tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower);
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
> @@ -794,7 +800,7 @@ tty_cmd_deleteline(struct tty *tty, const struct tty_ctx
> *ctx)
> return;
> }
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, ctx->wp);
>
> tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower);
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
> @@ -808,7 +814,7 @@ tty_cmd_clearline(struct tty *tty, const struct tty_ctx
> *ctx)
> struct window_pane *wp = ctx->wp;
> struct screen *s = wp->screen;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_cursor_pane(tty, ctx, 0, ctx->ocy);
>
> @@ -824,7 +830,7 @@ tty_cmd_clearendofline(struct tty *tty, const struct
> tty_ctx *ctx)
> struct window_pane *wp = ctx->wp;
> struct screen *s = wp->screen;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
>
> @@ -837,7 +843,7 @@ tty_cmd_clearendofline(struct tty *tty, const struct
> tty_ctx *ctx)
> void
> tty_cmd_clearstartofline(struct tty *tty, const struct tty_ctx *ctx)
> {
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, ctx->wp);
>
> if (ctx->xoff == 0 && tty_term_has(tty->term, TTYC_EL1)) {
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
> @@ -861,7 +867,7 @@ tty_cmd_reverseindex(struct tty *tty, const struct
> tty_ctx *ctx)
> return;
> }
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, ctx->wp);
>
> tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower);
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper);
> @@ -894,7 +900,7 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx
> *ctx)
> if (ctx->num && !(tty->term->flags & TERM_EARLYWRAP))
> return;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower);
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
> @@ -909,7 +915,7 @@ tty_cmd_clearendofscreen(struct tty *tty, const struct
> tty_ctx *ctx)
> struct screen *s = wp->screen;
> u_int i, j;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1);
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
> @@ -942,7 +948,7 @@ tty_cmd_clearstartofscreen(struct tty *tty, const struct
> tty_ctx *ctx)
> struct screen *s = wp->screen;
> u_int i, j;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1);
> tty_cursor_pane(tty, ctx, 0, 0);
> @@ -969,7 +975,7 @@ tty_cmd_clearscreen(struct tty *tty, const struct tty_ctx
> *ctx)
> struct screen *s = wp->screen;
> u_int i, j;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1);
> tty_cursor_pane(tty, ctx, 0, 0);
> @@ -997,7 +1003,7 @@ tty_cmd_alignmenttest(struct tty *tty, const struct
> tty_ctx *ctx)
> struct screen *s = wp->screen;
> u_int i, j;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, wp);
>
> tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1);
>
> @@ -1038,12 +1044,12 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx
> *ctx)
> */
> cx = screen_size_x(s) -
> grid_cell_width(&ctx->last_cell);
> tty_cursor_pane(tty, ctx, cx, ctx->ocy);
> - tty_cell(tty, &ctx->last_cell);
> + tty_cell(tty, &ctx->last_cell, wp);
> }
> } else
> tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy);
>
> - tty_cell(tty, ctx->cell);
> + tty_cell(tty, ctx->cell, wp);
> }
>
> void
> @@ -1055,7 +1061,7 @@ tty_cmd_utf8character(struct tty *tty, const struct
> tty_ctx *ctx)
> * Cannot rely on not being a partial character, so just redraw the
> * whole line.
> */
> - tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff);
> + tty_draw_line(tty, wp->screen, ctx->ocy, ctx->xoff, ctx->yoff, wp);
> }
>
> void
> @@ -1088,12 +1094,13 @@ tty_cmd_rawstring(struct tty *tty, const struct
> tty_ctx *ctx)
> tty->cx = tty->cy = UINT_MAX;
> tty->rupper = tty->rlower = UINT_MAX;
>
> - tty_reset(tty);
> + tty_attributes(tty, &grid_default_cell, ctx->wp);
> tty_cursor(tty, 0, 0);
> }
>
> void
> -tty_cell(struct tty *tty, const struct grid_cell *gc)
> +tty_cell(struct tty *tty, const struct grid_cell *gc,
> + const struct window_pane *wp)
> {
> struct utf8_data ud;
> u_int i;
> @@ -1108,7 +1115,7 @@ tty_cell(struct tty *tty, const struct grid_cell *gc)
> return;
>
> /* Set the attributes. */
> - tty_attributes(tty, gc);
> + tty_attributes(tty, gc, wp);
>
> /* Get the cell and if ASCII write with putc to do ACS translation. */
> grid_cell_get(gc, &ud);
> @@ -1312,12 +1319,14 @@ out:
> }
>
> void
> -tty_attributes(struct tty *tty, const struct grid_cell *gc)
> +tty_attributes(struct tty *tty, const struct grid_cell *gc,
> + const struct window_pane *wp)
> {
> struct grid_cell *tc = &tty->cell, gc2;
> u_char changed;
>
> memcpy(&gc2, gc, sizeof gc2);
> + tty_default_colours(&gc2, wp);
>
> /*
> * If no setab, try to use the reverse attribute as a best-effort for a
> @@ -1614,3 +1623,44 @@ tty_bell(struct tty *tty)
> {
> tty_putcode(tty, TTYC_BEL);
> }
> +
> +void
> +tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
> +{
> + const struct grid_cell *agc, *pgc, *wgc;
> +
> + if (wp == NULL)
> + return;
> +
> + pgc = &wp->colgc;
> + agc = options_get_style(&wp->window->options, "window-active-style");
> + wgc = options_get_style(&wp->window->options, "window-style");
> +
> + if (gc->fg == 8 && !(gc->flags & GRID_FLAG_FG256)) {
> + if (pgc->fg != 8 || (pgc->flags & GRID_FLAG_FG256)) {
> + gc->fg = pgc->fg;
> + gc->flags |= (pgc->flags & GRID_FLAG_FG256);
> + } else if (wp == wp->window->active &&
> + (agc->fg != 8 || (agc->flags & GRID_FLAG_FG256))) {
> + gc->fg = agc->fg;
> + gc->flags |= (agc->flags & GRID_FLAG_FG256);
> + } else {
> + gc->fg = wgc->fg;
> + gc->flags |= (wgc->flags & GRID_FLAG_FG256);
> + }
> + }
> +
> + if (gc->bg == 8 && !(gc->flags & GRID_FLAG_BG256)) {
> + if (pgc->bg != 8 || (pgc->flags & GRID_FLAG_BG256)) {
> + gc->bg = pgc->bg;
> + gc->flags |= (pgc->flags & GRID_FLAG_BG256);
> + } else if (wp == wp->window->active &&
> + (agc->bg != 8 || (agc->flags & GRID_FLAG_BG256))) {
> + gc->bg = agc->bg;
> + gc->flags |= (agc->flags & GRID_FLAG_BG256);
> + } else {
> + gc->bg = wgc->bg;
> + gc->flags |= (wgc->flags & GRID_FLAG_BG256);
> + }
> + }
> +}
> diff --git a/window.c b/window.c
> index fff2cfc..7a06470 100644
> --- a/window.c
> +++ b/window.c
> @@ -704,6 +704,8 @@ window_pane_create(struct window *w, u_int sx, u_int sy,
> u_int hlimit)
>
> wp->saved_grid = NULL;
>
> + memcpy(&wp->colgc, &grid_default_cell, sizeof wp->colgc);
> +
> screen_init(&wp->base, sx, sy, hlimit);
> wp->screen = &wp->base;
>
------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk
_______________________________________________
tmux-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users