summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-02-20 19:05:10 +0000
committerBram Moolenaar <Bram@vim.org>2022-02-20 19:05:10 +0000
commitad6c45f62558e03d3e3a927b3fe4dbaf30a36bef (patch)
treee9619435354b3b6b9b4725c63c8cd99b6f3c295d
parentc1e6c7bafec1115b690c745a28e1a6338750b137 (diff)
downloadvim-git-ad6c45f62558e03d3e3a927b3fe4dbaf30a36bef.tar.gz
patch 8.2.4427: getchar() may return modifiers if no character is availablev8.2.4427
Problem: getchar() may return modifiers if no character is available. Solution: Do not process modifiers when there is no character. (closes #9806)
-rw-r--r--src/getchar.c2
-rw-r--r--src/testdir/test_functions.vim4
-rw-r--r--src/version.c2
3 files changed, 7 insertions, 1 deletions
diff --git a/src/getchar.c b/src/getchar.c
index 2068ca43c..fcc9b9ac4 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2103,7 +2103,7 @@ getchar_common(typval_T *argvars, typval_T *rettv)
set_vim_var_nr(VV_MOUSE_COL, 0);
rettv->vval.v_number = n;
- if (IS_SPECIAL(n) || mod_mask != 0)
+ if (n != 0 && (IS_SPECIAL(n) || mod_mask != 0))
{
char_u temp[10]; // modifier: 3, mbyte-char: 6, NUL: 1
int i = 0;
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index e2820db9c..e22a0c6ba 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -1818,6 +1818,10 @@ func Test_getchar()
call assert_equal('', getcharstr(0))
call assert_equal('', getcharstr(1))
+ call feedkeys("\<M-F2>", '')
+ call assert_equal("\<M-F2>", getchar(0))
+ call assert_equal(0, getchar(0))
+
call setline(1, 'xxxx')
call test_setmouse(1, 3)
let v:mouse_win = 9
diff --git a/src/version.c b/src/version.c
index 6c5ca2bdd..c5f5c22f9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4427,
+/**/
4426,
/**/
4425,