diff src/libvterm/src/keyboard.c @ 31156:0ecb16d5f86f v9.0.0912

patch 9.0.0912: libvterm with modifyOtherKeys level 2 does not match xterm Commit: https://github.com/vim/vim/commit/c896adbcdee8b2296433a61c1f009aae9f68a594 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Nov 19 19:02:40 2022 +0000 patch 9.0.0912: libvterm with modifyOtherKeys level 2 does not match xterm Problem: libvterm with modifyOtherKeys level 2 does not match xterm. Solution: Adjust key code escape sequences to be the same as what xterm sends in modifyOtherKeys level 2 mode. Check the value of no_reduce_keys before using it.
author Bram Moolenaar <Bram@vim.org>
date Sat, 19 Nov 2022 20:15:03 +0100
parents 82336c3b679d
children dcde141f2d1e
line wrap: on
line diff
--- a/src/libvterm/src/keyboard.c
+++ b/src/libvterm/src/keyboard.c
@@ -14,7 +14,7 @@ int vterm_is_modify_other_keys(VTerm *vt
 void vterm_keyboard_unichar(VTerm *vt, uint32_t c, VTermModifier mod)
 {
   // VIM: added modifyOtherKeys support
-  if (vt->state->mode.modify_other_keys && mod != 0) {
+  if (vterm_is_modify_other_keys(vt) && mod != 0) {
     vterm_push_output_sprintf_ctrl(vt, C1_CSI, "27;%d;%d~", mod+1, c);
     return;
   }
@@ -184,7 +184,9 @@ void vterm_keyboard_key(VTerm *vt, VTerm
     break;
 
   case KEYCODE_LITERAL: case_LITERAL:
-    if(mod & (VTERM_MOD_SHIFT|VTERM_MOD_CTRL))
+    if (vterm_is_modify_other_keys(vt) && mod != 0)
+      vterm_push_output_sprintf_ctrl(vt, C1_CSI, "27;%d;%d~", mod+1, k.literal);
+    else if(mod & (VTERM_MOD_SHIFT|VTERM_MOD_CTRL))
       vterm_push_output_sprintf_ctrl(vt, C1_CSI, "%d;%du", k.literal, mod+1);
     else
       vterm_push_output_sprintf(vt, mod & VTERM_MOD_ALT ? ESC_S "%c" : "%c", k.literal);