changeset 30637:ae1113e53ce3 v9.0.0653

patch 9.0.0653: BS and DEL do not work properly in an interacive shell Commit: https://github.com/vim/vim/commit/01c34e7d10e3dbd73d18a3dd79a48748c4147eaf Author: Bram Moolenaar <Bram@vim.org> Date: Mon Oct 3 20:24:39 2022 +0100 patch 9.0.0653: BS and DEL do not work properly in an interacive shell Problem: BS and DEL do not work properly in an interacive shell. (Gary Johnson) Solution: Adjust the length for replaced codes.
author Bram Moolenaar <Bram@vim.org>
date Mon, 03 Oct 2022 21:30:04 +0200
parents 21fb40734ad8
children 15b6fa76adcc
files src/os_unix.c src/os_win32.c src/proto/term.pro src/term.c src/version.c
diffstat 5 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5106,7 +5106,7 @@ mch_call_shell_fork(
 			    }
 			}
 
-			term_replace_bs_del_keycode(ta_buf, ta_len, len);
+			len = term_replace_bs_del_keycode(ta_buf, ta_len, len);
 
 			/*
 			 * For pipes: echo the typed characters.
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -4531,7 +4531,7 @@ mch_system_piped(char *cmd, int options)
 			}
 		    }
 
-		    term_replace_bs_del_keycode(ta_buf, ta_len, len);
+		    len = term_replace_bs_del_keycode(ta_buf, ta_len, len);
 
 		    /*
 		     * For pipes: echo the typed characters.  For a pty this
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -86,5 +86,5 @@ void update_tcap(int attr);
 void swap_tcap(void);
 void ansi_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx);
 void cterm_color2rgb(int nr, char_u *r, char_u *g, char_u *b, char_u *ansi_idx);
-void term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len);
+int term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len_arg);
 /* vim: set ft=c : */
--- a/src/term.c
+++ b/src/term.c
@@ -6733,11 +6733,13 @@ cterm_color2rgb(int nr, char_u *r, char_
 #endif
 
 /*
- * Replace K_BS by <BS> and K_DEL by <DEL>
+ * Replace K_BS by <BS> and K_DEL by <DEL>.
+ * Returns "len" adjusted for replaced codes.
  */
-    void
-term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len)
+    int
+term_replace_bs_del_keycode(char_u *ta_buf, int ta_len, int len_arg)
 {
+    int		len = len_arg;
     int		i;
     int		c;
 
@@ -6762,4 +6764,5 @@ term_replace_bs_del_keycode(char_u *ta_b
 	if (has_mbyte)
 	    i += (*mb_ptr2len_len)(ta_buf + i, ta_len + len - i) - 1;
     }
+    return len;
 }
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    653,
+/**/
     652,
 /**/
     651,