summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-05-17 16:04:44 +0200
committerBram Moolenaar <Bram@vim.org>2020-05-17 16:04:44 +0200
commitd4a5f40c0cc45fdfac01df0e408d557006eb0206 (patch)
treee5c14557ec2450e5ccaeb8dbc013902fd27eed30
parented37d9b3241abe7c302c7ac606df80037aecdb46 (diff)
downloadvim-git-d4a5f40c0cc45fdfac01df0e408d557006eb0206.tar.gz
patch 8.2.0778: libvterm code lags behind the upstream versionv8.2.0778
Problem: Libvterm code lags behind the upstream version. Solution: Include revisions 720 - 723.
-rw-r--r--src/libvterm/Makefile2
-rw-r--r--src/libvterm/src/state.c21
-rw-r--r--src/libvterm/t/10state_putglyph.test7
-rw-r--r--src/libvterm/t/92lp1805050.test128
-rw-r--r--src/libvterm/t/run-test.pl4
-rw-r--r--src/version.c2
6 files changed, 161 insertions, 3 deletions
diff --git a/src/libvterm/Makefile b/src/libvterm/Makefile
index e56c10adf..f231dd3b5 100644
--- 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
diff --git a/src/libvterm/src/state.c b/src/libvterm/src/state.c
index 6b2583af9..89803016f 100644
--- a/src/libvterm/src/state.c
+++ b/src/libvterm/src/state.c
@@ -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 ||
diff --git a/src/libvterm/t/10state_putglyph.test b/src/libvterm/t/10state_putglyph.test
index 6d5d56a38..bae0423b1 100644
--- 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
diff --git a/src/libvterm/t/92lp1805050.test b/src/libvterm/t/92lp1805050.test
new file mode 100644
index 000000000..f820e675c
--- /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
+
diff --git a/src/libvterm/t/run-test.pl b/src/libvterm/t/run-test.pl
index 12e11801b..1b2144a9e 100644
--- 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 - $!";
diff --git a/src/version.c b/src/version.c
index b7e6d5caf..fa05a76cd 100644
--- 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,