mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:07:38 +00:00 
			
		
		
		
	Fix some issues in bright colour handling. Bold background doesn't exist
so there is no reason for tty_check_bg to mess with the BRIGHT flag at all, ever. Also use aixterm colours for 256-to-16 translation if the terminal supports them. And there is no reason for tty_colours_bg to worry about whether the terminal supports them - tty_check_bg has already taken care of it.
This commit is contained in:
		
							
								
								
									
										32
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								tty.c
									
									
									
									
									
								
							@@ -1453,6 +1453,8 @@ tty_check_fg(struct tty *tty, struct grid_cell *gc)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	u_int	colours;
 | 
						u_int	colours;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Is this a 256-colour colour? */
 | 
						/* Is this a 256-colour colour? */
 | 
				
			||||||
	if (gc->flags & GRID_FLAG_FG256) {
 | 
						if (gc->flags & GRID_FLAG_FG256) {
 | 
				
			||||||
		/* And not a 256 colour mode? */
 | 
							/* And not a 256 colour mode? */
 | 
				
			||||||
@@ -1461,7 +1463,10 @@ tty_check_fg(struct tty *tty, struct grid_cell *gc)
 | 
				
			|||||||
			gc->fg = colour_256to16(gc->fg);
 | 
								gc->fg = colour_256to16(gc->fg);
 | 
				
			||||||
			if (gc->fg & 8) {
 | 
								if (gc->fg & 8) {
 | 
				
			||||||
				gc->fg &= 7;
 | 
									gc->fg &= 7;
 | 
				
			||||||
				gc->attr |= GRID_ATTR_BRIGHT;
 | 
									if (colours >= 16)
 | 
				
			||||||
 | 
										gc->fg += 90;
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										gc->attr |= GRID_ATTR_BRIGHT;
 | 
				
			||||||
			} else
 | 
								} else
 | 
				
			||||||
				gc->attr &= ~GRID_ATTR_BRIGHT;
 | 
									gc->attr &= ~GRID_ATTR_BRIGHT;
 | 
				
			||||||
			gc->flags &= ~GRID_FLAG_FG256;
 | 
								gc->flags &= ~GRID_FLAG_FG256;
 | 
				
			||||||
@@ -1470,7 +1475,6 @@ tty_check_fg(struct tty *tty, struct grid_cell *gc)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Is this an aixterm colour? */
 | 
						/* Is this an aixterm colour? */
 | 
				
			||||||
	colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
					 | 
				
			||||||
	if (gc->fg >= 90 && gc->fg <= 97 && colours < 16) {
 | 
						if (gc->fg >= 90 && gc->fg <= 97 && colours < 16) {
 | 
				
			||||||
		gc->fg -= 90;
 | 
							gc->fg -= 90;
 | 
				
			||||||
		gc->attr |= GRID_ATTR_BRIGHT;
 | 
							gc->attr |= GRID_ATTR_BRIGHT;
 | 
				
			||||||
@@ -1482,6 +1486,8 @@ tty_check_bg(struct tty *tty, struct grid_cell *gc)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	u_int	colours;
 | 
						u_int	colours;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Is this a 256-colour colour? */
 | 
						/* Is this a 256-colour colour? */
 | 
				
			||||||
	if (gc->flags & GRID_FLAG_BG256) {
 | 
						if (gc->flags & GRID_FLAG_BG256) {
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
@@ -1492,20 +1498,19 @@ tty_check_bg(struct tty *tty, struct grid_cell *gc)
 | 
				
			|||||||
		if (!(tty->term->flags & TERM_256COLOURS) &&
 | 
							if (!(tty->term->flags & TERM_256COLOURS) &&
 | 
				
			||||||
		    !(tty->term_flags & TERM_256COLOURS)) {
 | 
							    !(tty->term_flags & TERM_256COLOURS)) {
 | 
				
			||||||
			gc->bg = colour_256to16(gc->bg);
 | 
								gc->bg = colour_256to16(gc->bg);
 | 
				
			||||||
			if (gc->bg & 8)
 | 
								if (gc->bg & 8) {
 | 
				
			||||||
				gc->bg &= 7;
 | 
									gc->bg &= 7;
 | 
				
			||||||
			gc->attr &= ~GRID_ATTR_BRIGHT;
 | 
									if (colours >= 16)
 | 
				
			||||||
 | 
										gc->fg += 90;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			gc->flags &= ~GRID_FLAG_BG256;
 | 
								gc->flags &= ~GRID_FLAG_BG256;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Is this an aixterm colour? */
 | 
						/* Is this an aixterm colour? */
 | 
				
			||||||
	colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
						if (gc->bg >= 90 && gc->bg <= 97 && colours < 16)
 | 
				
			||||||
	if (gc->bg >= 90 && gc->bg <= 97 && colours < 16) {
 | 
					 | 
				
			||||||
		gc->bg -= 90;
 | 
							gc->bg -= 90;
 | 
				
			||||||
		gc->attr |= GRID_ATTR_BRIGHT;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -1559,14 +1564,9 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Is this an aixterm bright colour? */
 | 
						/* Is this an aixterm bright colour? */
 | 
				
			||||||
	if (bg >= 90 && bg <= 97) {
 | 
						if (bg >= 90 && bg <= 97) {
 | 
				
			||||||
		/* 16 colour terminals or above only. */
 | 
							xsnprintf(s, sizeof s, "\033[%dm", bg + 10);
 | 
				
			||||||
		if (tty_term_number(tty->term, TTYC_COLORS) >= 16) {
 | 
							tty_puts(tty, s);
 | 
				
			||||||
			xsnprintf(s, sizeof s, "\033[%dm", bg + 10);
 | 
							goto save_bg;
 | 
				
			||||||
			tty_puts(tty, s);
 | 
					 | 
				
			||||||
			goto save_bg;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		bg -= 90;
 | 
					 | 
				
			||||||
		/* no such thing as a bold background */
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Otherwise set the background colour. */
 | 
						/* Otherwise set the background colour. */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user