patch 8.0.1639: libvterm code lags behind master

Problem:    Libvterm code lags behind master.
Solution:   Sync to head, solve merge problems.
diff --git a/src/libvterm/t/10state_putglyph.test b/src/libvterm/t/10state_putglyph.test
index 5665bce..6d5d56a 100644
--- a/src/libvterm/t/10state_putglyph.test
+++ b/src/libvterm/t/10state_putglyph.test
@@ -17,6 +17,12 @@
   putglyph 0xc1 1 0,0
   putglyph 0xe9 1 0,1
 
+!UTF-8 split writes
+RESET
+PUSH "\xC3"
+PUSH "\x81"
+  putglyph 0xc1 1 0,0
+
 !UTF-8 wide char
 # U+FF10 = 0xEF 0xBC 0x90  name: FULLWIDTH DIGIT ZERO
 RESET
diff --git a/src/libvterm/t/25state_input.test b/src/libvterm/t/25state_input.test
index d54de83..a5119fb 100644
--- a/src/libvterm/t/25state_input.test
+++ b/src/libvterm/t/25state_input.test
@@ -130,3 +130,14 @@
   output "\e[200~"
 PASTE END
   output "\e[201~"
+
+!Focus reporting disabled
+FOCUS IN
+FOCUS OUT
+
+!Focus reporting enabled
+PUSH "\e[?1004h"
+FOCUS IN
+  output "\e[I"
+FOCUS OUT
+  output "\e[O"
diff --git a/src/libvterm/t/26state_query.test b/src/libvterm/t/26state_query.test
index bfe8f69..3ace2d5 100644
--- a/src/libvterm/t/26state_query.test
+++ b/src/libvterm/t/26state_query.test
@@ -58,5 +58,5 @@
 PUSH "\e F"
 
 !Truncation on attempted buffer overflow
-PUSH "\e[6n" x 20
-  output "\e[10;10R" x 7
+PUSH "\e[6n" x 30
+  output "\e[10;10R" x 24
diff --git a/src/libvterm/t/harness.c b/src/libvterm/t/harness.c
index 2ba77f0..e2c7295 100644
--- a/src/libvterm/t/harness.c
+++ b/src/libvterm/t/harness.c
@@ -233,6 +233,9 @@
   case VTERM_VALUETYPE_COLOR:
     printf("settermprop %d rgb(%d,%d,%d)\n", prop, val->color.red, val->color.green, val->color.blue);
     return 1;
+
+  case VTERM_N_VALUETYPES:
+    return 0;
   }
 
   return 0;
@@ -316,6 +319,9 @@
   case VTERM_ATTR_BACKGROUND:
     state_pen.background = val->color;
     break;
+
+  case VTERM_N_ATTRS:
+    return 0;
   }
 
   return 1;
@@ -651,6 +657,16 @@
         goto abort_line;
     }
 
+    else if(strstartswith(line, "FOCUS ")) {
+      char *linep = line + 6;
+      if(streq(linep, "IN"))
+        vterm_state_focus_in(state);
+      else if(streq(linep, "OUT"))
+        vterm_state_focus_out(state);
+      else
+        goto abort_line;
+    }
+
     else if(strstartswith(line, "MOUSEMOVE ")) {
       char *linep = line + 10;
       int row, col, len;