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

Reply via email to