summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2017-01-12 00:19:33 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2017-01-12 00:19:33 +0000
commitcd22049551fbe5c7971834224718db85ded3c513 (patch)
tree9c51882901a218415d94156978905630cfcd414a
parent77710e86a4810fdf477b4a175afd9789726cbabd (diff)
Fix setting the palette of aixterm colours (90-97).
-rw-r--r--usr.bin/tmux/screen-write.c4
-rw-r--r--usr.bin/tmux/tmux.h8
-rw-r--r--usr.bin/tmux/tty.c23
-rw-r--r--usr.bin/tmux/window.c30
4 files changed, 43 insertions, 22 deletions
diff --git a/usr.bin/tmux/screen-write.c b/usr.bin/tmux/screen-write.c
index 2f53521cee3..c54fa0854a1 100644
--- a/usr.bin/tmux/screen-write.c
+++ b/usr.bin/tmux/screen-write.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen-write.c,v 1.102 2017/01/05 09:07:16 nicm Exp $ */
+/* $OpenBSD: screen-write.c,v 1.103 2017/01/12 00:19:32 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1049,7 +1049,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
width = gc->data.width;
/*
- * If this is a wide character and there is no room on the screen, for
+ * If this is a wide character and there is no room on the screen for
* the entire character, don't print it.
*/
if (!(s->mode & MODE_WRAP) && (width > 1 &&
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index d514e7f10b8..b5f37bffd86 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.690 2017/01/11 16:09:57 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.691 2017/01/12 00:19:32 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -860,11 +860,6 @@ struct window_pane {
TAILQ_HEAD(window_panes, window_pane);
RB_HEAD(window_pane_tree, window_pane);
-#define WINDOW_PANE_PALETTE_HAS(wp, c) \
- ((wp) != NULL && (wp)->palette != NULL && \
- ((c) < 0x100 || (c) & COLOUR_FLAG_256) && \
- (wp)->palette[(c) & 0xff] != 0)
-
/* Window structure. */
struct window {
u_int id;
@@ -2157,6 +2152,7 @@ void window_set_name(struct window *, const char *);
void window_remove_ref(struct window *);
void winlink_clear_flags(struct winlink *);
int winlink_shuffle_up(struct session *, struct winlink *);
+int window_pane_get_palette(const struct window_pane *, int);
/* layout.c */
u_int layout_count_cells(struct layout_cell *);
diff --git a/usr.bin/tmux/tty.c b/usr.bin/tmux/tty.c
index 900fd242f20..6093f9ccbec 100644
--- a/usr.bin/tmux/tty.c
+++ b/usr.bin/tmux/tty.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.222 2017/01/11 23:10:04 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.223 2017/01/12 00:19:32 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1609,11 +1609,12 @@ tty_check_fg(struct tty *tty, const struct window_pane *wp,
{
u_char r, g, b;
u_int colours;
+ int c;
/* Perform substitution if this pane has a palette */
if ((~gc->flags & GRID_FLAG_NOPALETTE) &&
- gc->fg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->fg))
- gc->fg = wp->palette[gc->fg & 0xff];
+ (c = window_pane_get_palette(wp, gc->fg)) != -1)
+ gc->fg = c;
/* Is this a 24-bit colour? */
if (gc->fg & COLOUR_FLAG_RGB) {
@@ -1657,11 +1658,12 @@ tty_check_bg(struct tty *tty, const struct window_pane *wp,
{
u_char r, g, b;
u_int colours;
+ int c;
/* Perform substitution if this pane has a palette */
if ((~gc->flags & GRID_FLAG_NOPALETTE) &&
- gc->bg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->bg))
- gc->bg = wp->palette[gc->bg & 0xff];
+ (c = window_pane_get_palette(wp, gc->bg)) != -1)
+ gc->bg = c;
/* Is this a 24-bit colour? */
if (gc->bg & COLOUR_FLAG_RGB) {
@@ -1817,6 +1819,7 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
struct window *w = wp->window;
struct options *oo = w->options;
const struct grid_cell *agc, *pgc, *wgc;
+ int c;
if (w->flags & WINDOW_STYLECHANGED) {
w->flags &= ~WINDOW_STYLECHANGED;
@@ -1838,8 +1841,9 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
else
gc->fg = wgc->fg;
- if (gc->fg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->fg))
- gc->fg = wp->palette[gc->fg & 0xff];
+ if (gc->fg != 8 &&
+ (c = window_pane_get_palette(wp, gc->fg)) != -1)
+ gc->fg = c;
}
if (gc->bg == 8) {
@@ -1850,8 +1854,9 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
else
gc->bg = wgc->bg;
- if (gc->bg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->bg))
- gc->bg = wp->palette[gc->bg & 0xff];
+ if (gc->bg != 8 &&
+ (c = window_pane_get_palette(wp, gc->bg)) != -1)
+ gc->bg = c;
}
}
diff --git a/usr.bin/tmux/window.c b/usr.bin/tmux/window.c
index 68f7dad2efa..53cefa34eba 100644
--- a/usr.bin/tmux/window.c
+++ b/usr.bin/tmux/window.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: window.c,v 1.177 2017/01/07 15:28:13 nicm Exp $ */
+/* $OpenBSD: window.c,v 1.178 2017/01/12 00:19:32 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -464,12 +464,12 @@ window_redraw_active_switch(struct window *w, struct window_pane *wp)
* If the now active or inactive pane do not have a custom style or if
* the palette is different, they need to be redrawn.
*/
- if (WINDOW_PANE_PALETTE_HAS(w->active, w->active->colgc.fg) ||
- WINDOW_PANE_PALETTE_HAS(w->active, w->active->colgc.bg) ||
+ if (window_pane_get_palette(w->active, w->active->colgc.fg) != -1 ||
+ window_pane_get_palette(w->active, w->active->colgc.bg) != -1 ||
style_equal(&grid_default_cell, &w->active->colgc))
w->active->flags |= PANE_REDRAW;
- if (WINDOW_PANE_PALETTE_HAS(wp, wp->colgc.fg) ||
- WINDOW_PANE_PALETTE_HAS(wp, wp->colgc.bg) ||
+ if (window_pane_get_palette(wp, wp->colgc.fg) != -1 ||
+ window_pane_get_palette(wp, wp->colgc.bg) != -1 ||
style_equal(&grid_default_cell, &wp->colgc))
wp->flags |= PANE_REDRAW;
}
@@ -1517,3 +1517,23 @@ winlink_shuffle_up(struct session *s, struct winlink *wl)
return (idx);
}
+
+int
+window_pane_get_palette(const struct window_pane *wp, int c)
+{
+ int new;
+
+ if (wp == NULL || wp->palette == NULL)
+ return (-1);
+
+ new = -1;
+ if (c < 8)
+ new = wp->palette[c];
+ else if (c >= 90 && c <= 97)
+ new = wp->palette[7 + c - 90];
+ else if (c & COLOUR_FLAG_256)
+ new = wp->palette[c & ~COLOUR_FLAG_256];
+ if (new == 0)
+ return (-1);
+ return (new);
+}