patch 8.2.4237: record buffer wrong if character in Select mode was not typed

Problem:    Record buffer wrong if character in Select mode was not typed.
Solution:   Only delete the tail from the record buffer if the character was
            typed. (closes #9650)
diff --git a/src/normal.c b/src/normal.c
index e69c141..2184036 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -1054,9 +1054,10 @@
 	// be mapped in Insert mode.  Required for ":lmap" to work.
 	len = ins_char_typebuf(vgetc_char, vgetc_mod_mask);
 
-	// When recording the character will be recorded again, remove the
-	// previously recording.
-	ungetchars(len);
+	// When recording and gotchars() was called the character will be
+	// recorded again, remove the previous recording.
+	if (KeyTyped)
+	    ungetchars(len);
 
 	if (restart_edit != 0)
 	    c = 'd';
diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim
index 89d9d7c..078b78d 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -745,6 +745,17 @@
   sil norm q00
   sil norm q
   call assert_equal('0ext', getline(1))
+
+  %delete
+  let @r = ''
+  call setline(1, ['abc', 'abc', 'abc'])
+  smap <F2> <Right><Right>,
+  call feedkeys("qrgh\<F2>Dk\<Esc>q", 'xt')
+  call assert_equal("gh\<F2>Dk\<Esc>", @r)
+  norm j0@rj0@@
+  call assert_equal([',Dk', ',Dk', ',Dk'], getline(1, 3))
+  sunmap <F2>
+
   bwipe!
 endfunc
 
diff --git a/src/version.c b/src/version.c
index 23b29da..04afe95 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4237,
+/**/
     4236,
 /**/
     4235,