summaryrefslogtreecommitdiffstats
path: root/tty.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-12-14 21:33:38 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-12-14 21:33:38 +0000
commit0dda866679009385d4973d18a123943f606c49ad (patch)
treeb36f136aafdf6be666cb7b6a14bb7ec5b599aa59 /tty.c
parent84d2e6c8a0f7c501c3d326eb2bcbbbd8caa1658b (diff)
Pass through the aixterm bright colours if the terminal supports them (>= 16
colours).
Diffstat (limited to 'tty.c')
-rw-r--r--tty.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/tty.c b/tty.c
index 32ee197c..c06a4dde 100644
--- a/tty.c
+++ b/tty.c
@@ -1231,6 +1231,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
@@ -1292,6 +1293,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) {
@@ -1310,6 +1312,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);
@@ -1325,6 +1339,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) {
@@ -1343,6 +1358,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);