]> granicus.if.org Git - vim/commitdiff
patch 8.2.0778: libvterm code lags behind the upstream version v8.2.0778
authorBram Moolenaar <Bram@vim.org>
Sun, 17 May 2020 14:04:44 +0000 (16:04 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 17 May 2020 14:04:44 +0000 (16:04 +0200)
Problem:    Libvterm code lags behind the upstream version.
Solution:   Include revisions 720 - 723.

src/libvterm/Makefile
src/libvterm/src/state.c
src/libvterm/t/10state_putglyph.test
src/libvterm/t/92lp1805050.test [new file with mode: 0644]
src/libvterm/t/run-test.pl
src/version.c

index e56c10adf3b79bd712f9bbec72bef75bb6a2615d..f231dd3b52e71dc5e927b673b7f56ee9d9be6f92 100644 (file)
@@ -118,7 +118,7 @@ distdir: $(INCFILES)
        mkdir __distdir
        cp LICENSE __distdir
        mkdir __distdir/src
-       cp src/*.c src/*.h __distdir/src
+       cp src/*.c src/*.h src/*.inc __distdir/src
        mkdir __distdir/src/encoding
        cp src/encoding/*.inc __distdir/src/encoding
        mkdir __distdir/include
index 6b2583af9979b4e9fe3d1e8a9abbbb7c40080699..89803016ff8be34d3ab5cf738c0a1a46daca6e7e 100644 (file)
@@ -922,6 +922,7 @@ static int on_csi(const char *leader, const long args[], int argcount, const cha
   VTermState *state = user;
   int leader_byte = 0;
   int intermed_byte = 0;
+  int cancel_phantom = 1;
   VTermPos oldpos = state->pos;
   int handled = 1;
 
@@ -1237,6 +1238,24 @@ static int on_csi(const char *leader, const long args[], int argcount, const cha
     state->at_phantom = 0;
     break;
 
+  case 0x62: { // REP - ECMA-48 8.3.103
+    const int row_width = THISROWWIDTH(state);
+    count = CSI_ARG_COUNT(args[0]);
+    col = state->pos.col + count;
+    UBOUND(col, row_width);
+    while (state->pos.col < col) {
+      putglyph(state, state->combine_chars, state->combine_width, state->pos);
+      state->pos.col += state->combine_width;
+    }
+    if (state->pos.col + state->combine_width >= row_width) {
+      if (state->mode.autowrap) {
+        state->at_phantom = 1;
+        cancel_phantom = 0;
+      }
+    }
+    break;
+  }
+
   case 0x63: // DA - ECMA-48 8.3.24
     val = CSI_ARG_OR(args[0], 0);
     if(val == 0)
@@ -1523,7 +1542,7 @@ static int on_csi(const char *leader, const long args[], int argcount, const cha
     UBOUND(state->pos.col, THISROWWIDTH(state)-1);
   }
 
-  updatecursor(state, &oldpos, 1);
+  updatecursor(state, &oldpos, cancel_phantom);
 
 #ifdef DEBUG
   if(state->pos.row < 0 || state->pos.row >= state->rows ||
index 6d5d56a38d389870b314a07e2b2654d3bc82fde5..bae0423b17fd45e60dbbbdc26b17dd6a49465ceb 100644 (file)
@@ -30,6 +30,13 @@ PUSH "\xEF\xBC\x90 "
   putglyph 0xff10 2 0,0
   putglyph 0x20 1 0,2
 
+!UTF-8 emoji wide char
+# U+1F600 = 0xF0 0x9F 0x98 0x80  name: GRINNING FACE
+RESET
+PUSH "\xF0\x9F\x98\x80 "
+  putglyph 0x1f600 2 0,0
+  putglyph 0x20 1 0,2
+
 !UTF-8 combining chars
 # U+0301 = 0xCC 0x81  name: COMBINING ACUTE
 RESET
diff --git a/src/libvterm/t/92lp1805050.test b/src/libvterm/t/92lp1805050.test
new file mode 100644 (file)
index 0000000..f820e67
--- /dev/null
@@ -0,0 +1,128 @@
+INIT
+UTF8 1
+WANTSTATE g
+
+!REP no argument
+RESET
+PUSH "a\e[b"
+  putglyph 0x61 1 0,0
+  putglyph 0x61 1 0,1
+
+!REP zero (zero should be interpreted as one)
+RESET
+PUSH "a\e[0b"
+  putglyph 0x61 1 0,0
+  putglyph 0x61 1 0,1
+
+!REP lowercase a times two
+RESET
+PUSH "a\e[2b"
+  putglyph 0x61 1 0,0
+  putglyph 0x61 1 0,1
+  putglyph 0x61 1 0,2
+
+!REP with UTF-8 1 char
+# U+00E9 = 0xC3 0xA9  name: LATIN SMALL LETTER E WITH ACUTE
+RESET
+PUSH "\xC3\xA9\e[b"
+  putglyph 0xe9 1 0,0
+  putglyph 0xe9 1 0,1
+
+!REP with UTF-8 wide char
+# U+00E9 = 0xC3 0xA9  name: LATIN SMALL LETTER E WITH ACUTE
+RESET
+PUSH "\xEF\xBC\x90\e[b"
+  putglyph 0xff10 2 0,0
+  putglyph 0xff10 2 0,2
+
+!REP with UTF-8 combining character
+RESET
+PUSH "e\xCC\x81\e[b"
+  putglyph 0x65,0x301 1 0,0
+  putglyph 0x65,0x301 1 0,1
+
+!REP till end of line
+RESET
+PUSH "a\e[1000bb"
+  putglyph 0x61 1 0,0
+  putglyph 0x61 1 0,1
+  putglyph 0x61 1 0,2
+  putglyph 0x61 1 0,3
+  putglyph 0x61 1 0,4
+  putglyph 0x61 1 0,5
+  putglyph 0x61 1 0,6
+  putglyph 0x61 1 0,7
+  putglyph 0x61 1 0,8
+  putglyph 0x61 1 0,9
+  putglyph 0x61 1 0,10
+  putglyph 0x61 1 0,11
+  putglyph 0x61 1 0,12
+  putglyph 0x61 1 0,13
+  putglyph 0x61 1 0,14
+  putglyph 0x61 1 0,15
+  putglyph 0x61 1 0,16
+  putglyph 0x61 1 0,17
+  putglyph 0x61 1 0,18
+  putglyph 0x61 1 0,19
+  putglyph 0x61 1 0,20
+  putglyph 0x61 1 0,21
+  putglyph 0x61 1 0,22
+  putglyph 0x61 1 0,23
+  putglyph 0x61 1 0,24
+  putglyph 0x61 1 0,25
+  putglyph 0x61 1 0,26
+  putglyph 0x61 1 0,27
+  putglyph 0x61 1 0,28
+  putglyph 0x61 1 0,29
+  putglyph 0x61 1 0,30
+  putglyph 0x61 1 0,31
+  putglyph 0x61 1 0,32
+  putglyph 0x61 1 0,33
+  putglyph 0x61 1 0,34
+  putglyph 0x61 1 0,35
+  putglyph 0x61 1 0,36
+  putglyph 0x61 1 0,37
+  putglyph 0x61 1 0,38
+  putglyph 0x61 1 0,39
+  putglyph 0x61 1 0,40
+  putglyph 0x61 1 0,41
+  putglyph 0x61 1 0,42
+  putglyph 0x61 1 0,43
+  putglyph 0x61 1 0,44
+  putglyph 0x61 1 0,45
+  putglyph 0x61 1 0,46
+  putglyph 0x61 1 0,47
+  putglyph 0x61 1 0,48
+  putglyph 0x61 1 0,49
+  putglyph 0x61 1 0,50
+  putglyph 0x61 1 0,51
+  putglyph 0x61 1 0,52
+  putglyph 0x61 1 0,53
+  putglyph 0x61 1 0,54
+  putglyph 0x61 1 0,55
+  putglyph 0x61 1 0,56
+  putglyph 0x61 1 0,57
+  putglyph 0x61 1 0,58
+  putglyph 0x61 1 0,59
+  putglyph 0x61 1 0,60
+  putglyph 0x61 1 0,61
+  putglyph 0x61 1 0,62
+  putglyph 0x61 1 0,63
+  putglyph 0x61 1 0,64
+  putglyph 0x61 1 0,65
+  putglyph 0x61 1 0,66
+  putglyph 0x61 1 0,67
+  putglyph 0x61 1 0,68
+  putglyph 0x61 1 0,69
+  putglyph 0x61 1 0,70
+  putglyph 0x61 1 0,71
+  putglyph 0x61 1 0,72
+  putglyph 0x61 1 0,73
+  putglyph 0x61 1 0,74
+  putglyph 0x61 1 0,75
+  putglyph 0x61 1 0,76
+  putglyph 0x61 1 0,77
+  putglyph 0x61 1 0,78
+  putglyph 0x61 1 0,79
+  putglyph 0x62 1 1,0
+
index 12e11801b63ff6a92357ee604460577c64620626..1b2144a9e4a47e749d0b1413bf608fca1202a4c5 100644 (file)
@@ -8,14 +8,16 @@ use IPC::Open2 qw( open2 );
 use POSIX qw( WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG );
 
 my $VALGRIND = 0;
+my $EXECUTABLE = "t/.libs/harness";
 GetOptions(
    'valgrind|v+' => \$VALGRIND,
+   'executable|e=s' => \$EXECUTABLE
 ) or exit 1;
 
 my ( $hin, $hout, $hpid );
 {
    local $ENV{LD_LIBRARY_PATH} = ".libs";
-   my @command = "t/.libs/harness";
+   my @command = $EXECUTABLE;
    unshift @command, "valgrind", "--tool=memcheck", "--leak-check=yes", "--num-callers=25", "--log-file=valgrind.out", "--error-exitcode=126" if $VALGRIND;
 
    $hpid = open2 $hout, $hin, @command or die "Cannot open2 harness - $!";
index b7e6d5caf82c0bfc14f56c89d96dfe2e28a90464..fa05a76cd7b534a418125a5726fd24b6fd72aafb 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    778,
 /**/
     777,
 /**/