changeset 31588:e94571ac4134 v9.0.1126

patch 9.0.1126: bracketed paste can be enabled when it is not recognized Commit: https://github.com/vim/vim/commit/fc966c19f85afc6b856a06c00a93c4fe96280d31 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 1 18:04:33 2023 +0000 patch 9.0.1126: bracketed paste can be enabled when it is not recognized Problem: Bracketed paste can be enabled when pasted text is not recognized. Solution: Output t_BE only when t_PS and t_PE are set.
author Bram Moolenaar <Bram@vim.org>
date Sun, 01 Jan 2023 19:15:03 +0100
parents 40f9cc5fc462
children 55ea4210d8c6
files runtime/doc/term.txt src/edit.c src/normal.c src/proto/term.pro src/term.c src/version.c
diffstat 6 files changed, 27 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -1,4 +1,4 @@
-*term.txt*      For Vim version 9.0.  Last change: 2022 Dec 31
+*term.txt*      For Vim version 9.0.  Last change: 2023 Jan 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -118,6 +118,10 @@ have a problem with this, disable bracke
 If this is done while Vim is running the 't_BD' will be sent to the terminal
 to disable bracketed paste.
 
+If |t_PS| or |t_PE| is not set, then |t_BE| will not be used.  This is to make
+sure that bracketed paste is not enabled when the escape codes surrounding
+pasted text cannot be recognized.
+
 If your terminal supports bracketed paste, but the options are not set
 automatically, you can try using something like this: >
 
--- a/src/edit.c
+++ b/src/edit.c
@@ -3714,7 +3714,7 @@ ins_esc(
 	MAY_WANT_TO_LOG_THIS;
 
 	// Re-enable bracketed paste mode.
-	out_str(T_BE);
+	out_str_t_BE();
 
 	// Re-enable modifyOtherKeys.
 	out_str_t_TI();
--- a/src/normal.c
+++ b/src/normal.c
@@ -454,7 +454,7 @@ normal_cmd_get_more_chars(
 	    MAY_WANT_TO_LOG_THIS;
 
 	    // Re-enable bracketed paste mode and modifyOtherKeys
-	    out_str(T_BE);
+	    out_str_t_BE();
 	    out_str_t_TI();
 	}
 
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -49,6 +49,7 @@ void shell_resized_check(void);
 void set_shellsize(int width, int height, int mustset);
 void out_str_t_TE(void);
 void out_str_t_TI(void);
+void out_str_t_BE(void);
 void may_send_t_RK(void);
 void settmode(tmode_T tmode);
 void starttermcap(void);
--- a/src/term.c
+++ b/src/term.c
@@ -3757,6 +3757,21 @@ out_str_t_TI(void)
 }
 
 /*
+ * Output T_BE, but only when t_PS and t_PE are set.
+ */
+    void
+out_str_t_BE(void)
+{
+    char_u *p;
+
+    if (T_BE == NULL || *T_BE == NUL
+	    || (p = find_termcode((char_u *)"PS")) == NULL || *p == NUL
+	    || (p = find_termcode((char_u *)"PE")) == NULL || *p == NUL)
+	return;
+    out_str(T_BE);
+}
+
+/*
  * If t_TI was recently sent and there is no typeahead or work to do, now send
  * t_RK.  This is postponed to avoid the response arriving in a shell command
  * or after Vim exits.
@@ -3834,7 +3849,7 @@ settmode(tmode_T tmode)
 		}
 		else
 		{
-		    out_str(T_BE);	// enable bracketed paste mode (should
+		    out_str_t_BE();	// enable bracketed paste mode (should
 					// be before mch_settmode().
 		    out_str_t_TI();	// possibly enables modifyOtherKeys
 		}
@@ -3862,7 +3877,7 @@ starttermcap(void)
 	out_str(T_TI);			// start termcap mode
 	out_str_t_TI();			// start "raw" mode
 	out_str(T_KS);			// start "keypad transmit" mode
-	out_str(T_BE);			// enable bracketed paste mode
+	out_str_t_BE();			// enable bracketed paste mode
 
 #if defined(UNIX) || defined(VMS)
 	// Enable xterm's focus reporting mode when 'esckeys' is set.
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1126,
+/**/
     1125,
 /**/
     1124,