diff --git a/layout.c b/layout.c index 646d1bd9..cfa34b9e 100644 --- a/layout.c +++ b/layout.c @@ -53,6 +53,7 @@ layout_create_cell(struct layout_cell *lcparent) lc->yoff = UINT_MAX; lc->wp = NULL; + lc->lastwp = NULL; return (lc); } diff --git a/style.c b/style.c index 97d5576e..99744086 100644 --- a/style.c +++ b/style.c @@ -203,8 +203,14 @@ style_apply(struct grid_cell *gc, struct options *oo, const char *name) memcpy(gc, &grid_default_cell, sizeof *gc); gcp = options_get_style(oo, name); - colour_set_fg(gc, gcp->fg); - colour_set_bg(gc, gcp->bg); + if (gcp->flags & GRID_FLAG_FG256) + colour_set_fg(gc, gcp->fg | 0x100); + else + colour_set_fg(gc, gcp->fg); + if (gcp->flags & GRID_FLAG_BG256) + colour_set_bg(gc, gcp->bg | 0x100); + else + colour_set_bg(gc, gcp->bg); gc->attr |= gcp->attr; } @@ -215,10 +221,18 @@ style_apply_update(struct grid_cell *gc, struct options *oo, const char *name) struct grid_cell *gcp; gcp = options_get_style(oo, name); - if (gcp->fg != 8) - colour_set_fg(gc, gcp->fg); - if (gcp->bg != 8) - colour_set_bg(gc, gcp->bg); + if (gcp->fg != 8) { + if (gcp->flags & GRID_FLAG_FG256) + colour_set_fg(gc, gcp->fg | 0x100); + else + colour_set_fg(gc, gcp->fg); + } + if (gcp->bg != 8) { + if (gcp->flags & GRID_FLAG_BG256) + colour_set_bg(gc, gcp->bg | 0x100); + else + colour_set_bg(gc, gcp->bg); + } if (gcp->attr != 0) gc->attr |= gcp->attr; } diff --git a/window.c b/window.c index 858463cf..f41b58d0 100644 --- a/window.c +++ b/window.c @@ -407,8 +407,9 @@ window_pane_active_set(struct window_pane *wp, struct window_pane *nextwp) * Previously active pane, if any, must not be the same as the source * pane. */ - if (nextwp->layout_cell->parent != NULL) { - lastwp = nextwp->layout_cell->parent->lastwp; + lc = nextwp->layout_cell->parent; + if (lc != NULL && lc->lastwp != NULL) { + lastwp = lc->lastwp; if (lastwp != wp && window_pane_visible(lastwp)) return (lastwp); }