I'd rather not translate aixterm colours on terminals that support them: - They are fewer bytes than the 256 colour equivalents.
- We can't predict what configuration options terminals have - some may have the ability to alter the palette for aixterm colours independent of the 256 colour palette. I'd rather they were passed through unaltered except on 8 colour terminals. On Wed, Feb 08, 2012 at 10:26:30PM -0500, Peter Lustig wrote: > On 2/5/2012 5:55 PM, Peter Lustig wrote: > >On 2/4/2012 9:56 PM, Peter Lustig wrote: > >>On 1/22/2012 3:44 AM, Nicholas Marriott wrote: > >>>IIRC I sent some comments and heard nothing more. > >>> > >>> > >>>On Sat, Jan 21, 2012 at 10:50:04PM -0500, Peter Lustig wrote: > >>>>Sorry to resurrect an old thread. > >>>> > >>>>Does anyone know what became of this patch? I found no more > >>>>discussion > >>>>of it after this thread, and see no traces of it in the trunk. > >>>> > >>>>------------------------------------------------------------------------------ > >>>> > >>>>Try before you buy = See our experts in action! > >>>>The most comprehensive online learning library for Microsoft > >>>>developers > >>>>is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, > >>>>CSS3, MVC3, > >>>>Metro Style Apps, more. Free future releases when you subscribe now! > >>>>http://p.sf.net/sfu/learndevnow-dev2 > >>>>_______________________________________________ > >>>>tmux-users mailing list > >>>>tmux-users@lists.sourceforge.net > >>>>https://lists.sourceforge.net/lists/listinfo/tmux-users > >>I'd like to pick up where Stephen Prater left off on this > >>effort. Here is a patch to "tty.c" that resolves the original > >>problem while incorporating the recommendations you made back > >>then. Let me know if there are any issues with it, and I'll be > >>glad to fix them. > >My bad. Just found a bug in the patch I submitted: on line 156 > >'GRID_FLAG_FG256' should be 'GRID_FLAG_BG256'. Here is the fixed > >version. > Here's another iteration of the patch to improve support for aixterm > (SGR 90-97 and 100-107) colours. The old behavior of > 'down-converting' the colours to their ANSI equivalents (with the > bold bit set) has been kept for 8-colour terminals. However, for > 256/88-colour terminals, the colours are now translated to their > direct xterm-256-colour analogues (e.g. '\e[91m' maps to > '\e[38;5;8m', with TERM='screen-256color'). Only 16-colour > terminals now receive the colours unaltered. > > I'm aware this fix might be better implemented in 'input.c'. What > do you think? Does this seem the best approach? Or is there a > compelling reason to pass the aixterm colours unaltered to > 256/88-colour terminals, other than to save a few characters? > --- tty.c.0 2012-01-29 18:38:30.591868756 -0500 > +++ tty.c 2012-02-08 22:24:44.689771476 -0500 > @@ -30,17 +30,14 @@ > #include <unistd.h> > > #include "tmux.h" > > void tty_read_callback(struct bufferevent *, void *); > void tty_error_callback(struct bufferevent *, short, void *); > > -int tty_try_256(struct tty *, u_char, const char *); > -int tty_try_88(struct tty *, u_char, const char *); > - > void tty_colours(struct tty *, const struct grid_cell *); > void tty_check_fg(struct tty *, struct grid_cell *); > void tty_check_bg(struct tty *, struct grid_cell *); > void tty_colours_fg(struct tty *, const struct grid_cell *); > void tty_colours_bg(struct tty *, const struct grid_cell *); > > void tty_redraw_region(struct tty *, const struct tty_ctx *); > @@ -1390,173 +1387,136 @@ > void > tty_check_fg(struct tty *tty, struct grid_cell *gc) > { > u_int colours; > > /* Is this a 256-colour colour? */ > if (gc->flags & GRID_FLAG_FG256) { > - /* And not a 256 colour mode? */ > - if (!(tty->term->flags & TERM_88COLOURS) && > - !(tty->term_flags & TERM_88COLOURS) && > - !(tty->term->flags & TERM_256COLOURS) && > - !(tty->term_flags & TERM_256COLOURS)) { > + /* And an 88-colour mode? */ > + if ((tty->term->flags & TERM_88COLOURS) || > + (tty->term_flags & TERM_88COLOURS)) { > + gc->fg = colour_256to88(gc->fg); > + /* Or a 16-colour mode? */ > + } else if (!(tty->term->flags & TERM_256COLOURS) && > + !(tty->term_flags & TERM_256COLOURS)) { > gc->fg = colour_256to16(gc->fg); > if (gc->fg & 8) { > gc->fg &= 7; > gc->attr |= GRID_ATTR_BRIGHT; > } else > gc->attr &= ~GRID_ATTR_BRIGHT; > gc->flags &= ~GRID_FLAG_FG256; > } > return; > } > > - /* Is this an aixterm colour? */ > - colours = tty_term_number(tty->term, TTYC_COLORS); > - if (gc->fg >= 90 && gc->fg <= 97 && colours < 16) { > - gc->fg -= 90; > - gc->attr |= GRID_ATTR_BRIGHT; > + /* Else, is this an aixterm colour? */ > + if (gc->fg >= 90 && gc->fg <= 97) { > + colours = tty_term_number(tty->term, TTYC_COLORS); > + > + /* And a 256/88-colour mode? */ > + if (colours > 16) { > + gc->fg -= 82; > + gc->flags |= GRID_FLAG_FG256; > + /* Or an 8-colour mode? */ > + } else if (colours < 16) { > + gc->fg -= 90; > + gc->attr |= GRID_ATTR_BRIGHT; > + } > } > } > > void > tty_check_bg(struct tty *tty, struct grid_cell *gc) > { > u_int colours; > > /* Is this a 256-colour colour? */ > if (gc->flags & GRID_FLAG_BG256) { > - /* > - * And not a 256 colour mode? Translate to 16-colour > + /* And an 88-colour mode? */ > + if ((tty->term->flags & TERM_88COLOURS) || > + (tty->term_flags & TERM_88COLOURS)) { > + gc->bg = colour_256to88(gc->bg); > + /* Or a 16-colour mode? Translate to 16-colour > * palette. Bold background doesn't exist portably, so just > * discard the bold bit if set. > */ > - if (!(tty->term->flags & TERM_88COLOURS) && > - !(tty->term_flags & TERM_88COLOURS) && > - !(tty->term->flags & TERM_256COLOURS) && > - !(tty->term_flags & TERM_256COLOURS)) { > + } else if (!(tty->term->flags & TERM_256COLOURS) && > + !(tty->term_flags & TERM_256COLOURS)) { > gc->bg = colour_256to16(gc->bg); > if (gc->bg & 8) > gc->bg &= 7; > gc->attr &= ~GRID_ATTR_BRIGHT; > gc->flags &= ~GRID_FLAG_BG256; > } > return; > } > > - /* Is this an aixterm colour? */ > - colours = tty_term_number(tty->term, TTYC_COLORS); > - if (gc->bg >= 90 && gc->bg <= 97 && colours < 16) { > - gc->bg -= 90; > - gc->attr |= GRID_ATTR_BRIGHT; > + /* Else, is this an aixterm colour? */ > + if (gc->bg >= 90 && gc->bg <= 97) { > + colours = tty_term_number(tty->term, TTYC_COLORS); > + > + /* And a 256/88-colour mode? */ > + if (colours > 16) { > + gc->bg -= 82; > + gc->flags |= GRID_FLAG_BG256; > + /* Or an 8-colour mode? */ > + } else if (colours < 16) { > + gc->bg -= 90; > + gc->attr |= GRID_ATTR_BRIGHT; > + } > } > } > > void > tty_colours_fg(struct tty *tty, const struct grid_cell *gc) > { > 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) { > - /* Try as 256 colours or translating to 88. */ > - if (tty_try_256(tty, fg, "38") == 0) > - goto save_fg; > - if (tty_try_88(tty, fg, "38") == 0) > - goto save_fg; > - /* Else already handled by tty_check_fg. */ > - return; > - } > - > /* Is this an aixterm bright colour? */ > - if (fg >= 90 && fg <= 97) { > + if (!(gc->flags & GRID_FLAG_FG256) && > + (fg >= 90 && fg <= 97)) { > xsnprintf(s, sizeof s, "\033[%dm", fg); > tty_puts(tty, s); > - goto save_fg; > - } > - > /* Otherwise set the foreground colour. */ > - tty_putcode1(tty, TTYC_SETAF, fg); > + } else > + tty_putcode1(tty, TTYC_SETAF, fg); > > -save_fg: > /* Save the new values in the terminal current cell. */ > tc->fg = fg; > tc->flags &= ~GRID_FLAG_FG256; > tc->flags |= gc->flags & GRID_FLAG_FG256; > } > > void > 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) { > - /* Try as 256 colours or translating to 88. */ > - if (tty_try_256(tty, bg, "48") == 0) > - goto save_bg; > - if (tty_try_88(tty, bg, "48") == 0) > - goto save_bg; > - /* Else already handled by tty_check_bg. */ > - return; > - } > - > /* Is this an aixterm bright colour? */ > - if (bg >= 90 && bg <= 97) { > + if (!(gc->flags & GRID_FLAG_BG256) && > + (bg >= 90 && bg <= 97)) { > /* 16 colour terminals or above only. */ > if (tty_term_number(tty->term, TTYC_COLORS) >= 16) { > xsnprintf(s, sizeof s, "\033[%dm", bg + 10); > tty_puts(tty, s); > - goto save_bg; > - } > - bg -= 90; > - /* no such thing as a bold background */ > - } > - > + } else > + bg -= 90; /* no such thing as a bold background */ > /* Otherwise set the background colour. */ > - tty_putcode1(tty, TTYC_SETAB, bg); > + } else > + tty_putcode1(tty, TTYC_SETAB, bg); > > -save_bg: > /* Save the new values in the terminal current cell. */ > tc->bg = bg; > tc->flags &= ~GRID_FLAG_BG256; > tc->flags |= gc->flags & GRID_FLAG_BG256; > } > > -int > -tty_try_256(struct tty *tty, u_char colour, const char *type) > -{ > - char s[32]; > - > - if (!(tty->term->flags & TERM_256COLOURS) && > - !(tty->term_flags & TERM_256COLOURS)) > - return (-1); > - > - xsnprintf(s, sizeof s, "\033[%s;5;%hhum", type, colour); > - tty_puts(tty, s); > - return (0); > -} > - > -int > -tty_try_88(struct tty *tty, u_char colour, const char *type) > -{ > - char s[32]; > - > - if (!(tty->term->flags & TERM_88COLOURS) && > - !(tty->term_flags & TERM_88COLOURS)) > - return (-1); > - colour = colour_256to88(colour); > - > - xsnprintf(s, sizeof s, "\033[%s;5;%hhum", type, colour); > - tty_puts(tty, s); > - return (0); > -} > - > void > tty_bell(struct tty *tty) > { > tty_putcode(tty, TTYC_BEL); > } ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users