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

Diff for /src/usr.bin/tmux/tty.c between version 1.403 and 1.404

version 1.403, 2021/08/17 11:20:13 version 1.404, 2021/10/05 12:46:02
Line 314 
Line 314 
         tio.c_cc[VMIN] = 1;          tio.c_cc[VMIN] = 1;
         tio.c_cc[VTIME] = 0;          tio.c_cc[VTIME] = 0;
         if (tcsetattr(c->fd, TCSANOW, &tio) == 0)          if (tcsetattr(c->fd, TCSANOW, &tio) == 0)
                 tcflush(c->fd, TCIOFLUSH);                  tcflush(c->fd, TCOFLUSH);
   
         tty_putcode(tty, TTYC_SMCUP);          tty_putcode(tty, TTYC_SMCUP);
   
Line 658 
Line 658 
         tty->ccolour = xstrdup(ccolour);          tty->ccolour = xstrdup(ccolour);
 }  }
   
   static void
   tty_update_cursor(struct tty *tty, int mode, int changed, struct screen *s)
   {
           enum screen_cursor_style cstyle;
   
           /* Set cursor colour if changed. */
           if (s != NULL && strcmp(s->ccolour, tty->ccolour) != 0)
                   tty_force_cursor_colour(tty, s->ccolour);
   
           /* If cursor is off, set as invisible. */
           if (~mode & MODE_CURSOR) {
                   if (changed & MODE_CURSOR)
                           tty_putcode(tty, TTYC_CIVIS);
                   return;
           }
   
           /* Check if blinking or very visible flag changed or style changed. */
           if (s == NULL)
                   cstyle = tty->cstyle;
           else
                   cstyle = s->cstyle;
           if ((changed & CURSOR_MODES) == 0 && cstyle == tty->cstyle)
                   return;
   
           /*
            * Set cursor style. If an explicit style has been set with DECSCUSR,
            * set it if supported, otherwise send cvvis for blinking styles.
            *
            * If no style, has been set (SCREEN_CURSOR_DEFAULT), then send cvvis
            * if either the blinking or very visible flags are set.
            */
           tty_putcode(tty, TTYC_CNORM);
           switch (cstyle) {
           case SCREEN_CURSOR_DEFAULT:
                   if (tty_term_has(tty->term, TTYC_SE))
                           tty_putcode(tty, TTYC_SE);
                   else
                           tty_putcode1(tty, TTYC_SS, 0);
                   if (mode & (MODE_CURSOR_BLINKING|MODE_CURSOR_VERY_VISIBLE))
                           tty_putcode(tty, TTYC_CVVIS);
                   break;
           case SCREEN_CURSOR_BLOCK:
                   if (tty_term_has(tty->term, TTYC_SS)) {
                           if (mode & MODE_CURSOR_BLINKING)
                                   tty_putcode1(tty, TTYC_SS, 1);
                           else
                                   tty_putcode1(tty, TTYC_SS, 2);
                   } else if (mode & MODE_CURSOR_BLINKING)
                           tty_putcode(tty, TTYC_CVVIS);
                   break;
           case SCREEN_CURSOR_UNDERLINE:
                   if (tty_term_has(tty->term, TTYC_SS)) {
                           if (mode & MODE_CURSOR_BLINKING)
                                   tty_putcode1(tty, TTYC_SS, 3);
                           else
                                   tty_putcode1(tty, TTYC_SS, 4);
                   } else if (mode & MODE_CURSOR_BLINKING)
                           tty_putcode(tty, TTYC_CVVIS);
                   break;
           case SCREEN_CURSOR_BAR:
                   if (tty_term_has(tty->term, TTYC_SS)) {
                           if (mode & MODE_CURSOR_BLINKING)
                                   tty_putcode1(tty, TTYC_SS, 5);
                           else
                                   tty_putcode1(tty, TTYC_SS, 6);
                   } else if (mode & MODE_CURSOR_BLINKING)
                           tty_putcode(tty, TTYC_CVVIS);
                   break;
           }
           tty->cstyle = cstyle;
    }
   
 void  void
 tty_update_mode(struct tty *tty, int mode, struct screen *s)  tty_update_mode(struct tty *tty, int mode, struct screen *s)
 {  {
         struct client           *c = tty->client;          struct client   *c = tty->client;
         int                      changed;          int              changed;
         enum screen_cursor_style cstyle = tty->cstyle;  
   
         if (tty->flags & TTY_NOCURSOR)          if (tty->flags & TTY_NOCURSOR)
                 mode &= ~MODE_CURSOR;                  mode &= ~MODE_CURSOR;
Line 676 
Line 747 
                     screen_mode_to_string(mode));                      screen_mode_to_string(mode));
         }          }
   
         if (s != NULL) {          tty_update_cursor(tty, mode, changed, s);
                 if (strcmp(s->ccolour, tty->ccolour) != 0)  
                         tty_force_cursor_colour(tty, s->ccolour);  
                 cstyle = s->cstyle;  
         }  
         if (~mode & MODE_CURSOR) {  
                 /* Cursor now off - set as invisible. */  
                 if (changed & MODE_CURSOR)  
                         tty_putcode(tty, TTYC_CIVIS);  
         } else if ((changed & (MODE_CURSOR|MODE_BLINKING)) ||  
             cstyle != tty->cstyle) {  
                 /*  
                  * Cursor now on, blinking flag changed or style changed. Start  
                  * by setting the cursor to normal.  
                  */  
                 tty_putcode(tty, TTYC_CNORM);  
                 switch (cstyle) {  
                 case SCREEN_CURSOR_DEFAULT:  
                         /*  
                          * If the old style wasn't default, then reset it to  
                          * default.  
                          */  
                         if (tty->cstyle != SCREEN_CURSOR_DEFAULT) {  
                                 if (tty_term_has(tty->term, TTYC_SE))  
                                         tty_putcode(tty, TTYC_SE);  
                                 else  
                                         tty_putcode1(tty, TTYC_SS, 0);  
                         }  
   
                         /* Set the cursor as very visible if necessary. */  
                         if (mode & MODE_BLINKING)  
                                 tty_putcode(tty, TTYC_CVVIS);  
                         break;  
                 case SCREEN_CURSOR_BLOCK:  
                         /*  
                          * Set style to either block blinking (1) or steady (2)  
                          * if supported, otherwise just check the blinking  
                          * flag.  
                          */  
                         if (tty_term_has(tty->term, TTYC_SS)) {  
                                 if (mode & MODE_BLINKING)  
                                         tty_putcode1(tty, TTYC_SS, 1);  
                                 else  
                                         tty_putcode1(tty, TTYC_SS, 2);  
                         } else if (mode & MODE_BLINKING)  
                                 tty_putcode(tty, TTYC_CVVIS);  
                         break;  
                 case SCREEN_CURSOR_UNDERLINE:  
                         /*  
                          * Set style to either underline blinking (3) or steady  
                          * (4) if supported, otherwise just check the blinking  
                          * flag.  
                          */  
                         if (tty_term_has(tty->term, TTYC_SS)) {  
                                 if (mode & MODE_BLINKING)  
                                         tty_putcode1(tty, TTYC_SS, 3);  
                                 else  
                                         tty_putcode1(tty, TTYC_SS, 4);  
                         } else if (mode & MODE_BLINKING)  
                                 tty_putcode(tty, TTYC_CVVIS);  
                         break;  
                 case SCREEN_CURSOR_BAR:  
                         /*  
                          * Set style to either bar blinking (5) or steady (6)  
                          * if supported, otherwise just check the blinking  
                          * flag.  
                          */  
                         if (tty_term_has(tty->term, TTYC_SS)) {  
                                 if (mode & MODE_BLINKING)  
                                         tty_putcode1(tty, TTYC_SS, 5);  
                                 else  
                                         tty_putcode1(tty, TTYC_SS, 6);  
                         } else if (mode & MODE_BLINKING)  
                                 tty_putcode(tty, TTYC_CVVIS);  
                         break;  
                 }  
                 tty->cstyle = cstyle;  
         }  
   
         if ((changed & ALL_MOUSE_MODES) &&          if ((changed & ALL_MOUSE_MODES) &&
             tty_term_has(tty->term, TTYC_KMOUS)) {              tty_term_has(tty->term, TTYC_KMOUS)) {
                 /*                  /*

Legend:
Removed from v.1.403  
changed lines
  Added in v.1.404