@@ -1629,18 +1629,20 @@ input_csi_dispatch_sgr_256(struct input_ctx *ictx, int fgbg, u_int *i)
16291629 c = input_get (ictx , * i , 0 , -1 );
16301630 if (c == -1 ) {
16311631 if (fgbg == 38 ) {
1632- gc -> flags &= ~GRID_FLAG_FG256 ;
1632+ gc -> flags &= ~( GRID_FLAG_FG256 | GRID_FLAG_FGRGB ) ;
16331633 gc -> fg = 8 ;
16341634 } else if (fgbg == 48 ) {
1635- gc -> flags &= ~GRID_FLAG_BG256 ;
1635+ gc -> flags &= ~( GRID_FLAG_BG256 | GRID_FLAG_BGRGB ) ;
16361636 gc -> bg = 8 ;
16371637 }
16381638 } else {
16391639 if (fgbg == 38 ) {
16401640 gc -> flags |= GRID_FLAG_FG256 ;
1641+ gc -> flags &= ~GRID_FLAG_FGRGB ;
16411642 gc -> fg = c ;
16421643 } else if (fgbg == 48 ) {
16431644 gc -> flags |= GRID_FLAG_BG256 ;
1645+ gc -> flags &= ~GRID_FLAG_BGRGB ;
16441646 gc -> bg = c ;
16451647 }
16461648 }
@@ -1651,7 +1653,7 @@ void
16511653input_csi_dispatch_sgr_rgb (struct input_ctx * ictx , int fgbg , u_int * i )
16521654{
16531655 struct grid_cell * gc = & ictx -> cell .cell ;
1654- int c , r , g , b ;
1656+ int r , g , b ;
16551657
16561658 (* i )++ ;
16571659 r = input_get (ictx , * i , 0 , -1 );
@@ -1666,13 +1668,18 @@ input_csi_dispatch_sgr_rgb(struct input_ctx *ictx, int fgbg, u_int *i)
16661668 if (b == -1 || b > 255 )
16671669 return ;
16681670
1669- c = colour_find_rgb (r , g , b );
16701671 if (fgbg == 38 ) {
1671- gc -> flags |= GRID_FLAG_FG256 ;
1672- gc -> fg = c ;
1672+ gc -> flags &= ~GRID_FLAG_FG256 ;
1673+ gc -> flags |= GRID_FLAG_FGRGB ;
1674+ gc -> fg_rgb .r = r ;
1675+ gc -> fg_rgb .g = g ;
1676+ gc -> fg_rgb .b = b ;
16731677 } else if (fgbg == 48 ) {
1674- gc -> flags |= GRID_FLAG_BG256 ;
1675- gc -> bg = c ;
1678+ gc -> flags &= ~GRID_FLAG_BG256 ;
1679+ gc -> flags |= GRID_FLAG_BGRGB ;
1680+ gc -> bg_rgb .r = r ;
1681+ gc -> bg_rgb .g = g ;
1682+ gc -> bg_rgb .b = b ;
16761683 }
16771684}
16781685
@@ -1754,11 +1761,11 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
17541761 case 35 :
17551762 case 36 :
17561763 case 37 :
1757- gc -> flags &= ~GRID_FLAG_FG256 ;
1764+ gc -> flags &= ~( GRID_FLAG_FG256 | GRID_FLAG_FGRGB ) ;
17581765 gc -> fg = n - 30 ;
17591766 break ;
17601767 case 39 :
1761- gc -> flags &= ~GRID_FLAG_FG256 ;
1768+ gc -> flags &= ~( GRID_FLAG_FG256 | GRID_FLAG_FGRGB ) ;
17621769 gc -> fg = 8 ;
17631770 break ;
17641771 case 40 :
@@ -1769,11 +1776,11 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
17691776 case 45 :
17701777 case 46 :
17711778 case 47 :
1772- gc -> flags &= ~GRID_FLAG_BG256 ;
1779+ gc -> flags &= ~( GRID_FLAG_BG256 | GRID_FLAG_BGRGB ) ;
17731780 gc -> bg = n - 40 ;
17741781 break ;
17751782 case 49 :
1776- gc -> flags &= ~GRID_FLAG_BG256 ;
1783+ gc -> flags &= ~( GRID_FLAG_BG256 | GRID_FLAG_BGRGB ) ;
17771784 gc -> bg = 8 ;
17781785 break ;
17791786 case 90 :
@@ -1784,7 +1791,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
17841791 case 95 :
17851792 case 96 :
17861793 case 97 :
1787- gc -> flags &= ~GRID_FLAG_FG256 ;
1794+ gc -> flags &= ~( GRID_FLAG_FG256 | GRID_FLAG_FGRGB ) ;
17881795 gc -> fg = n ;
17891796 break ;
17901797 case 100 :
@@ -1795,7 +1802,7 @@ input_csi_dispatch_sgr(struct input_ctx *ictx)
17951802 case 105 :
17961803 case 106 :
17971804 case 107 :
1798- gc -> flags &= ~GRID_FLAG_BG256 ;
1805+ gc -> flags &= ~( GRID_FLAG_BG256 | GRID_FLAG_BGRGB ) ;
17991806 gc -> bg = n - 10 ;
18001807 break ;
18011808 }
0 commit comments