diff options
author | Bram Moolenaar <Bram@vim.org> | 2006-06-22 15:13:21 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2006-06-22 15:13:21 +0000 |
commit | be46a1eba60134f7db491d202276dd7b3cd716ae (patch) | |
tree | 2028403c33394e365ada3834cdfd52f77869ea7e | |
parent | 20ff79237a8ec91a43eaed49c9a38d3155ca2a5c (diff) | |
download | vim-be46a1eba60134f7db491d202276dd7b3cd716ae.zip |
updated for version 7.0-023
-rw-r--r-- | src/edit.c | 58 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 43 insertions, 17 deletions
diff --git a/src/edit.c b/src/edit.c index f30b59d18..8d6c32a21 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 b6bbb66a2..ad900240f 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, |