summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2006-06-22 15:13:21 +0000
committervimboss <devnull@localhost>2006-06-22 15:13:21 +0000
commit68634e58f8bcd9f08be4041a1263fe533b81c8d3 (patch)
tree2028403c33394e365ada3834cdfd52f77869ea7e
parente318b3e14a67512a48b3ef34813fb6d3eb1b6cc9 (diff)
downloadvim-68634e58f8bcd9f08be4041a1263fe533b81c8d3.tar.gz
updated for version 7.0-023v7.0.023v7-0-023
-rw-r--r--src/edit.c58
-rw-r--r--src/version.c2
2 files changed, 43 insertions, 17 deletions
diff --git a/src/edit.c b/src/edit.c
index f30b59d1..8d6c32a2 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -719,9 +719,14 @@ edit(cmdchar, startln, count)
#ifdef FEAT_INS_EXPAND
/*
* Special handling of keys while the popup menu is visible or wanted
- * and the cursor is still in the completed word.
+ * and the cursor is still in the completed word. Only when there is
+ * a match, skip this when no matches were found.
*/
- if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col)
+ if (compl_started
+ && pum_wanted()
+ && curwin->w_cursor.col >= compl_col
+ && (compl_shown_match == NULL
+ || compl_shown_match != compl_shown_match->cp_next))
{
/* BS: Delete one character from "compl_leader". */
if ((c == K_BS || c == Ctrl_H)
@@ -3393,16 +3398,21 @@ ins_compl_prep(c)
ptr = compl_leader;
else
ptr = compl_orig_text;
- p = compl_orig_text;
- for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp)
- ;
+ if (compl_orig_text != NULL)
+ {
+ p = compl_orig_text;
+ for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
+ ++temp)
+ ;
#ifdef FEAT_MBYTE
- if (temp > 0)
- temp -= (*mb_head_off)(compl_orig_text, p + temp);
+ if (temp > 0)
+ temp -= (*mb_head_off)(compl_orig_text, p + temp);
#endif
- for (p += temp; *p != NUL; mb_ptr_adv(p))
- AppendCharToRedobuff(K_BS);
- AppendToRedobuffLit(ptr + temp, -1);
+ for (p += temp; *p != NUL; mb_ptr_adv(p))
+ AppendCharToRedobuff(K_BS);
+ }
+ if (ptr != NULL)
+ AppendToRedobuffLit(ptr + temp, -1);
}
#ifdef FEAT_CINDENT
@@ -4650,10 +4660,18 @@ ins_complete(c)
(int)STRLEN(compl_pattern), curs_col);
if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
|| compl_xp.xp_context == EXPAND_NOTHING)
- return FAIL;
- startcol = (int)(compl_xp.xp_pattern - compl_pattern);
- compl_col = startcol;
- compl_length = curs_col - startcol;
+ {
+ compl_col = curs_col;
+ compl_length = 0;
+ vim_free(compl_pattern);
+ compl_pattern = NULL;
+ }
+ else
+ {
+ startcol = (int)(compl_xp.xp_pattern - compl_pattern);
+ compl_col = startcol;
+ compl_length = curs_col - startcol;
+ }
}
else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
{
@@ -4707,11 +4725,17 @@ ins_complete(c)
else
compl_col = spell_word_start(startcol);
if (compl_col >= (colnr_T)startcol)
- return FAIL;
- spell_expand_check_cap(compl_col);
+ {
+ compl_length = 0;
+ compl_col = curs_col;
+ }
+ else
+ {
+ spell_expand_check_cap(compl_col);
+ compl_length = (int)curs_col - compl_col;
+ }
/* Need to obtain "line" again, it may have become invalid. */
line = ml_get(curwin->w_cursor.lnum);
- compl_length = (int)curs_col - compl_col;
compl_pattern = vim_strnsave(line + compl_col, compl_length);
if (compl_pattern == NULL)
#endif
diff --git a/src/version.c b/src/version.c
index b6bbb66a..ad900240 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 23,
+/**/
22,
/**/
21,