[BACK]Return to grid.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/grid.c between version 1.121 and 1.122

version 1.121, 2021/02/05 12:29:18 version 1.122, 2021/12/21 14:57:28
Line 826 
Line 826 
         return (n);          return (n);
 }  }
   
   /* Get underscore colour sequence. */
   static size_t
   grid_string_cells_us(const struct grid_cell *gc, int *values)
   {
           size_t  n;
           u_char  r, g, b;
   
           n = 0;
           if (gc->us & COLOUR_FLAG_256) {
                   values[n++] = 58;
                   values[n++] = 5;
                   values[n++] = gc->us & 0xff;
           } else if (gc->us & COLOUR_FLAG_RGB) {
                   values[n++] = 58;
                   values[n++] = 2;
                   colour_split_rgb(gc->us, &r, &g, &b);
                   values[n++] = r;
                   values[n++] = g;
                   values[n++] = b;
           }
           return (n);
   }
   
   /* Add on SGR code. */
   static void
   grid_string_cells_add_code(char *buf, size_t len, u_int n, int *s, int *newc,
       int *oldc, size_t nnewc, size_t noldc, int escape_c0)
   {
           u_int   i;
           char    tmp[64];
   
           if (nnewc != 0 &&
               (nnewc != noldc ||
               memcmp(newc, oldc, nnewc * sizeof newc[0]) != 0 ||
               (n != 0 && s[0] == 0))) {
                   if (escape_c0)
                           strlcat(buf, "\\033[", len);
                   else
                           strlcat(buf, "\033[", len);
                   for (i = 0; i < nnewc; i++) {
                           if (i + 1 < nnewc)
                                   xsnprintf(tmp, sizeof tmp, "%d;", newc[i]);
                           else
                                   xsnprintf(tmp, sizeof tmp, "%d", newc[i]);
                           strlcat(buf, tmp, len);
                   }
                   strlcat(buf, "m", len);
           }
   }
   
 /*  /*
  * Returns ANSI code to set particular attributes (colour, bold and so on)   * Returns ANSI code to set particular attributes (colour, bold and so on)
  * given a current state.   * given a current state.
Line 861 
Line 911 
   
         /* If any attribute is removed, begin with 0. */          /* If any attribute is removed, begin with 0. */
         for (i = 0; i < nitems(attrs); i++) {          for (i = 0; i < nitems(attrs); i++) {
                 if (!(attr & attrs[i].mask) && (lastattr & attrs[i].mask)) {                  if (((~attr & attrs[i].mask) &&
                       (lastattr & attrs[i].mask)) ||
                       (lastgc->us != 0 && gc->us == 0)) {
                         s[n++] = 0;                          s[n++] = 0;
                         lastattr &= GRID_ATTR_CHARSET;                          lastattr &= GRID_ATTR_CHARSET;
                         break;                          break;
Line 897 
Line 949 
         /* If the foreground colour changed, write its parameters. */          /* If the foreground colour changed, write its parameters. */
         nnewc = grid_string_cells_fg(gc, newc);          nnewc = grid_string_cells_fg(gc, newc);
         noldc = grid_string_cells_fg(lastgc, oldc);          noldc = grid_string_cells_fg(lastgc, oldc);
         if (nnewc != noldc ||          grid_string_cells_add_code(buf, len, n, s, newc, oldc, nnewc, noldc,
             memcmp(newc, oldc, nnewc * sizeof newc[0]) != 0 ||              escape_c0);
             (n != 0 && s[0] == 0)) {  
                 if (escape_c0)  
                         strlcat(buf, "\\033[", len);  
                 else  
                         strlcat(buf, "\033[", len);  
                 for (i = 0; i < nnewc; i++) {  
                         if (i + 1 < nnewc)  
                                 xsnprintf(tmp, sizeof tmp, "%d;", newc[i]);  
                         else  
                                 xsnprintf(tmp, sizeof tmp, "%d", newc[i]);  
                         strlcat(buf, tmp, len);  
                 }  
                 strlcat(buf, "m", len);  
         }  
   
         /* If the background colour changed, append its parameters. */          /* If the background colour changed, append its parameters. */
         nnewc = grid_string_cells_bg(gc, newc);          nnewc = grid_string_cells_bg(gc, newc);
         noldc = grid_string_cells_bg(lastgc, oldc);          noldc = grid_string_cells_bg(lastgc, oldc);
         if (nnewc != noldc ||          grid_string_cells_add_code(buf, len, n, s, newc, oldc, nnewc, noldc,
             memcmp(newc, oldc, nnewc * sizeof newc[0]) != 0 ||              escape_c0);
             (n != 0 && s[0] == 0)) {  
                 if (escape_c0)          /* If the underscore colour changed, append its parameters. */
                         strlcat(buf, "\\033[", len);          nnewc = grid_string_cells_us(gc, newc);
                 else          noldc = grid_string_cells_us(lastgc, oldc);
                         strlcat(buf, "\033[", len);          grid_string_cells_add_code(buf, len, n, s, newc, oldc, nnewc, noldc,
                 for (i = 0; i < nnewc; i++) {              escape_c0);
                         if (i + 1 < nnewc)  
                                 xsnprintf(tmp, sizeof tmp, "%d;", newc[i]);  
                         else  
                                 xsnprintf(tmp, sizeof tmp, "%d", newc[i]);  
                         strlcat(buf, tmp, len);  
                 }  
                 strlcat(buf, "m", len);  
         }  
   
         /* Append shift in/shift out if needed. */          /* Append shift in/shift out if needed. */
         if ((attr & GRID_ATTR_CHARSET) && !(lastattr & GRID_ATTR_CHARSET)) {          if ((attr & GRID_ATTR_CHARSET) && !(lastattr & GRID_ATTR_CHARSET)) {

Legend:
Removed from v.1.121  
changed lines
  Added in v.1.122