patch 8.2.0798: libvterm code lags behind the upstream version
Problem: Libvterm code lags behind the upstream version.
Solution: Include revisions 755 - 758.
diff --git a/src/libvterm/t/02parser.test b/src/libvterm/t/02parser.test
index 66d487d..4a4a65b 100644
--- a/src/libvterm/t/02parser.test
+++ b/src/libvterm/t/02parser.test
@@ -132,15 +132,23 @@
!OSC BEL
PUSH "\e]1;Hello\x07"
- osc "1;Hello"
+ osc [1 "Hello"]
!OSC ST (7bit)
PUSH "\e]1;Hello\e\\"
- osc "1;Hello"
+ osc [1 "Hello"]
!OSC ST (8bit)
PUSH "\x{9d}1;Hello\x9c"
- osc "1;Hello"
+ osc [1 "Hello"]
+
+!OSC in parts
+PUSH "\e]52;abc"
+ osc [52 "abc"
+PUSH "def"
+ osc "def"
+PUSH "ghi\e\\"
+ osc "ghi"]
!Escape cancels OSC, starts Escape
PUSH "\e]Something\e9"
@@ -152,20 +160,21 @@
!C0 in OSC interrupts and continues
PUSH "\e]2;\nBye\x07"
+ osc [2 ""
control 10
- osc "2;Bye"
+ osc "Bye"]
!DCS BEL
PUSH "\ePHello\x07"
- dcs "Hello"
+ dcs ["Hello"]
!DCS ST (7bit)
PUSH "\ePHello\e\\"
- dcs "Hello"
+ dcs ["Hello"]
!DCS ST (8bit)
PUSH "\x{90}Hello\x9c"
- dcs "Hello"
+ dcs ["Hello"]
!Escape cancels DCS, starts Escape
PUSH "\ePSomething\e9"
@@ -177,8 +186,9 @@
!C0 in OSC interrupts and continues
PUSH "\ePBy\ne\x07"
+ dcs ["By"
control 10
- dcs "Bye"
+ dcs "e"]
!NUL ignored
PUSH "\x{00}"
diff --git a/src/libvterm/t/18state_termprops.test b/src/libvterm/t/18state_termprops.test
index 9e6928a..83c333f 100644
--- a/src/libvterm/t/18state_termprops.test
+++ b/src/libvterm/t/18state_termprops.test
@@ -33,4 +33,10 @@
!Title
PUSH "\e]2;Here is my title\a"
- settermprop 4 "Here is my title"
+ settermprop 4 ["Here is my title"]
+
+!Title split write
+PUSH "\e]2;Here is"
+ settermprop 4 ["Here is"
+PUSH " another title\a"
+ settermprop 4 " another title"]
diff --git a/src/libvterm/t/29state_fallback.test b/src/libvterm/t/29state_fallback.test
index adf1c23..7995dd1 100644
--- a/src/libvterm/t/29state_fallback.test
+++ b/src/libvterm/t/29state_fallback.test
@@ -12,8 +12,8 @@
!Unrecognised OSC
PUSH "\e]27;Something\e\\"
- osc "27;Something"
+ osc [27 "Something"]
!Unrecognised DCS
PUSH "\ePz123\e\\"
- dcs "z123"
+ dcs ["z123"]
diff --git a/src/libvterm/t/68screen_termprops.test b/src/libvterm/t/68screen_termprops.test
index adf7ec2..bba6660 100644
--- a/src/libvterm/t/68screen_termprops.test
+++ b/src/libvterm/t/68screen_termprops.test
@@ -14,4 +14,4 @@
!Title
PUSH "\e]2;Here is my title\a"
- settermprop 4 "Here is my title"
+ settermprop 4 ["Here is my title"]
diff --git a/src/libvterm/t/harness.c b/src/libvterm/t/harness.c
index 289d829..92882fd 100644
--- a/src/libvterm/t/harness.c
+++ b/src/libvterm/t/harness.c
@@ -153,21 +153,44 @@
return 1;
}
-static int parser_osc(const char *command, size_t cmdlen, void *user UNUSED)
+static int parser_osc(int command, VTermStringFragment frag, void *user UNUSED)
{
printf("osc ");
- printhex(command, cmdlen);
+
+ if(frag.initial) {
+ if(command == -1)
+ printf("[");
+ else
+ printf("[%d;", command);
+ }
+
+ printhex(frag.str, frag.len);
+
+ if(frag.final)
+ printf("]");
+
printf("\n");
return 1;
}
-static int parser_dcs(const char *command, size_t cmdlen, void *user UNUSED)
+static int parser_dcs(const char *command, size_t commandlen, VTermStringFragment frag, void *user UNUSED)
{
-
printf("dcs ");
- printhex(command, cmdlen);
+
+ if(frag.initial) {
+ size_t i;
+ printf("[");
+ for(i = 0; i < commandlen; i++)
+ printf("%02x", command[i]);
+ }
+
+ printhex(frag.str, frag.len);
+
+ if(frag.final)
+ printf("]");
+
printf("\n");
return 1;
@@ -239,7 +262,8 @@
printf("settermprop %d %d\n", prop, val->number);
return 1;
case VTERM_VALUETYPE_STRING:
- printf("settermprop %d \"%s\"\n", prop, val->string);
+ printf("settermprop %d %s\"%.*s\"%s\n", prop,
+ val->string.initial ? "[" : "", val->string.len, val->string.str, val->string.final ? "]" : "");
return 1;
case VTERM_VALUETYPE_COLOR:
printf("settermprop %d rgb(%d,%d,%d)\n", prop, val->color.red, val->color.green, val->color.blue);
@@ -262,7 +286,7 @@
return 1;
printf("putglyph ");
- for(i = 0; info->chars[i]; i++)
+ for(i = 0; i < VTERM_MAX_CHARS_PER_CELL && info->chars[i]; i++)
printf(i ? ",%x" : "%x", info->chars[i]);
printf(" %d %d,%d", info->width, pos.row, pos.col);
if(info->protected_cell)
diff --git a/src/libvterm/t/run-test.pl b/src/libvterm/t/run-test.pl
index 5f3c78d..9f48c5c 100644
--- a/src/libvterm/t/run-test.pl
+++ b/src/libvterm/t/run-test.pl
@@ -11,7 +11,8 @@
my $EXECUTABLE = "t/.libs/harness";
GetOptions(
'valgrind|v+' => \$VALGRIND,
- 'executable|e=s' => \$EXECUTABLE
+ 'executable|e=s' => \$EXECUTABLE,
+ 'fail-early|F' => \(my $FAIL_EARLY),
) or exit 1;
my ( $hin, $hout, $hpid );
@@ -65,6 +66,7 @@
}
$exitcode = 1 if $fail_printed;
+ exit $exitcode if $exitcode and $FAIL_EARLY;
}
sub do_line
@@ -105,8 +107,15 @@
elsif( $line =~ m/^csi (\S+) (.*)$/ ) {
$line = sprintf "csi %02x %s", eval($1), $2; # TODO
}
- elsif( $line =~ m/^(escape|osc|dcs) (.*)$/ ) {
- $line = "$1 " . join "", map sprintf("%02x", $_), unpack "C*", eval($2);
+ elsif( $line =~ m/^(osc) (\[\d+)? *(.*?)(\]?)$/ ) {
+ my ( $cmd, $initial, $data, $final ) = ( $1, $2, $3, $4 );
+ $initial //= "";
+ $initial .= ";" if $initial =~ m/\d+/;
+
+ $line = "$cmd $initial" . join( "", map sprintf("%02x", $_), unpack "C*", eval($data) ) . "$final";
+ }
+ elsif( $line =~ m/^(escape|dcs) (\[?)(.*?)(\]?)$/ ) {
+ $line = "$1 $2" . join( "", map sprintf("%02x", $_), unpack "C*", eval($3) ) . "$4";
}
elsif( $line =~ m/^putglyph (\S+) (.*)$/ ) {
$line = "putglyph " . join( ",", map sprintf("%x", $_), eval($1) ) . " $2";
@@ -139,6 +148,7 @@
"# Expected: $want\n" .
"# Actual: $response\n";
$exitcode = 1;
+ exit $exitcode if $exitcode and $FAIL_EARLY;
}
}
# Assertions start with '?'
@@ -162,6 +172,7 @@
"# Expected: $expectation\n" .
"# Actual: $response\n";
$exitcode = 1;
+ exit $exitcode if $exitcode and $FAIL_EARLY;
}
}
# Test controls start with '$'