Patch 8.1.1124
Problem: Insert completion flags are mixed up.
Solution: Clean up flags use of ins_compl_add() and cp_flags.
Files: src/insexpand.c, src/proto/insexpand.pro, src/search.c, src/spell.c
*** ../vim-8.1.1123/src/insexpand.c 2019-04-06 13:45:51.568756943 +0200
--- src/insexpand.c 2019-04-06 14:14:19.712671221 +0200
***************
*** 102,119 ****
compl_T *cp_next;
compl_T *cp_prev;
char_u *cp_str; // matched text
- char cp_icase; // TRUE or FALSE: ignore case
- char cp_equal; // TRUE or FALSE: ins_compl_equal always ok
char_u *(cp_text[CPT_COUNT]); // text for the menu
char_u *cp_fname; // file containing the match, allocated when
! // cp_flags has FREE_FNAME
! int cp_flags; // ORIGINAL_TEXT, CONT_S_IPOS or
FREE_FNAME
int cp_number; // sequence number
};
! // flags for ins_compl_add()
! # define ORIGINAL_TEXT (1) // the original text when the expansion
begun
! # define FREE_FNAME (2)
static char e_hitend[] = N_("Hit end of paragraph");
# ifdef FEAT_COMPL_FUNC
--- 102,120 ----
compl_T *cp_next;
compl_T *cp_prev;
char_u *cp_str; // matched text
char_u *(cp_text[CPT_COUNT]); // text for the menu
char_u *cp_fname; // file containing the match, allocated when
! // cp_flags has CP_FREE_FNAME
! int cp_flags; // CP_ values
int cp_number; // sequence number
};
! // values for cp_flags
! # define CP_ORIGINAL_TEXT 1 // the original text when the expansion begun
! # define CP_FREE_FNAME 2 // cp_fname is allocated
! # define CP_CONT_S_IPOS 4 // use CONT_S_IPOS for compl_cont_status
! # define CP_EQUAL 8 // ins_compl_equal() always returns TRUE
! # define CP_ICASE 16 // ins_compl_equal() ignores case
static char e_hitend[] = N_("Hit end of paragraph");
# ifdef FEAT_COMPL_FUNC
***************
*** 185,191 ****
static int compl_opt_refresh_always = FALSE;
static int compl_opt_suppress_empty = FALSE;
! static int ins_compl_add(char_u *str, int len, int icase, char_u *fname,
char_u **cptext, int cdir, int flags, int adup, int equal);
static void ins_compl_longest_match(compl_T *match);
static void ins_compl_del_pum(void);
static void ins_compl_files(int count, char_u **files, int thesaurus, int
flags, regmatch_T *regmatch, char_u *buf, int *dir);
--- 186,192 ----
static int compl_opt_refresh_always = FALSE;
static int compl_opt_suppress_empty = FALSE;
! static int ins_compl_add(char_u *str, int len, char_u *fname, char_u
**cptext, int cdir, int flags, int adup);
static void ins_compl_longest_match(compl_T *match);
static void ins_compl_del_pum(void);
static void ins_compl_files(int count, char_u **files, int thesaurus, int
flags, regmatch_T *regmatch, char_u *buf, int *dir);
***************
*** 420,426 ****
int icase,
char_u *fname,
int dir,
! int flags)
{
char_u *str = str_arg;
char_u *p;
--- 421,427 ----
int icase,
char_u *fname,
int dir,
! int cont_s_ipos) // next ^X<> will set initial_pos
{
char_u *str = str_arg;
char_u *p;
***************
*** 431,436 ****
--- 432,438 ----
int *wca; // Wide character array.
int has_lower = FALSE;
int was_letter = FALSE;
+ int flags = 0;
if (p_ic && curbuf->b_p_inf && len > 0)
{
***************
*** 555,563 ****
str = IObuff;
}
! return ins_compl_add(str, len, icase, fname, NULL, dir,
! flags, FALSE, FALSE);
}
/*
--- 557,568 ----
str = IObuff;
}
+ if (cont_s_ipos)
+ flags |= CP_CONT_S_IPOS;
+ if (icase)
+ flags |= CP_ICASE;
! return ins_compl_add(str, len, fname, NULL, dir, flags, FALSE);
}
/*
***************
*** 570,585 ****
ins_compl_add(
char_u *str,
int len,
- int icase,
char_u *fname,
char_u **cptext, // extra text for popup menu or NULL
int cdir,
! int flags,
! int adup, // accept duplicate match
! int equal) // match is always accepted by
ins_compl_equal
{
compl_T *match;
int dir = (cdir == 0 ? compl_direction : cdir);
ui_breakcheck();
if (got_int)
--- 575,589 ----
ins_compl_add(
char_u *str,
int len,
char_u *fname,
char_u **cptext, // extra text for popup menu or NULL
int cdir,
! int flags_arg,
! int adup) // accept duplicate match
{
compl_T *match;
int dir = (cdir == 0 ? compl_direction : cdir);
+ int flags = flags_arg;
ui_breakcheck();
if (got_int)
***************
*** 593,599 ****
match = compl_first_match;
do
{
! if ( !(match->cp_flags & ORIGINAL_TEXT)
&& STRNCMP(match->cp_str, str, len) == 0
&& match->cp_str[len] == NUL)
return NOTDONE;
--- 597,603 ----
match = compl_first_match;
do
{
! if ( !(match->cp_flags & CP_ORIGINAL_TEXT)
&& STRNCMP(match->cp_str, str, len) == 0
&& match->cp_str[len] == NUL)
return NOTDONE;
***************
*** 610,628 ****
if (match == NULL)
return FAIL;
match->cp_number = -1;
! if (flags & ORIGINAL_TEXT)
match->cp_number = 0;
if ((match->cp_str = vim_strnsave(str, len)) == NULL)
{
vim_free(match);
return FAIL;
}
- match->cp_icase = icase;
- match->cp_equal = equal;
// match-fname is:
// - compl_curr_match->cp_fname if it is a string equal to fname.
! // - a copy of fname, FREE_FNAME is set to free later THE allocated mem.
// - NULL otherwise. --Acevedo
if (fname != NULL
&& compl_curr_match != NULL
--- 614,630 ----
if (match == NULL)
return FAIL;
match->cp_number = -1;
! if (flags & CP_ORIGINAL_TEXT)
match->cp_number = 0;
if ((match->cp_str = vim_strnsave(str, len)) == NULL)
{
vim_free(match);
return FAIL;
}
// match-fname is:
// - compl_curr_match->cp_fname if it is a string equal to fname.
! // - a copy of fname, CP_FREE_FNAME is set to free later THE allocated
mem.
// - NULL otherwise. --Acevedo
if (fname != NULL
&& compl_curr_match != NULL
***************
*** 632,638 ****
else if (fname != NULL)
{
match->cp_fname = vim_strsave(fname);
! flags |= FREE_FNAME;
}
else
match->cp_fname = NULL;
--- 634,640 ----
else if (fname != NULL)
{
match->cp_fname = vim_strsave(fname);
! flags |= CP_FREE_FNAME;
}
else
match->cp_fname = NULL;
***************
*** 669,675 ****
compl_curr_match = match;
// Find the longest common string if still doing that.
! if (compl_get_longest && (flags & ORIGINAL_TEXT) == 0)
ins_compl_longest_match(match);
return OK;
--- 671,677 ----
compl_curr_match = match;
// Find the longest common string if still doing that.
! if (compl_get_longest && (flags & CP_ORIGINAL_TEXT) == 0)
ins_compl_longest_match(match);
return OK;
***************
*** 677,690 ****
/*
* Return TRUE if "str[len]" matches with match->cp_str, considering
! * match->cp_icase.
*/
static int
ins_compl_equal(compl_T *match, char_u *str, int len)
{
! if (match->cp_equal)
return TRUE;
! if (match->cp_icase)
return STRNICMP(match->cp_str, str, (size_t)len) == 0;
return STRNCMP(match->cp_str, str, (size_t)len) == 0;
}
--- 679,692 ----
/*
* Return TRUE if "str[len]" matches with match->cp_str, considering
! * match->cp_flags.
*/
static int
ins_compl_equal(compl_T *match, char_u *str, int len)
{
! if (match->cp_flags & CP_EQUAL)
return TRUE;
! if (match->cp_flags & CP_ICASE)
return STRNICMP(match->cp_str, str, (size_t)len) == 0;
return STRNCMP(match->cp_str, str, (size_t)len) == 0;
}
***************
*** 734,741 ****
c1 = *p;
c2 = *s;
}
! if (match->cp_icase ? (MB_TOLOWER(c1) != MB_TOLOWER(c2))
! : (c1 != c2))
break;
if (has_mbyte)
{
--- 736,743 ----
c1 = *p;
c2 = *s;
}
! if ((match->cp_flags & CP_ICASE)
! ? (MB_TOLOWER(c1) != MB_TOLOWER(c2)) : (c1 != c2))
break;
if (has_mbyte)
{
***************
*** 783,790 ****
int dir = compl_direction;
for (i = 0; i < num_matches && add_r != FAIL; i++)
! if ((add_r = ins_compl_add(matches[i], -1, icase,
! NULL, NULL, dir, 0, FALSE, FALSE)) == OK)
// if dir was BACKWARD then honor it just once
dir = FORWARD;
FreeWild(num_matches, matches);
--- 785,792 ----
int dir = compl_direction;
for (i = 0; i < num_matches && add_r != FAIL; i++)
! if ((add_r = ins_compl_add(matches[i], -1, NULL, NULL, dir,
! icase ? CP_ICASE : 0, FALSE)) == OK)
// if dir was BACKWARD then honor it just once
dir = FORWARD;
FreeWild(num_matches, matches);
***************
*** 861,866 ****
--- 863,869 ----
{
int save_w_wrow = curwin->w_wrow;
int save_w_leftcol = curwin->w_leftcol;
+ int flags = CP_ORIGINAL_TEXT;
// If already doing completions stop it.
if (ctrl_x_mode != CTRL_X_NORMAL)
***************
*** 875,882 ****
compl_length = (int)curwin->w_cursor.col - (int)startcol;
// compl_pattern doesn't need to be set
compl_orig_text = vim_strnsave(ml_get_curline() + compl_col,
compl_length);
if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
! -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE, FALSE) != OK)
return;
ctrl_x_mode = CTRL_X_EVAL;
--- 878,887 ----
compl_length = (int)curwin->w_cursor.col - (int)startcol;
// compl_pattern doesn't need to be set
compl_orig_text = vim_strnsave(ml_get_curline() + compl_col,
compl_length);
+ if (p_ic)
+ flags |= CP_ICASE;
if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
! -1, NULL, NULL, 0, flags, FALSE) != OK)
return;
ctrl_x_mode = CTRL_X_EVAL;
***************
*** 979,985 ****
do
{
if (compl == NULL
! || ((compl->cp_flags & ORIGINAL_TEXT) == 0 && ++i == 2))
break;
compl = compl->cp_next;
} while (compl != compl_first_match);
--- 984,990 ----
do
{
if (compl == NULL
! || ((compl->cp_flags & CP_ORIGINAL_TEXT) == 0 && ++i ==
2))
break;
compl = compl->cp_next;
} while (compl != compl_first_match);
***************
*** 1025,1031 ****
lead_len = (int)STRLEN(compl_leader);
do
{
! if ((compl->cp_flags & ORIGINAL_TEXT) == 0
&& (compl_leader == NULL
|| ins_compl_equal(compl, compl_leader, lead_len)))
++compl_match_arraysize;
--- 1030,1036 ----
lead_len = (int)STRLEN(compl_leader);
do
{
! if ((compl->cp_flags & CP_ORIGINAL_TEXT) == 0
&& (compl_leader == NULL
|| ins_compl_equal(compl, compl_leader, lead_len)))
++compl_match_arraysize;
***************
*** 1040,1053 ****
{
// If the current match is the original text don't find the first
// match after it, don't highlight anything.
! if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
shown_match_ok = TRUE;
i = 0;
compl = compl_first_match;
do
{
! if ((compl->cp_flags & ORIGINAL_TEXT) == 0
&& (compl_leader == NULL
|| ins_compl_equal(compl, compl_leader, lead_len)))
{
--- 1045,1058 ----
{
// If the current match is the original text don't find the first
// match after it, don't highlight anything.
! if (compl_shown_match->cp_flags & CP_ORIGINAL_TEXT)
shown_match_ok = TRUE;
i = 0;
compl = compl_first_match;
do
{
! if ((compl->cp_flags & CP_ORIGINAL_TEXT) == 0
&& (compl_leader == NULL
|| ins_compl_equal(compl, compl_leader, lead_len)))
{
***************
*** 1088,1094 ****
// When the original text is the shown match don't set
// compl_shown_match.
! if (compl->cp_flags & ORIGINAL_TEXT)
shown_match_ok = TRUE;
if (!shown_match_ok && shown_compl != NULL)
--- 1093,1099 ----
// When the original text is the shown match don't set
// compl_shown_match.
! if (compl->cp_flags & CP_ORIGINAL_TEXT)
shown_match_ok = TRUE;
if (!shown_match_ok && shown_compl != NULL)
***************
*** 1307,1313 ****
ptr = find_word_end(ptr);
add_r = ins_compl_add_infercase(regmatch->startp[0],
(int)(ptr - regmatch->startp[0]),
! p_ic, files[i], *dir, 0);
if (thesaurus)
{
char_u *wstart;
--- 1312,1318 ----
ptr = find_word_end(ptr);
add_r = ins_compl_add_infercase(regmatch->startp[0],
(int)(ptr - regmatch->startp[0]),
! p_ic, files[i], *dir, FALSE);
if (thesaurus)
{
char_u *wstart;
***************
*** 1343,1349 ****
if (wstart != regmatch->startp[0])
add_r = ins_compl_add_infercase(wstart,
(int)(ptr - wstart),
! p_ic, files[i], *dir, 0);
}
}
if (add_r == OK)
--- 1348,1354 ----
if (wstart != regmatch->startp[0])
add_r = ins_compl_add_infercase(wstart,
(int)(ptr - wstart),
! p_ic, files[i], *dir, FALSE);
}
}
if (add_r == OK)
***************
*** 1446,1452 ****
compl_curr_match = compl_curr_match->cp_next;
vim_free(match->cp_str);
// several entries may use the same fname, free it just once.
! if (match->cp_flags & FREE_FNAME)
vim_free(match->cp_fname);
for (i = 0; i < CPT_COUNT; ++i)
vim_free(match->cp_text[i]);
--- 1451,1457 ----
compl_curr_match = compl_curr_match->cp_next;
vim_free(match->cp_str);
// several entries may use the same fname, free it just once.
! if (match->cp_flags & CP_FREE_FNAME)
vim_free(match->cp_fname);
for (i = 0; i < CPT_COUNT; ++i)
vim_free(match->cp_text[i]);
***************
*** 1540,1546 ****
match = compl_first_match;
do
{
! if (!(match->cp_flags & ORIGINAL_TEXT))
{
di = dict_alloc();
if (di == NULL)
--- 1545,1551 ----
match = compl_first_match;
do
{
! if (!(match->cp_flags & CP_ORIGINAL_TEXT))
{
di = dict_alloc();
if (di == NULL)
***************
*** 1818,1826 ****
char_u *p;
// Replace the original text entry.
! // The ORIGINAL_TEXT flag is either at the first item or might possibly be
// at the last item for backward completion
! if (compl_first_match->cp_flags & ORIGINAL_TEXT) // safety check
{
p = vim_strsave(str);
if (p != NULL)
--- 1823,1831 ----
char_u *p;
// Replace the original text entry.
! // The CP_ORIGINAL_TEXT flag is either at the first item or might
possibly be
// at the last item for backward completion
! if (compl_first_match->cp_flags & CP_ORIGINAL_TEXT) // safety check
{
p = vim_strsave(str);
if (p != NULL)
***************
*** 1830,1836 ****
}
}
else if (compl_first_match->cp_prev != NULL
! && (compl_first_match->cp_prev->cp_flags & ORIGINAL_TEXT))
{
p = vim_strsave(str);
if (p != NULL)
--- 1835,1841 ----
}
}
else if (compl_first_match->cp_prev != NULL
! && (compl_first_match->cp_prev->cp_flags & CP_ORIGINAL_TEXT))
{
p = vim_strsave(str);
if (p != NULL)
***************
*** 1858,1864 ****
{
// When still at the original match use the first entry that matches
// the leader.
! if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
{
p = NULL;
for (cp = compl_shown_match->cp_next; cp != NULL
--- 1863,1869 ----
{
// When still at the original match use the first entry that matches
// the leader.
! if (compl_shown_match->cp_flags & CP_ORIGINAL_TEXT)
{
p = NULL;
for (cp = compl_shown_match->cp_next; cp != NULL
***************
*** 2370,2379 ****
ins_compl_add_tv(typval_T *tv, int dir)
{
char_u *word;
! int icase = FALSE;
! int adup = FALSE;
! int aempty = FALSE;
! int aequal = FALSE;
char_u *(cptext[CPT_COUNT]);
if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
--- 2375,2383 ----
ins_compl_add_tv(typval_T *tv, int dir)
{
char_u *word;
! int dup = FALSE;
! int empty = FALSE;
! int flags = 0;
char_u *(cptext[CPT_COUNT]);
if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
***************
*** 2389,2411 ****
(char_u *)"info", FALSE);
cptext[CPT_USER_DATA] = dict_get_string(tv->vval.v_dict,
(char_u *)"user_data", FALSE);
! if (dict_get_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
! icase = dict_get_number(tv->vval.v_dict, (char_u *)"icase");
if (dict_get_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
! adup = dict_get_number(tv->vval.v_dict, (char_u *)"dup");
if (dict_get_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
! aempty = dict_get_number(tv->vval.v_dict, (char_u *)"empty");
! if (dict_get_string(tv->vval.v_dict, (char_u *)"equal", FALSE) != NULL)
! aequal = dict_get_number(tv->vval.v_dict, (char_u *)"equal");
}
else
{
word = tv_get_string_chk(tv);
vim_memset(cptext, 0, sizeof(cptext));
}
! if (word == NULL || (!aempty && *word == NUL))
return FAIL;
! return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup, aequal);
}
#endif
--- 2393,2417 ----
(char_u *)"info", FALSE);
cptext[CPT_USER_DATA] = dict_get_string(tv->vval.v_dict,
(char_u *)"user_data", FALSE);
! if (dict_get_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL
! && dict_get_number(tv->vval.v_dict, (char_u *)"icase"))
! flags |= CP_ICASE;
if (dict_get_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
! dup = dict_get_number(tv->vval.v_dict, (char_u *)"dup");
if (dict_get_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
! empty = dict_get_number(tv->vval.v_dict, (char_u *)"empty");
! if (dict_get_string(tv->vval.v_dict, (char_u *)"equal", FALSE) != NULL
! && dict_get_number(tv->vval.v_dict, (char_u *)"equal"))
! flags |= CP_EQUAL;
}
else
{
word = tv_get_string_chk(tv);
vim_memset(cptext, 0, sizeof(cptext));
}
! if (word == NULL || (!empty && *word == NUL))
return FAIL;
! return ins_compl_add(word, -1, NULL, cptext, dir, flags, dup);
}
#endif
***************
*** 2672,2678 ****
p_ws = TRUE;
for (;;)
{
! int flags = 0;
++msg_silent; // Don't want messages for wrapscan.
--- 2678,2684 ----
p_ws = TRUE;
for (;;)
{
! int cont_s_ipos = FALSE;
++msg_silent; // Don't want messages for wrapscan.
***************
*** 2778,2784 ****
tmp_ptr = ptr + IOSIZE - len - 1;
STRNCPY(IObuff + len, ptr, tmp_ptr - ptr);
len += (int)(tmp_ptr - ptr);
! flags |= CONT_S_IPOS;
}
IObuff[len] = NUL;
ptr = IObuff;
--- 2784,2790 ----
tmp_ptr = ptr + IOSIZE - len - 1;
STRNCPY(IObuff + len, ptr, tmp_ptr - ptr);
len += (int)(tmp_ptr - ptr);
! cont_s_ipos = TRUE;
}
IObuff[len] = NUL;
ptr = IObuff;
***************
*** 2789,2795 ****
}
if (ins_compl_add_infercase(ptr, len, p_ic,
ins_buf == curbuf ? NULL : ins_buf->b_sfname,
! 0, flags) != NOTDONE)
{
found_new_match = OK;
break;
--- 2795,2801 ----
}
if (ins_compl_add_infercase(ptr, len, p_ic,
ins_buf == curbuf ? NULL : ins_buf->b_sfname,
! 0, cont_s_ipos) != NOTDONE)
{
found_new_match = OK;
break;
***************
*** 2889,2895 ****
dict_T *dict;
ins_bytes(compl_shown_match->cp_str + ins_compl_len());
! if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
compl_used_match = FALSE;
else
compl_used_match = TRUE;
--- 2895,2901 ----
dict_T *dict;
ins_bytes(compl_shown_match->cp_str + ins_compl_len());
! if (compl_shown_match->cp_flags & CP_ORIGINAL_TEXT)
compl_used_match = FALSE;
else
compl_used_match = TRUE;
***************
*** 2949,2955 ****
return -1;
if (compl_leader != NULL
! && (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
{
// Set "compl_shown_match" to the actually shown match, it may differ
// when "compl_leader" is used to omit some of the matches.
--- 2955,2961 ----
return -1;
if (compl_leader != NULL
! && (compl_shown_match->cp_flags & CP_ORIGINAL_TEXT) ==
0)
{
// Set "compl_shown_match" to the actually shown match, it may differ
// when "compl_leader" is used to omit some of the matches.
***************
*** 3053,3059 ****
}
found_end = FALSE;
}
! if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
&& compl_leader != NULL
&& !ins_compl_equal(compl_shown_match,
compl_leader, (int)STRLEN(compl_leader)))
--- 3059,3065 ----
}
found_end = FALSE;
}
! if ((compl_shown_match->cp_flags & CP_ORIGINAL_TEXT) == 0
&& compl_leader != NULL
&& !ins_compl_equal(compl_shown_match,
compl_leader, (int)STRLEN(compl_leader)))
***************
*** 3304,3309 ****
--- 3310,3316 ----
int save_w_leftcol;
int insert_match;
int save_did_ai = did_ai;
+ int flags = CP_ORIGINAL_TEXT;
compl_direction = ins_compl_key2dir(c);
insert_match = ins_compl_use_match(c);
***************
*** 3704,3711 ****
// Always add completion for the original text.
vim_free(compl_orig_text);
compl_orig_text = vim_strnsave(line + compl_col, compl_length);
if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
! -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE, FALSE) != OK)
{
VIM_CLEAR(compl_pattern);
VIM_CLEAR(compl_orig_text);
--- 3711,3720 ----
// Always add completion for the original text.
vim_free(compl_orig_text);
compl_orig_text = vim_strnsave(line + compl_col, compl_length);
+ if (p_ic)
+ flags |= CP_ICASE;
if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
! -1, NULL, NULL, 0, flags, FALSE) != OK)
{
VIM_CLEAR(compl_pattern);
VIM_CLEAR(compl_orig_text);
***************
*** 3767,3780 ****
compl_cont_status &= ~CONT_N_ADDS;
}
! if (compl_curr_match->cp_flags & CONT_S_IPOS)
compl_cont_status |= CONT_S_IPOS;
else
compl_cont_status &= ~CONT_S_IPOS;
if (edit_submode_extra == NULL)
{
! if (compl_curr_match->cp_flags & ORIGINAL_TEXT)
{
edit_submode_extra = (char_u *)_("Back at original");
edit_submode_highl = HLF_W;
--- 3776,3789 ----
compl_cont_status &= ~CONT_N_ADDS;
}
! if (compl_curr_match->cp_flags & CP_CONT_S_IPOS)
compl_cont_status |= CONT_S_IPOS;
else
compl_cont_status &= ~CONT_S_IPOS;
if (edit_submode_extra == NULL)
{
! if (compl_curr_match->cp_flags & CP_ORIGINAL_TEXT)
{
edit_submode_extra = (char_u *)_("Back at original");
edit_submode_highl = HLF_W;
*** ../vim-8.1.1123/src/proto/insexpand.pro 2019-03-30 13:53:26.174425093
+0100
--- src/proto/insexpand.pro 2019-04-06 14:06:24.070288598 +0200
***************
*** 20,26 ****
int has_compl_option(int dict_opt);
int vim_is_ctrl_x_key(int c);
int ins_compl_accept_char(int c);
! int ins_compl_add_infercase(char_u *str, int len, int icase, char_u *fname,
int dir, int flags);
int ins_compl_has_shown_match(void);
int ins_compl_long_shown_match(void);
void completeopt_was_set(void);
--- 20,26 ----
int has_compl_option(int dict_opt);
int vim_is_ctrl_x_key(int c);
int ins_compl_accept_char(int c);
! int ins_compl_add_infercase(char_u *str_arg, int len, int icase, char_u
*fname, int dir, int cont_s_ipos);
int ins_compl_has_shown_match(void);
int ins_compl_long_shown_match(void);
void completeopt_was_set(void);
*** ../vim-8.1.1123/src/search.c 2019-03-30 13:53:26.174425093 +0100
--- src/search.c 2019-04-06 13:52:12.762824629 +0200
***************
*** 5272,5278 ****
#ifdef FEAT_INS_EXPAND
if (action == ACTION_EXPAND)
{
! int reuse = 0;
int add_r;
char_u *aux;
--- 5272,5278 ----
#ifdef FEAT_INS_EXPAND
if (action == ACTION_EXPAND)
{
! int cont_s_ipos = FALSE;
int add_r;
char_u *aux;
***************
*** 5333,5339 ****
p = aux + IOSIZE - i - 1;
STRNCPY(IObuff + i, aux, p - aux);
i += (int)(p - aux);
! reuse |= CONT_S_IPOS;
}
IObuff[i] = NUL;
aux = IObuff;
--- 5333,5339 ----
p = aux + IOSIZE - i - 1;
STRNCPY(IObuff + i, aux, p - aux);
i += (int)(p - aux);
! cont_s_ipos = TRUE;
}
IObuff[i] = NUL;
aux = IObuff;
***************
*** 5344,5350 ****
add_r = ins_compl_add_infercase(aux, i, p_ic,
curr_fname == curbuf->b_fname ? NULL : curr_fname,
! dir, reuse);
if (add_r == OK)
/* if dir was BACKWARD then honor it just once */
dir = FORWARD;
--- 5344,5350 ----
add_r = ins_compl_add_infercase(aux, i, p_ic,
curr_fname == curbuf->b_fname ? NULL : curr_fname,
! dir, cont_s_ipos);
if (add_r == OK)
/* if dir was BACKWARD then honor it just once */
dir = FORWARD;
*** ../vim-8.1.1123/src/spell.c 2019-03-30 18:46:57.360077328 +0100
--- src/spell.c 2019-04-06 13:52:21.666778351 +0200
***************
*** 8627,8633 ****
? MB_STRNICMP(p, pat, STRLEN(pat)) == 0
: STRNCMP(p, pat, STRLEN(pat)) == 0)
&& ins_compl_add_infercase(p, (int)STRLEN(p),
! p_ic, NULL, *dir, 0) == OK)
/* if dir was BACKWARD then honor it just once */
*dir = FORWARD;
}
--- 8627,8633 ----
? MB_STRNICMP(p, pat, STRLEN(pat)) == 0
: STRNCMP(p, pat, STRLEN(pat)) == 0)
&& ins_compl_add_infercase(p, (int)STRLEN(p),
! p_ic, NULL, *dir, FALSE) == OK)
/* if dir was BACKWARD then honor it just once */
*dir = FORWARD;
}
*** ../vim-8.1.1123/src/version.c 2019-04-06 13:45:51.568756943 +0200
--- src/version.c 2019-04-06 14:19:37.271357326 +0200
***************
*** 773,774 ****
--- 773,776 ----
{ /* Add new patch number below this line */
+ /**/
+ 1124,
/**/
--
hundred-and-one symptoms of being an internet addict:
211. Your husband leaves you...taking the computer with him and you
call him crying, and beg him to bring the computer back.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.