aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Cunha <tcunha@gmx.com>2009-12-16 01:13:09 +0000
committerTiago Cunha <tcunha@gmx.com>2009-12-16 01:13:09 +0000
commit99075aaa72210e7e331d18486a045e9a82756d33 (patch)
tree7aae1a8fc275928961300e9e411db03b973682dc
parentde15f2b5673b2499ef576aa9a361a6fb42b18f9e (diff)
downloadrtmux-99075aaa72210e7e331d18486a045e9a82756d33.tar.gz
rtmux-99075aaa72210e7e331d18486a045e9a82756d33.tar.bz2
rtmux-99075aaa72210e7e331d18486a045e9a82756d33.zip
Sync OpenBSD patchset 589:
Pass through the aixterm bright colours if the terminal supports them (>= 16 colours).
-rw-r--r--input.c8
-rw-r--r--tty.c29
2 files changed, 31 insertions, 6 deletions
diff --git a/input.c b/input.c
index 71e0ba34..a918bb74 100644
--- a/input.c
+++ b/input.c
@@ -1,4 +1,4 @@
-/* $Id: input.c,v 1.104 2009-12-04 22:14:47 tcunha Exp $ */
+/* $Id: input.c,v 1.105 2009-12-16 01:13:09 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -1481,8 +1481,7 @@ input_handle_sequence_sgr(struct input_ctx *ictx)
case 95:
case 96:
case 97:
- gc->flags |= GRID_FLAG_FG256;
- gc->fg = m - 82;
+ gc->fg = m;
break;
case 100:
case 101:
@@ -1492,8 +1491,7 @@ input_handle_sequence_sgr(struct input_ctx *ictx)
case 105:
case 106:
case 107:
- gc->flags |= GRID_FLAG_BG256;
- gc->bg = m - 92;
+ gc->bg = m;
break;
}
}
diff --git a/tty.c b/tty.c
index 584b96e6..4b9d429c 100644
--- a/tty.c
+++ b/tty.c
@@ -1,4 +1,4 @@
-/* $Id: tty.c,v 1.182 2009-12-04 22:17:26 tcunha Exp $ */
+/* $Id: tty.c,v 1.183 2009-12-16 01:13:09 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -1236,6 +1236,7 @@ tty_colours(struct tty *tty, const struct grid_cell *gc, u_char *attr)
if (fg == tc->fg && bg == tc->bg &&
((flags ^ tc->flags) & (GRID_FLAG_FG256|GRID_FLAG_BG256)) == 0)
return;
+ log_debug("fg was %hhu, now %hhu", tc->fg, fg);
/*
* Is either the default colour? This is handled specially because the
@@ -1297,6 +1298,7 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc, u_char *attr)
{
struct grid_cell *tc = &tty->cell;
u_char fg = gc->fg;
+ char s[32];
/* Is this a 256-colour colour? */
if (gc->flags & GRID_FLAG_FG256) {
@@ -1315,6 +1317,18 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc, u_char *attr)
tty_reset(tty); /* turn off bold */
}
+ /* Is this an aixterm bright colour? */
+ if (fg >= 90 && fg <= 97) {
+ /* 16 colour terminals or above only. */
+ if (tty_term_number(tty->term, TTYC_COLORS) >= 16) {
+ xsnprintf(s, sizeof s, "\033[%dm", fg);
+ tty_puts(tty, s);
+ goto save_fg;
+ }
+ fg -= 90;
+ (*attr) |= GRID_ATTR_BRIGHT;
+ }
+
/* Otherwise set the foreground colour. */
tty_putcode1(tty, TTYC_SETAF, fg);
@@ -1330,6 +1344,7 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc)
{
struct grid_cell *tc = &tty->cell;
u_char bg = gc->bg;
+ char s[32];
/* Is this a 256-colour colour? */
if (gc->flags & GRID_FLAG_BG256) {
@@ -1348,6 +1363,18 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc)
bg &= 7;
}
+ /* Is this an aixterm bright colour? */
+ if (bg >= 100 && bg <= 107) {
+ /* 16 colour terminals or above only. */
+ if (tty_term_number(tty->term, TTYC_COLORS) >= 16) {
+ xsnprintf(s, sizeof s, "\033[%dm", bg);
+ tty_puts(tty, s);
+ goto save_bg;
+ }
+ bg -= 100;
+ /* no such thing as a bold background */
+ }
+
/* Otherwise set the background colour. */
tty_putcode1(tty, TTYC_SETAB, bg);