]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1015: popup filter gets key with modifier prepended v8.2.1015
authorBram Moolenaar <Bram@vim.org>
Fri, 19 Jun 2020 19:46:52 +0000 (21:46 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 19 Jun 2020 19:46:52 +0000 (21:46 +0200)
Problem:    Popup filter gets key with modifier prepended when using
            modifyOtherKeys.
Solution:   Remove the shift modifier when it is included in the key, also
            when the Alt or Meta modifier is used.

src/misc2.c
src/term.c
src/testdir/test_popupwin.vim
src/version.c

index 41b9f711e7cb26ea9ad5ec678dfe872d62f5ed3e..649cb65c9b91c23ba21b58b2acc4881828741b94 100644 (file)
@@ -2929,9 +2929,11 @@ extract_modifiers(int key, int *modp, int simplify, int *did_simplify)
     if ((modifiers & MOD_MASK_SHIFT) && ASCII_ISALPHA(key))
     {
        key = TOUPPER_ASC(key);
-       // With <C-S-a> and <A-S-a> we keep the shift modifier.
-       // With <S-a> and <S-A> we don't keep the shift modifier.
-       if (simplify || modifiers == MOD_MASK_SHIFT)
+       // With <C-S-a> we keep the shift modifier.
+       // With <S-a>, <A-S-a> and <S-A> we don't keep the shift modifier.
+       if (simplify || modifiers == MOD_MASK_SHIFT
+               || modifiers == (MOD_MASK_SHIFT | MOD_MASK_ALT)
+               || modifiers == (MOD_MASK_SHIFT | MOD_MASK_META))
            modifiers &= ~MOD_MASK_SHIFT;
     }
 
index c4ca33e32d8fbc633da1fed0715ed760d90ebdba..1556c2eeccdc90048f9e53fef15ef69615e23f87 100644 (file)
@@ -4772,11 +4772,14 @@ handle_key_with_modifier(
     // Some keys already have Shift included, pass them as
     // normal keys.  Not when Ctrl is also used, because <C-H>
     // and <C-S-H> are different.
-    if (modifiers == MOD_MASK_SHIFT
+    // Also for <A-S-a> and <M-S-a>.
+    if ((modifiers == MOD_MASK_SHIFT
+               || modifiers == (MOD_MASK_SHIFT | MOD_MASK_ALT)
+               || modifiers == (MOD_MASK_SHIFT | MOD_MASK_META))
            && ((key >= '@' && key <= 'Z')
                || key == '^' || key == '_'
                || (key >= '{' && key <= '~')))
-       modifiers = 0;
+       modifiers &= ~MOD_MASK_SHIFT;
 
     // When used with Ctrl we always make a letter upper case,
     // so that mapping <C-H> and <C-h> are the same.  Typing
index 2188c2c6a9262fd4d25c5bde97bf4c3e4cbfa0d9..b6f718c842a9359acee354aba93367aab183453e 100644 (file)
@@ -2079,9 +2079,9 @@ func Test_popup_scrollbar()
   " check size with wrapping lines
   call term_sendkeys(buf, "j")
   call VerifyScreenDump(buf, 'Test_popupwin_scroll_12', {})
-  call term_sendkeys(buf, "x")
 
   " clean up
+  call term_sendkeys(buf, "x")
   call StopVimInTerminal(buf)
   call delete('XtestPopupScroll')
 endfunc
@@ -3347,6 +3347,12 @@ func Test_popupwin_filter_input_multibyte()
   call feedkeys("\u301b", 'xt')
   call assert_equal([0xe3, 0x80, 0x9b], g:bytes)
 
+  if has('unix')
+    " with modifyOtherKeys <M-S-a> does not include a modifier sequence
+    call feedkeys("\<Esc>[27;4;65~", 'Lx!')
+    call assert_equal([0xc3, 0x81], g:bytes)
+  endif
+
   call popup_clear()
   delfunc MyPopupFilter
   unlet g:bytes
index 3ccf1dd09489e5cc74306e2d5a963a90197b4514..8b5ad4e483dab1a93d971a2ed1feb006828f2d57 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1015,
 /**/
     1014,
 /**/