patch 8.1.2134: modifier keys are not always recognized

Problem:    Modifier keys are not always recognized.
Solution:   Handle key codes generated by xterm with modifyOtherKeys set.
            Add this to libvterm so we can debug it.
diff --git a/src/libvterm/include/vterm.h b/src/libvterm/include/vterm.h
index 02ea91c..28d0a10 100644
--- a/src/libvterm/include/vterm.h
+++ b/src/libvterm/include/vterm.h
@@ -200,6 +200,7 @@
 
 size_t vterm_output_read(VTerm *vt, char *buffer, size_t len);
 
+int vterm_is_modify_other_keys(VTerm *vt);
 void vterm_keyboard_unichar(VTerm *vt, uint32_t c, VTermModifier mod);
 void vterm_keyboard_key(VTerm *vt, VTermKey key, VTermModifier mod);
 
diff --git a/src/libvterm/src/keyboard.c b/src/libvterm/src/keyboard.c
index 62338c6..95b962e 100644
--- a/src/libvterm/src/keyboard.c
+++ b/src/libvterm/src/keyboard.c
@@ -4,10 +4,21 @@
 
 #include "utf8.h"
 
+int vterm_is_modify_other_keys(VTerm *vt)
+{
+  return vt->state->mode.modify_other_keys;
+}
+
+
 void vterm_keyboard_unichar(VTerm *vt, uint32_t c, VTermModifier mod)
 {
   int needs_CSIu;
 
+  if (vt->state->mode.modify_other_keys && mod != 0) {
+    vterm_push_output_sprintf_ctrl(vt, C1_CSI, "27;%d;%d~", mod+1, c);
+    return;
+  }
+
   // The shift modifier is never important for Unicode characters
   // apart from Space
   if(c != ' ')
diff --git a/src/libvterm/src/state.c b/src/libvterm/src/state.c
index 1f7ac02..6b2583a 100644
--- a/src/libvterm/src/state.c
+++ b/src/libvterm/src/state.c
@@ -1334,6 +1334,11 @@
     vterm_state_setpen(state, args, argcount);
     break;
 
+  case LEADER('>', 0x6d): // xterm resource modifyOtherKeys
+    if (argcount == 2 && args[0] == 4)
+      state->mode.modify_other_keys = args[1] == 2;
+    break;
+
   case 0x6e: // DSR - ECMA-48 8.3.35
   case LEADER('?', 0x6e): // DECDSR
     val = CSI_ARG_OR(args[0], 0);
diff --git a/src/libvterm/src/vterm_internal.h b/src/libvterm/src/vterm_internal.h
index 5b6198b..e2b8b15 100644
--- a/src/libvterm/src/vterm_internal.h
+++ b/src/libvterm/src/vterm_internal.h
@@ -124,6 +124,7 @@
     unsigned int leftrightmargin:1;
     unsigned int bracketpaste:1;
     unsigned int report_focus:1;
+    unsigned int modify_other_keys:1;
   } mode;
 
   VTermEncodingInstance encoding[4], encoding_utf8;