changeset 20448:89fade12827d v8.2.0778

patch 8.2.0778: libvterm code lags behind the upstream version Commit: https://github.com/vim/vim/commit/d4a5f40c0cc45fdfac01df0e408d557006eb0206 Author: Bram Moolenaar <Bram@vim.org> Date: Sun May 17 16:04:44 2020 +0200 patch 8.2.0778: libvterm code lags behind the upstream version Problem: Libvterm code lags behind the upstream version. Solution: Include revisions 720 - 723.
author Bram Moolenaar <Bram@vim.org>
date Sun, 17 May 2020 16:15:03 +0200
parents 4fdc8319ab24
children 3f2560fc4bbc
files src/libvterm/Makefile src/libvterm/src/state.c src/libvterm/t/10state_putglyph.test src/libvterm/t/92lp1805050.test src/libvterm/t/run-test.pl src/version.c
diffstat 6 files changed, 161 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/libvterm/Makefile
+++ b/src/libvterm/Makefile
@@ -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
--- a/src/libvterm/src/state.c
+++ b/src/libvterm/src/state.c
@@ -922,6 +922,7 @@ static int on_csi(const char *leader, co
   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, co
     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, co
     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 ||
--- a/src/libvterm/t/10state_putglyph.test
+++ b/src/libvterm/t/10state_putglyph.test
@@ -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
new file mode 100644
--- /dev/null
+++ b/src/libvterm/t/92lp1805050.test
@@ -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
+
--- a/src/libvterm/t/run-test.pl
+++ b/src/libvterm/t/run-test.pl
@@ -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 - $!";
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    778,
+/**/
     777,
 /**/
     776,