summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Brabandt <cb@256bit.org>2022-05-05 20:46:47 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-05 20:46:47 +0100
commitdfbdadce44b754cfa9f55111bdc44bb6a5d6b320 (patch)
tree0c0c4a541902bf77a13cd0e36c2da03855ae80cc
parent40fd7e665260c9227d6d90b17a301a1bc47f7f5b (diff)
downloadvim-git-8.2.4876.tar.gz
patch 8.2.4876: MS-Windows: Shift-BS results in strange char in powershellv8.2.4876
Problem: MS-Windows: Shift-BS results in strange character in powershell. Solution: Add K_S_BS. (Christian Brabandt, closes #10283, closes #10279)
-rw-r--r--src/edit.c1
-rw-r--r--src/keymap.h2
-rw-r--r--src/term.c1
-rw-r--r--src/testdir/shared.vim6
-rw-r--r--src/testdir/test_edit.vim26
-rw-r--r--src/version.c2
6 files changed, 37 insertions, 1 deletions
diff --git a/src/edit.c b/src/edit.c
index 65b760ba0..40717826b 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -963,6 +963,7 @@ doESCkey:
break;
case K_BS: // delete character before the cursor
+ case K_S_BS:
case Ctrl_H:
did_backspace = ins_bs(c, BACKSPACE_CHAR, &inserted_space);
auto_format(FALSE, TRUE);
diff --git a/src/keymap.h b/src/keymap.h
index 85bf7d0b5..e8832d62f 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -276,6 +276,7 @@ enum key_extra
, KE_CANCEL = 102 // return from vgetc()
, KE_COMMAND = 103 // <Cmd> special key
, KE_SCRIPT_COMMAND = 104 // <ScriptCmd> special key
+ , KE_S_BS = 105 // shift + <BS>
};
/*
@@ -299,6 +300,7 @@ enum key_extra
#define K_C_END TERMCAP2KEY(KS_EXTRA, KE_C_END)
#define K_TAB TERMCAP2KEY(KS_EXTRA, KE_TAB)
#define K_S_TAB TERMCAP2KEY('k', 'B')
+#define K_S_BS TERMCAP2KEY(KS_EXTRA, KE_S_BS)
// extra set of function keys F1-F4, for vt100 compatible xterm
#define K_XF1 TERMCAP2KEY(KS_EXTRA, KE_XF1)
diff --git a/src/term.c b/src/term.c
index bf5943d53..827772f50 100644
--- a/src/term.c
+++ b/src/term.c
@@ -688,6 +688,7 @@ static struct builtin_term builtin_termcaps[] =
{K_K8, "\316\372"},
{K_K9, "\316\376"},
{K_BS, "\316x"},
+ {K_S_BS, "\316y"},
# endif
# if defined(VMS) || defined(ALL_BUILTIN_TCAPS)
diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim
index 8e3dfc9c3..e442a59ec 100644
--- a/src/testdir/shared.vim
+++ b/src/testdir/shared.vim
@@ -248,7 +248,11 @@ let g:valgrind_cnt = 1
func GetVimCommand(...)
if !filereadable('vimcmd')
echo 'Cannot read the "vimcmd" file, falling back to ../vim.'
- let lines = ['../vim']
+ if !has("win32")
+ let lines = ['../vim']
+ else
+ let lines = ['..\vim.exe']
+ endif
else
let lines = readfile('vimcmd')
endif
diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim
index 9ed899d83..dddffa389 100644
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -2148,5 +2148,31 @@ func Test_edit_overlong_file_name()
bwipe!
endfunc
+func Test_edit_shift_bs()
+ CheckMSWindows
+
+ " FIXME: this works interactively, but the test fails
+ throw 'Skipped: Shift-Backspace Test not working correctly :('
+
+ " Need to run this in Win32 Terminal, do not use CheckRunVimInTerminal
+ if !has("terminal")
+ return
+ endif
+
+ " Shift Backspace should work like Backspace in insert mode
+ let lines =<< trim END
+ call setline(1, ['abc'])
+ END
+ call writefile(lines, 'Xtest_edit_shift_bs')
+
+ let buf = RunVimInTerminal('-S Xtest_edit_shift_bs', #{rows: 3})
+ call term_sendkeys(buf, "A\<S-BS>-\<esc>")
+ call TermWait(buf, 50)
+ call assert_equal('ab-', term_getline(buf, 1))
+
+ " clean up
+ call StopVimInTerminal(buf)
+ call delete('Xtest_edit_shift_bs')
+endfunc
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 59df1adaf..535d4eb09 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4876,
+/**/
4875,
/**/
4874,