Patch 8.2.0802
Problem:    Libvterm code lags behind the upstream version.
Solution:   Include revisions 759 - 762.
Files:      src/terminal.c, src/libvterm/doc/seqs.txt,
            src/libvterm/include/vterm.h, src/libvterm/src/pen.c,
            src/libvterm/src/screen.c, src/libvterm/src/state.c,
            src/libvterm/src/vterm.c, src/libvterm/src/vterm_internal.h,
            src/libvterm/t/harness.c, src/libvterm/t/12state_scroll.test


*** ../vim-8.2.0801/src/terminal.c      2020-05-19 23:10:55.854520109 +0200
--- src/terminal.c      2020-05-20 18:27:53.848379061 +0200
***************
*** 4321,4334 ****
      return 1;
  }
  
! static VTermParserCallbacks parser_fallbacks = {
!   NULL,               // text
    NULL,               // control
-   NULL,               // escape
    parse_csi,  // csi
    parse_osc,  // osc
!   NULL,               // dcs
!   NULL                // resize
  };
  
  /*
--- 4321,4331 ----
      return 1;
  }
  
! static VTermStateFallbacks state_fallbacks = {
    NULL,               // control
    parse_csi,  // csi
    parse_osc,  // osc
!   NULL                // dcs
  };
  
  /*
***************
*** 4411,4417 ****
      value.boolean = 0;
  #endif
      vterm_state_set_termprop(state, VTERM_PROP_CURSORBLINK, &value);
!     vterm_state_set_unrecognised_fallbacks(state, &parser_fallbacks, term);
  
      return OK;
  }
--- 4408,4414 ----
      value.boolean = 0;
  #endif
      vterm_state_set_termprop(state, VTERM_PROP_CURSORBLINK, &value);
!     vterm_state_set_unrecognised_fallbacks(state, &state_fallbacks, term);
  
      return OK;
  }
*** ../vim-8.2.0801/src/libvterm/doc/seqs.txt   2020-05-17 22:27:36.728262245 
+0200
--- src/libvterm/doc/seqs.txt   2020-05-20 18:30:26.851856643 +0200
***************
*** 170,175 ****
--- 170,176 ----
        SGR 4:x          = Underline style
  123   SGR 5            = Blink on
  123   SGR 7            = Reverse on
+       SGR 8            = Conceal on
        SGR 9            = Strikethrough on
        SGR 10-19        = Select font
        SGR 21           = Underline double
***************
*** 178,183 ****
--- 179,185 ----
   23   SGR 24           = Underline off
   23   SGR 25           = Blink off
   23   SGR 27           = Reverse off
+       SGR 28           = Conceal off
        SGR 29           = Strikethrough off
        SGR 30-37        = Foreground ANSI
        SGR 38           = Foreground alternative palette
*** ../vim-8.2.0801/src/libvterm/include/vterm.h        2020-05-19 
21:19:34.887367044 +0200
--- src/libvterm/include/vterm.h        2020-05-20 18:30:26.851856643 +0200
***************
*** 128,133 ****
--- 128,134 ----
    VTERM_ATTR_ITALIC,     // bool:   3, 23
    VTERM_ATTR_BLINK,      // bool:   5, 25
    VTERM_ATTR_REVERSE,    // bool:   7, 27
+   VTERM_ATTR_CONCEAL,    // bool:   8, 28
    VTERM_ATTR_STRIKE,     // bool:   9, 29
    VTERM_ATTR_FONT,       // number: 10-19
    VTERM_ATTR_FOREGROUND, // color:  30-39 90-97
***************
*** 314,326 ****
    // useful to add protocol?
  } VTermMouseState;
  
  VTermState *vterm_obtain_state(VTerm *vt);
  
  void  vterm_state_set_callbacks(VTermState *state, const VTermStateCallbacks 
*callbacks, void *user);
  void *vterm_state_get_cbdata(VTermState *state);
  
! // Only invokes control, csi, osc, dcs
! void  vterm_state_set_unrecognised_fallbacks(VTermState *state, const 
VTermParserCallbacks *fallbacks, void *user);
  void *vterm_state_get_unrecognised_fbdata(VTermState *state);
  
  // Initialize the state.
--- 315,333 ----
    // useful to add protocol?
  } VTermMouseState;
  
+ typedef struct {
+   int (*control)(unsigned char control, void *user);
+   int (*csi)(const char *leader, const long args[], int argcount, const char 
*intermed, char command, void *user);
+   int (*osc)(int command, VTermStringFragment frag, void *user);
+   int (*dcs)(const char *command, size_t commandlen, VTermStringFragment 
frag, void *user);
+ } VTermStateFallbacks;
+ 
  VTermState *vterm_obtain_state(VTerm *vt);
  
  void  vterm_state_set_callbacks(VTermState *state, const VTermStateCallbacks 
*callbacks, void *user);
  void *vterm_state_get_cbdata(VTermState *state);
  
! void  vterm_state_set_unrecognised_fallbacks(VTermState *state, const 
VTermStateFallbacks *fallbacks, void *user);
  void *vterm_state_get_unrecognised_fbdata(VTermState *state);
  
  // Initialize the state.
***************
*** 349,354 ****
--- 356,362 ----
      unsigned int italic    : 1;
      unsigned int blink     : 1;
      unsigned int reverse   : 1;
+     unsigned int conceal   : 1;
      unsigned int strike    : 1;
      unsigned int font      : 4; // 0 to 9
      unsigned int dwl       : 1; // On a DECDWL or DECDHL line
***************
*** 395,402 ****
  void  vterm_screen_set_callbacks(VTermScreen *screen, const 
VTermScreenCallbacks *callbacks, void *user);
  void *vterm_screen_get_cbdata(VTermScreen *screen);
  
! // Only invokes control, csi, osc, dcs
! void  vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const 
VTermParserCallbacks *fallbacks, void *user);
  void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen);
  
  // Enable support for using the alternate screen if "altscreen" is non-zero.
--- 403,409 ----
  void  vterm_screen_set_callbacks(VTermScreen *screen, const 
VTermScreenCallbacks *callbacks, void *user);
  void *vterm_screen_get_cbdata(VTermScreen *screen);
  
! void  vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const 
VTermStateFallbacks *fallbacks, void *user);
  void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen);
  
  // Enable support for using the alternate screen if "altscreen" is non-zero.
***************
*** 438,445 ****
    VTERM_ATTR_FONT_MASK       = 1 << 6,
    VTERM_ATTR_FOREGROUND_MASK = 1 << 7,
    VTERM_ATTR_BACKGROUND_MASK = 1 << 8,
  
!   VTERM_ALL_ATTRS_MASK = (1 << 9) - 1
  } VTermAttrMask;
  
  int vterm_screen_get_attrs_extent(const VTermScreen *screen, VTermRect 
*extent, VTermPos pos, VTermAttrMask attrs);
--- 445,453 ----
    VTERM_ATTR_FONT_MASK       = 1 << 6,
    VTERM_ATTR_FOREGROUND_MASK = 1 << 7,
    VTERM_ATTR_BACKGROUND_MASK = 1 << 8,
+   VTERM_ATTR_CONCEAL_MASK    = 1 << 9,
  
!   VTERM_ALL_ATTRS_MASK = (1 << 10) - 1
  } VTermAttrMask;
  
  int vterm_screen_get_attrs_extent(const VTermScreen *screen, VTermRect 
*extent, VTermPos pos, VTermAttrMask attrs);
*** ../vim-8.2.0801/src/libvterm/src/pen.c      2020-05-17 22:27:36.728262245 
+0200
--- src/libvterm/src/pen.c      2020-05-20 18:30:26.851856643 +0200
***************
*** 170,175 ****
--- 170,176 ----
    state->pen.italic = 0;    setpenattr_bool(state, VTERM_ATTR_ITALIC, 0);
    state->pen.blink = 0;     setpenattr_bool(state, VTERM_ATTR_BLINK, 0);
    state->pen.reverse = 0;   setpenattr_bool(state, VTERM_ATTR_REVERSE, 0);
+   state->pen.conceal = 0;   setpenattr_bool(state, VTERM_ATTR_CONCEAL, 0);
    state->pen.strike = 0;    setpenattr_bool(state, VTERM_ATTR_STRIKE, 0);
    state->pen.font = 0;      setpenattr_int( state, VTERM_ATTR_FONT, 0);
  
***************
*** 192,197 ****
--- 193,199 ----
      setpenattr_bool(state, VTERM_ATTR_ITALIC,     state->pen.italic);
      setpenattr_bool(state, VTERM_ATTR_BLINK,      state->pen.blink);
      setpenattr_bool(state, VTERM_ATTR_REVERSE,    state->pen.reverse);
+     setpenattr_bool(state, VTERM_ATTR_CONCEAL,    state->pen.conceal);
      setpenattr_bool(state, VTERM_ATTR_STRIKE,     state->pen.strike);
      setpenattr_int( state, VTERM_ATTR_FONT,       state->pen.font);
      setpenattr_col( state, VTERM_ATTR_FOREGROUND, state->pen.fg);
***************
*** 293,298 ****
--- 295,305 ----
        setpenattr_bool(state, VTERM_ATTR_REVERSE, 1);
        break;
  
+     case 8: // Conceal on
+       state->pen.conceal = 1;
+       setpenattr_bool(state, VTERM_ATTR_CONCEAL, 1);
+       break;
+ 
      case 9: // Strikethrough on
        state->pen.strike = 1;
        setpenattr_bool(state, VTERM_ATTR_STRIKE, 1);
***************
*** 334,339 ****
--- 341,351 ----
        setpenattr_bool(state, VTERM_ATTR_REVERSE, 0);
        break;
  
+     case 28: // Conceal off (Reveal)
+       state->pen.conceal = 0;
+       setpenattr_bool(state, VTERM_ATTR_CONCEAL, 0);
+       break;
+ 
      case 29: // Strikethrough off
        state->pen.strike = 0;
        setpenattr_bool(state, VTERM_ATTR_STRIKE, 0);
***************
*** 433,438 ****
--- 445,453 ----
    if(state->pen.reverse)
      args[argi++] = 7;
  
+   if(state->pen.conceal)
+     args[argi++] = 8;
+ 
    if(state->pen.strike)
      args[argi++] = 9;
  
***************
*** 512,517 ****
--- 527,536 ----
      val->boolean = state->pen.reverse;
      return 1;
  
+   case VTERM_ATTR_CONCEAL:
+     val->boolean = state->pen.conceal;
+     return 1;
+ 
    case VTERM_ATTR_STRIKE:
      val->boolean = state->pen.strike;
      return 1;
*** ../vim-8.2.0801/src/libvterm/src/screen.c   2020-05-19 21:19:34.887367044 
+0200
--- src/libvterm/src/screen.c   2020-05-20 18:33:45.439180309 +0200
***************
*** 21,26 ****
--- 21,27 ----
    unsigned int italic    : 1;
    unsigned int blink     : 1;
    unsigned int reverse   : 1;
+   unsigned int conceal   : 1;
    unsigned int strike    : 1;
    unsigned int font      : 4; // 0 to 9
  
***************
*** 420,425 ****
--- 421,429 ----
    case VTERM_ATTR_REVERSE:
      screen->pen.reverse = val->boolean;
      return 1;
+   case VTERM_ATTR_CONCEAL:
+     screen->pen.conceal = val->boolean;
+     return 1;
    case VTERM_ATTR_STRIKE:
      screen->pen.strike = val->boolean;
      return 1;
***************
*** 544,549 ****
--- 548,554 ----
          dst->pen.italic    = src->attrs.italic;
          dst->pen.blink     = src->attrs.blink;
          dst->pen.reverse   = src->attrs.reverse ^ screen->global_reverse;
+         dst->pen.conceal   = src->attrs.conceal;
          dst->pen.strike    = src->attrs.strike;
          dst->pen.font      = src->attrs.font;
  
***************
*** 553,558 ****
--- 558,565 ----
          if(src->width == 2 && pos.col < (new_cols-1))
            (dst + 1)->chars[0] = (uint32_t) -1;
        }
+       for( ; pos.col < new_cols; pos.col++)
+         clearcell(screen, &new_buffer[pos.row * new_cols + pos.col]);
        new_row--;
  
        if(active)
***************
*** 815,820 ****
--- 822,828 ----
    cell->attrs.italic    = intcell->pen.italic;
    cell->attrs.blink     = intcell->pen.blink;
    cell->attrs.reverse   = intcell->pen.reverse ^ screen->global_reverse;
+   cell->attrs.conceal   = intcell->pen.conceal;
    cell->attrs.strike    = intcell->pen.strike;
    cell->attrs.font      = intcell->pen.font;
  
***************
*** 890,896 ****
    return screen->cbdata;
  }
  
! void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const 
VTermParserCallbacks *fallbacks, void *user)
  {
    vterm_state_set_unrecognised_fallbacks(screen->state, fallbacks, user);
  }
--- 898,904 ----
    return screen->cbdata;
  }
  
! void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const 
VTermStateFallbacks *fallbacks, void *user)
  {
    vterm_state_set_unrecognised_fallbacks(screen->state, fallbacks, user);
  }
***************
*** 935,940 ****
--- 943,950 ----
      return 1;
    if((attrs & VTERM_ATTR_REVERSE_MASK)    && (a->pen.reverse != 
b->pen.reverse))
      return 1;
+   if((attrs & VTERM_ATTR_CONCEAL_MASK)    && (a->pen.conceal != 
b->pen.conceal))
+     return 1;
    if((attrs & VTERM_ATTR_STRIKE_MASK)     && (a->pen.strike != b->pen.strike))
      return 1;
    if((attrs & VTERM_ATTR_FONT_MASK)       && (a->pen.font != b->pen.font))
*** ../vim-8.2.0801/src/libvterm/src/state.c    2020-05-19 21:43:41.739172477 
+0200
--- src/libvterm/src/state.c    2020-05-20 18:34:22.087027529 +0200
***************
*** 1478,1483 ****
--- 1478,1491 ----
        state->scrollregion_bottom = -1;
      }
  
+     // Setting the scrolling region restores the cursor to the home position
+     state->pos.row = 0;
+     state->pos.col = 0;
+     if(state->mode.origin) {
+       state->pos.row += state->scrollregion_top;
+       state->pos.col += SCROLLREGION_LEFT(state);
+     }
+ 
      break;
  
    case 0x73: // DECSLRM - DEC custom
***************
*** 1499,1504 ****
--- 1507,1520 ----
        state->scrollregion_right = -1;
      }
  
+     // Setting the scrolling region restores the cursor to the home position
+     state->pos.row = 0;
+     state->pos.col = 0;
+     if(state->mode.origin) {
+       state->pos.row += state->scrollregion_top;
+       state->pos.col += SCROLLREGION_LEFT(state);
+     }
+ 
      break;
  
    case 0x74:
***************
*** 1979,1985 ****
    return state->cbdata;
  }
  
! void vterm_state_set_unrecognised_fallbacks(VTermState *state, const 
VTermParserCallbacks *fallbacks, void *user)
  {
    if(fallbacks) {
      state->fallbacks = fallbacks;
--- 1995,2001 ----
    return state->cbdata;
  }
  
! void vterm_state_set_unrecognised_fallbacks(VTermState *state, const 
VTermStateFallbacks *fallbacks, void *user)
  {
    if(fallbacks) {
      state->fallbacks = fallbacks;
*** ../vim-8.2.0801/src/libvterm/src/vterm.c    2020-05-19 21:19:34.891367031 
+0200
--- src/libvterm/src/vterm.c    2020-05-20 18:30:26.851856643 +0200
***************
*** 261,266 ****
--- 261,267 ----
      case VTERM_ATTR_ITALIC:     return VTERM_VALUETYPE_BOOL;
      case VTERM_ATTR_BLINK:      return VTERM_VALUETYPE_BOOL;
      case VTERM_ATTR_REVERSE:    return VTERM_VALUETYPE_BOOL;
+     case VTERM_ATTR_CONCEAL:    return VTERM_VALUETYPE_BOOL;
      case VTERM_ATTR_STRIKE:     return VTERM_VALUETYPE_BOOL;
      case VTERM_ATTR_FONT:       return VTERM_VALUETYPE_INT;
      case VTERM_ATTR_FOREGROUND: return VTERM_VALUETYPE_COLOR;
*** ../vim-8.2.0801/src/libvterm/src/vterm_internal.h   2020-05-19 
21:19:34.891367031 +0200
--- src/libvterm/src/vterm_internal.h   2020-05-20 18:30:26.851856643 +0200
***************
*** 53,58 ****
--- 53,59 ----
    unsigned int italic:1;
    unsigned int blink:1;
    unsigned int reverse:1;
+   unsigned int conceal:1;
    unsigned int strike:1;
    unsigned int font:4; // To store 0-9
  };
***************
*** 73,79 ****
    const VTermStateCallbacks *callbacks;
    void *cbdata;
  
!   const VTermParserCallbacks *fallbacks;
    void *fbdata;
  
    int rows;
--- 74,80 ----
    const VTermStateCallbacks *callbacks;
    void *cbdata;
  
!   const VTermStateFallbacks *fallbacks;
    void *fbdata;
  
    int rows;
*** ../vim-8.2.0801/src/libvterm/t/harness.c    2020-05-19 21:19:34.887367044 
+0200
--- src/libvterm/t/harness.c    2020-05-20 18:30:26.851856643 +0200
***************
*** 206,212 ****
    NULL // resize
  };
  
! // These callbacks are shared by State and Screen
  
  static int want_movecursor = 0;
  static VTermPos state_pos;
--- 206,219 ----
    NULL // resize
  };
  
! static VTermStateFallbacks fallbacks = {
!   parser_control, // control
!   parser_csi, // csi
!   parser_osc, // osc
!   parser_dcs // dcs
! };
! 
! /* These callbacks are shared by State and Screen */
  
  static int want_movecursor = 0;
  static VTermPos state_pos;
