summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-02-09 17:37:03 +0100
committerBram Moolenaar <Bram@vim.org>2017-02-09 17:37:03 +0100
commit190b04cdd936f4696c22466b7f077f9371d96580 (patch)
tree449a487f34d05e886a1515599c600694e659b9b0
parenta9f8ffb6345f5b246944c73b9861fcc53eaa5228 (diff)
downloadvim-190b04cdd936f4696c22466b7f077f9371d96580.zip
patch 8.0.0319: insert mode completion does not respect 'backspace'
Problem: Insert mode completion does not respect "start" in 'backspace'. Solution: Check whether backspace can go before where insert started. (Hirohito Higashi)
-rw-r--r--src/edit.c7
-rw-r--r--src/testdir/test_popup.vim20
-rw-r--r--src/version.c2
3 files changed, 27 insertions, 2 deletions
diff --git a/src/edit.c b/src/edit.c
index 1164e2032..bc8652ba4 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -3467,10 +3467,13 @@ ins_compl_bs(void)
mb_ptr_back(line, p);
/* Stop completion when the whole word was deleted. For Omni completion
- * allow the word to be deleted, we won't match everything. */
+ * allow the word to be deleted, we won't match everything.
+ * Respect the 'backspace' option. */
if ((int)(p - line) - (int)compl_col < 0
|| ((int)(p - line) - (int)compl_col == 0
- && ctrl_x_mode != CTRL_X_OMNI) || ctrl_x_mode == CTRL_X_EVAL)
+ && ctrl_x_mode != CTRL_X_OMNI) || ctrl_x_mode == CTRL_X_EVAL
+ || (!can_bs(BS_START) && (int)(p - line) - (int)compl_col
+ - compl_length < 0))
return K_BS;
/* Deleted more than what was used to find matches or didn't finish
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index efbb9185d..f4ce064d7 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -511,4 +511,24 @@ func Test_completion_clear_candidate_list()
bw!
endfunc
+func Test_completion_respect_bs_option()
+ new
+ let li = ["aaa", "aaa12345", "aaaabcdef", "aaaABC"]
+
+ set bs=indent,eol
+ call setline(1, li)
+ 1
+ call feedkeys("A\<C-X>\<C-N>\<C-P>\<BS>\<BS>\<BS>\<Esc>", "tx")
+ call assert_equal('aaa', getline(1))
+
+ %d
+ set bs=indent,eol,start
+ call setline(1, li)
+ 1
+ call feedkeys("A\<C-X>\<C-N>\<C-P>\<BS>\<BS>\<BS>\<Esc>", "tx")
+ call assert_equal('', getline(1))
+
+ bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 1448e981d..09680b9bc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 319,
+/**/
318,
/**/
317,