patch 8.2.0258: modifyOtherKeys cannot be temporarily disabled

Problem:    ModifyOtherKeys cannot be temporarily disabled.
Solution:   Add echoraw() with an example for modifyOtherKeys.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index a0f2994..3e1a462 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -60,6 +60,7 @@
 #endif
 static void f_deepcopy(typval_T *argvars, typval_T *rettv);
 static void f_did_filetype(typval_T *argvars, typval_T *rettv);
+static void f_echoraw(typval_T *argvars, typval_T *rettv);
 static void f_empty(typval_T *argvars, typval_T *rettv);
 static void f_environ(typval_T *argvars, typval_T *rettv);
 static void f_escape(typval_T *argvars, typval_T *rettv);
@@ -394,6 +395,7 @@
     {"did_filetype",	0, 0, 0,	  &t_number,	f_did_filetype},
     {"diff_filler",	1, 1, FEARG_1,	  &t_number,	f_diff_filler},
     {"diff_hlID",	2, 2, FEARG_1,	  &t_number,	f_diff_hlID},
+    {"echoraw",		1, 1, FEARG_1,	  &t_number,	f_echoraw},
     {"empty",		1, 1, FEARG_1,	  &t_number,	f_empty},
     {"environ",		0, 0, 0,	  &t_dict_string, f_environ},
     {"escape",		2, 2, FEARG_1,	  &t_string,	f_escape},
@@ -1814,6 +1816,21 @@
 }
 
 /*
+ * "echoraw({expr})" function
+ */
+    static void
+f_echoraw(typval_T *argvars, typval_T *rettv UNUSED)
+{
+    char_u *str = tv_get_string_chk(&argvars[0]);
+
+    if (str != NULL && *str != NUL)
+    {
+	out_str(str);
+	out_flush();
+    }
+}
+
+/*
  * "empty({expr})" function
  */
     static void
diff --git a/src/testdir/dumps/Test_functions_echoraw.dump b/src/testdir/dumps/Test_functions_echoraw.dump
new file mode 100644
index 0000000..f27cd03
--- /dev/null
+++ b/src/testdir/dumps/Test_functions_echoraw.dump
@@ -0,0 +1,5 @@
+>x+0&#ffffff0|e|l@1|o| @34
+|~+0#4040ff13&| @38
+|~| @38
+|~| @38
+| +0#0000000&@21|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index 9173e85..c748854 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -2,6 +2,7 @@
 source shared.vim
 source check.vim
 source term_util.vim
+source screendump.vim
 
 " Must be done first, since the alternate buffer must be unset.
 func Test_00_bufexists()
@@ -2017,3 +2018,19 @@
   " uniq()
   call assert_equal([0, 1, 2, 3, 4], uniq(range(5)))
 endfunc
+
+func Test_echoraw()
+  CheckScreendump
+
+  " Normally used for escape codes, but let's test with a CR.
+  let lines =<< trim END
+    call echoraw("hello\<CR>x")
+  END
+  call writefile(lines, 'XTest_echoraw')
+  let buf = RunVimInTerminal('-S XTest_echoraw', {'rows': 5, 'cols': 40})
+  call VerifyScreenDump(buf, 'Test_functions_echoraw', {})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('XTest_echoraw')
+endfunc
diff --git a/src/version.c b/src/version.c
index 70ea449..2720dc6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    258,
+/**/
     257,
 /**/
     256,