***************
*** 319,324 ****
--- 326,332 ----
    int italic;
    int blink;
    int reverse;
+   int conceal;
    int strike;
    int font;
    VTermColor foreground;
***************
*** 342,347 ****
--- 350,358 ----
    case VTERM_ATTR_REVERSE:
      state_pen.reverse = val->boolean;
      break;
+   case VTERM_ATTR_CONCEAL:
+     state_pen.conceal = val->boolean;
+     break;
    case VTERM_ATTR_STRIKE:
      state_pen.strike = val->boolean;
      break;
***************
*** 552,558 ****
            want_settermprop = sense;
            break;
          case 'f':
!           vterm_state_set_unrecognised_fallbacks(state, sense ? &parser_cbs : 
NULL, NULL);
            break;
          default:
            fprintf(stderr, "Unrecognised WANTSTATE flag '%c'\n", line[i]);
--- 563,569 ----
            want_settermprop = sense;
            break;
          case 'f':
!           vterm_state_set_unrecognised_fallbacks(state, sense ? &fallbacks : 
NULL, NULL);
            break;
          default:
            fprintf(stderr, "Unrecognised WANTSTATE flag '%c'\n", line[i]);
*** ../vim-8.2.0801/src/libvterm/t/12state_scroll.test  2017-06-24 
16:44:02.000000000 +0200
--- src/libvterm/t/12state_scroll.test  2020-05-20 18:34:22.087027529 +0200
***************
*** 40,47 ****
    ?cursor = 20,0
  
  !Index in DECSTBM
- PUSH "\e[10H"
  PUSH "\e[9;10r"
  PUSH "\eM"
    ?cursor = 8,0
  PUSH "\eM"
--- 40,47 ----
    ?cursor = 20,0
  
  !Index in DECSTBM
  PUSH "\e[9;10r"
+ PUSH "\e[10H"
  PUSH "\eM"
    ?cursor = 8,0
  PUSH "\eM"
***************
*** 148,150 ****
--- 148,156 ----
    moverect 0..23,0..80 -> 2..25,0..80
    erase 0..2,0..80
    ?cursor = 0,0
+ 
+ !DECSTBM resets cursor position
+ PUSH "\e[5;5H"
+   ?cursor = 4,4
+ PUSH "\e[r"
+   ?cursor = 0,0
*** ../vim-8.2.0801/src/version.c       2020-05-19 23:10:55.854520109 +0200
--- src/version.c       2020-05-20 18:37:15.534296601 +0200
***************
*** 748,749 ****
--- 748,751 ----
  {   /* Add new patch number below this line */
+ /**/
+     802,
  /**/

-- 
Fingers not found - Pound head on keyboard to continue.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202005201642.04KGgDJG002895%40masaka.moolenaar.net.

Raspunde prin e-mail lui