changeset 19400:bd9069d21c5d v8.2.0258

patch 8.2.0258: modifyOtherKeys cannot be temporarily disabled Commit: https://github.com/vim/vim/commit/4132eb505c506f7a0710b03a275d1c5a247e4196 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Feb 14 16:53:00 2020 +0100 patch 8.2.0258: modifyOtherKeys cannot be temporarily disabled Problem: ModifyOtherKeys cannot be temporarily disabled. Solution: Add echoraw() with an example for modifyOtherKeys.
author Bram Moolenaar <Bram@vim.org>
date Fri, 14 Feb 2020 17:00:04 +0100
parents 99feeb1a4af7
children 963d6905840e
files runtime/doc/eval.txt src/evalfunc.c src/testdir/dumps/Test_functions_echoraw.dump src/testdir/test_functions.vim src/version.c
diffstat 5 files changed, 56 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2020 Feb 03
+*eval.txt*	For Vim version 8.2.  Last change: 2020 Feb 14
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2414,6 +2414,7 @@ deletebufline({expr}, {first} [, {last}]
 did_filetype()			Number	|TRUE| if FileType autocmd event used
 diff_filler({lnum})		Number	diff filler lines about {lnum}
 diff_hlID({lnum}, {col})	Number	diff highlighting at {lnum}/{col}
+echoraw({expr})			none	output {expr} as-is
 empty({expr})			Number	|TRUE| if {expr} is empty
 environ()			Dict	return environment variables
 escape({string}, {chars})	String	escape {chars} in {string} with '\'
@@ -2899,6 +2900,7 @@ win_id2win({expr})		Number	get window nr
 win_screenpos({nr})		List	get screen position of window {nr}
 win_splitmove({nr}, {target} [, {options}])
 				Number	move window {nr} to split of {target}
+win_type([{nr}])		String	type of window {nr}
 winbufnr({nr})			Number	buffer number of window {nr}
 wincol()			Number	window column of the cursor
 winheight({nr})			Number	height of window {nr}
@@ -3944,6 +3946,17 @@ diff_hlID({lnum}, {col})				*diff_hlID()
 		Can also be used as a |method|: >
 			GetLnum()->diff_hlID(col)
 
+
+echoraw({expr})						*echoraw()*
+		Output {expr} as-is, including unprintable characters.  This
+		can be used to output a terminal code. For example, to disable
+		modifyOtherKeys: >
+			call echoraw(&t_TE)
+<		and to enable it again: >
+			call echoraw(&t_TI)
+<		Use with care, you can mess up the terminal this way.
+
+
 empty({expr})						*empty()*
 		Return the Number 1 if {expr} is empty, zero otherwise.
 		- A |List| or |Dictionary| is empty when it does not have any
@@ -10402,6 +10415,7 @@ win_splitmove({nr}, {target} [, {options
 		Can also be used as a |method|: >
 			GetWinid()->win_splitmove(target)
 <
+
 							*winbufnr()*
 winbufnr({nr})	The result is a Number, which is the number of the buffer
 		associated with window {nr}.  {nr} can be the window number or
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -60,6 +60,7 @@ static void f_debugbreak(typval_T *argva
 #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 @@ static funcentry_T global_functions[] =
     {"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 @@ f_did_filetype(typval_T *argvars UNUSED,
 }
 
 /*
+ * "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
new file mode 100644
--- /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| 
--- 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 @@ func Test_range()
   " 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
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    258,
+/**/
     257,
 /**/
     256,