diff options
-rw-r--r-- | src/nvim/buffer.c | 1 | ||||
-rw-r--r-- | src/nvim/buffer_defs.h | 1 | ||||
-rw-r--r-- | src/nvim/digraph.c | 2 | ||||
-rw-r--r-- | src/nvim/edit.c | 26 | ||||
-rw-r--r-- | src/nvim/eval.c | 35 | ||||
-rw-r--r-- | src/nvim/indent.c | 2 | ||||
-rw-r--r-- | src/nvim/ops.c | 3 | ||||
-rw-r--r-- | src/nvim/option.c | 11 | ||||
-rw-r--r-- | src/nvim/option_defs.h | 4 | ||||
-rw-r--r-- | src/nvim/os/provider.c | 6 | ||||
-rw-r--r-- | src/nvim/regexp.c | 20 | ||||
-rw-r--r-- | src/nvim/regexp_nfa.c | 41 | ||||
-rw-r--r-- | src/nvim/screen.c | 5 | ||||
-rw-r--r-- | src/nvim/search.c | 20 | ||||
-rw-r--r-- | src/nvim/testdir/test100.in | 8 | ||||
-rw-r--r-- | src/nvim/testdir/test100.ok | 10 | ||||
-rw-r--r-- | src/nvim/testdir/test95.in | 14 | ||||
-rw-r--r-- | src/nvim/testdir/test95.ok | 12 | ||||
-rw-r--r-- | src/nvim/version.c | 16 |
19 files changed, 182 insertions, 55 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index ee2b1ecf1d..8bcb5934dc 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -1517,6 +1517,7 @@ void free_buf_options(buf_T *buf, int free_p_ff) clear_string_option(&buf->b_p_qe); buf->b_p_ar = -1; buf->b_p_ul = NO_LOCAL_UNDOLEVEL; + clear_string_option(&buf->b_p_lw); } /* diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index e827642d8a..9f5d7b86eb 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -677,6 +677,7 @@ struct file_buffer { char_u *b_p_tsr; /* 'thesaurus' local value */ long b_p_ul; /* 'undolevels' local value */ int b_p_udf; /* 'undofile' */ + char_u *b_p_lw; // 'lispwords' local value /* end of buffer options */ diff --git a/src/nvim/digraph.c b/src/nvim/digraph.c index 8edb12526c..f41a16bc1b 100644 --- a/src/nvim/digraph.c +++ b/src/nvim/digraph.c @@ -835,6 +835,8 @@ static digr_T digraphdefault[] = { 'W', '=', 0x20a9 }, { '=', 'e', 0x20ac }, // euro { 'E', 'u', 0x20ac }, // euro + { '=', 'R', 0x20bd }, // rouble + { '=', 'P', 0x20bd }, // rouble { 'o', 'C', 0x2103 }, { 'c', 'o', 0x2105 }, { 'o', 'F', 0x2109 }, diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 314af1222f..05d6c9758a 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -3151,7 +3151,9 @@ static int ins_compl_prep(int c) ins_compl_free(); compl_started = FALSE; compl_matches = 0; - msg_clr_cmdline(); /* necessary for "noshowmode" */ + if (!shortmess(SHM_COMPLETIONMENU)) { + msg_clr_cmdline(); // necessary for "noshowmode" + } ctrl_x_mode = 0; compl_enter_selects = FALSE; if (edit_submode != NULL) { @@ -4378,7 +4380,9 @@ static int ins_complete(int c) if (col == -3) { ctrl_x_mode = 0; edit_submode = NULL; - msg_clr_cmdline(); + if (!shortmess(SHM_COMPLETIONMENU)) { + msg_clr_cmdline(); + } return FAIL; } @@ -4597,13 +4601,17 @@ static int ins_complete(int c) /* Show a message about what (completion) mode we're in. */ showmode(); - if (edit_submode_extra != NULL) { - if (!p_smd) - msg_attr(edit_submode_extra, - edit_submode_highl < HLF_COUNT - ? hl_attr(edit_submode_highl) : 0); - } else - msg_clr_cmdline(); /* necessary for "noshowmode" */ + if (!shortmess(SHM_COMPLETIONMENU)) { + if (edit_submode_extra != NULL) { + if (!p_smd) { + msg_attr(edit_submode_extra, + edit_submode_highl < HLF_COUNT + ? hl_attr(edit_submode_highl) : 0); + } + } else { + msg_clr_cmdline(); // necessary for "noshowmode" + } + } /* Show the popup menu, unless we got interrupted. */ if (!compl_interrupted) { diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 80f7a65d45..7234afc0ce 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -193,6 +193,9 @@ static int current_copyID = 0; #define COPYID_INC 2 #define COPYID_MASK (~0x1) +/// Abort conversion to string after a recursion error. +static bool did_echo_string_emsg = false; + /* * Array to hold the hashtab with variables local to each sourced script. * Each item holds a variable (nameless) that points to the dict_T. @@ -5322,6 +5325,9 @@ list_join_inner ( } line_breakcheck(); + if (did_echo_string_emsg) { // recursion error, bail out + break; + } } /* Allocate result buffer with its total size, avoid re-allocation and @@ -5945,8 +5951,10 @@ static char_u *dict2string(typval_T *tv, int copyID) if (s != NULL) ga_concat(&ga, s); free(tofree); - if (s == NULL) + if (s == NULL || did_echo_string_emsg) { break; + } + line_breakcheck(); } } if (todo > 0) { @@ -6077,9 +6085,15 @@ static char_u *echo_string(typval_T *tv, char_u **tofree, char_u *numbuf, int co char_u *r = NULL; if (recurse >= DICT_MAXNEST) { - EMSG(_("E724: variable nested too deep for displaying")); + if (!did_echo_string_emsg) { + // Only give this message once for a recursive call to avoid + // flooding the user with errors. And stop iterating over lists + // and dicts. + did_echo_string_emsg = true; + EMSG(_("E724: variable nested too deep for displaying")); + } *tofree = NULL; - return NULL; + return (char_u *)"{E724}"; } ++recurse; @@ -6134,7 +6148,9 @@ static char_u *echo_string(typval_T *tv, char_u **tofree, char_u *numbuf, int co *tofree = NULL; } - --recurse; + if (--recurse == 0) { + did_echo_string_emsg = false; + } return r; } @@ -18009,7 +18025,10 @@ call_user_func ( if (argvars[i].v_type == VAR_NUMBER) msg_outnum((long)argvars[i].vval.v_number); else { + // Do not want errors such as E724 here. + ++emsg_off; s = tv2string(&argvars[i], &tofree, numbuf2, 0); + --emsg_off; if (s != NULL) { if (vim_strsize(s) > MSG_BUF_CLEN) { trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN); @@ -18091,10 +18110,12 @@ call_user_func ( char_u *tofree; char_u *s; - /* The value may be very long. Skip the middle part, so that we - * have some idea how it starts and ends. smsg() would always - * truncate it at the end. */ + // The value may be very long. Skip the middle part, so that we + // have some idea how it starts and ends. smsg() would always + // truncate it at the end. Don't want errors such as E724 here. + ++emsg_off; s = tv2string(fc->rettv, &tofree, numbuf2, 0); + --emsg_off; if (s != NULL) { if (vim_strsize(s) > MSG_BUF_CLEN) { trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN); diff --git a/src/nvim/indent.c b/src/nvim/indent.c index ebc5955bae..d4c6b36177 100644 --- a/src/nvim/indent.c +++ b/src/nvim/indent.c @@ -690,7 +690,7 @@ static int lisp_match(char_u *p) { char_u buf[LSIZE]; int len; - char_u *word = p_lispwords; + char_u *word = *curbuf->b_p_lw != NUL ? curbuf->b_p_lw : p_lispwords; while (*word != NUL) { (void)copy_option_part(&word, buf, LSIZE, ","); diff --git a/src/nvim/ops.c b/src/nvim/ops.c index b4ecb12299..0bf338947b 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -2505,6 +2505,9 @@ int op_yank(oparg_T *oap, int deleting, int mess) free(y_current->y_array); y_current = curr; } + if (curwin->w_p_rnu) { + redraw_later(SOME_VALID); // cursor moved to start + } if (mess) { /* Display message about yank? */ if (yanktype == MCHAR && !oap->block_mode diff --git a/src/nvim/option.c b/src/nvim/option.c index ca49a3dcb8..ebbba28b9d 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -143,6 +143,7 @@ # define PV_KMAP OPT_BUF(BV_KMAP) #define PV_KP OPT_BOTH(OPT_BUF(BV_KP)) # define PV_LISP OPT_BUF(BV_LISP) +# define PV_LW OPT_BOTH(OPT_BUF(BV_LW)) #define PV_MA OPT_BUF(BV_MA) #define PV_ML OPT_BUF(BV_ML) #define PV_MOD OPT_BUF(BV_MOD) @@ -1057,7 +1058,7 @@ static struct vimoption (char_u *)&p_lisp, PV_LISP, {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, {"lispwords", "lw", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, - (char_u *)&p_lispwords, PV_NONE, + (char_u *)&p_lispwords, PV_LW, {(char_u *)LISPWORD_VALUE, (char_u *)0L} SCRIPTID_INIT}, {"list", NULL, P_BOOL|P_VI_DEF|P_RWIN, @@ -3558,6 +3559,7 @@ void check_buf_options(buf_T *buf) check_string_option(&buf->b_p_tags); check_string_option(&buf->b_p_dict); check_string_option(&buf->b_p_tsr); + check_string_option(&buf->b_p_lw); } /* @@ -6583,6 +6585,9 @@ void unset_global_local_option(char *name, void *from) case PV_UL: buf->b_p_ul = NO_LOCAL_UNDOLEVEL; break; + case PV_LW: + clear_string_option(&buf->b_p_lw); + break; } } @@ -6612,6 +6617,7 @@ static char_u *get_varp_scope(struct vimoption *p, int opt_flags) case PV_TSR: return (char_u *)&(curbuf->b_p_tsr); case PV_STL: return (char_u *)&(curwin->w_p_stl); case PV_UL: return (char_u *)&(curbuf->b_p_ul); + case PV_LW: return (char_u *)&(curbuf->b_p_lw); } return NULL; /* "cannot happen" */ } @@ -6659,6 +6665,8 @@ static char_u *get_varp(struct vimoption *p) ? (char_u *)&(curwin->w_p_stl) : p->var; case PV_UL: return curbuf->b_p_ul != NO_LOCAL_UNDOLEVEL ? (char_u *)&(curbuf->b_p_ul) : p->var; + case PV_LW: return *curbuf->b_p_lw != NUL + ? (char_u *)&(curbuf->b_p_lw) : p->var; case PV_ARAB: return (char_u *)&(curwin->w_p_arab); case PV_LIST: return (char_u *)&(curwin->w_p_list); @@ -7011,6 +7019,7 @@ void buf_copy_options(buf_T *buf, int flags) buf->b_p_tsr = empty_option; buf->b_p_qe = vim_strsave(p_qe); buf->b_p_udf = p_udf; + buf->b_p_lw = empty_option; /* * Don't copy the options set by ex_help(), use the saved values, diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index a22eec4136..d862ab2761 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -185,7 +185,8 @@ #define SHM_SEARCH 's' /* no search hit bottom messages */ #define SHM_ATTENTION 'A' /* no ATTENTION messages */ #define SHM_INTRO 'I' /* intro messages */ -#define SHM_ALL "rmfixlnwaWtToOsAI" /* all possible flags for 'shm' */ +#define SHM_COMPLETIONMENU 'c' // completion menu messages +#define SHM_ALL "rmfixlnwaWtToOsAIc" /* all possible flags for 'shm' */ /* characters for p_go: */ #define GO_ASEL 'a' /* autoselect */ @@ -683,6 +684,7 @@ enum { , BV_KMAP , BV_KP , BV_LISP + , BV_LW , BV_MA , BV_ML , BV_MOD diff --git a/src/nvim/os/provider.c b/src/nvim/os/provider.c index 99cc078e94..d94203f683 100644 --- a/src/nvim/os/provider.c +++ b/src/nvim/os/provider.c @@ -158,8 +158,10 @@ static uint64_t get_provider_for(char *method) err: // Ensure we won't try to restart the provider - f->bootstrap_command = NULL; - f->channel_id = 0; + if (f) { + f->bootstrap_command = NULL; + f->channel_id = 0; + } return 0; } diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c index ba7e4eb2d3..193c68860d 100644 --- a/src/nvim/regexp.c +++ b/src/nvim/regexp.c @@ -258,6 +258,7 @@ #define RE_MARK 207 /* mark cmp Match mark position */ #define RE_VISUAL 208 /* Match Visual area */ +#define RE_COMPOSING 209 // any composing characters /* * Magic characters have a special meaning, they don't match literally. @@ -2024,6 +2025,10 @@ static char_u *regatom(int *flagp) ret = regnode(RE_VISUAL); break; + case 'C': + ret = regnode(RE_COMPOSING); + break; + /* \%[abc]: Emit as a list of branches, all ending at the last * branch which matches nothing. */ case '[': @@ -4099,10 +4104,12 @@ regmatch ( status = RA_NOMATCH; } } - // Check for following composing character. + // Check for following composing character, unless %C + // follows (skips over all composing chars). if (status != RA_NOMATCH && enc_utf8 && UTF_COMPOSINGLIKE(reginput, reginput + len) - && !ireg_icombine) { + && !ireg_icombine + && OP(next) != RE_COMPOSING) { // raaron: This code makes a composing character get // ignored, which is the correct behavior (sometimes) // for voweled Hebrew texts. @@ -4167,6 +4174,15 @@ regmatch ( status = RA_NOMATCH; break; + case RE_COMPOSING: + if (enc_utf8) { + // Skip composing characters. + while (utf_iscomposing(utf_ptr2char(reginput))) { + mb_cptr_adv(reginput); + } + } + break; + case NOTHING: break; diff --git a/src/nvim/regexp_nfa.c b/src/nvim/regexp_nfa.c index 21581d3823..2659eac762 100644 --- a/src/nvim/regexp_nfa.c +++ b/src/nvim/regexp_nfa.c @@ -85,6 +85,7 @@ enum { NFA_COMPOSING, /* Next nodes in NFA are part of the composing multibyte char */ NFA_END_COMPOSING, /* End of a composing char in the NFA */ + NFA_ANY_COMPOSING, // \%C: Any composing characters. NFA_OPT_CHARS, /* \%[abc] */ /* The following are used only in the postfix form, not in the NFA */ @@ -1350,6 +1351,10 @@ static int nfa_regatom(void) EMIT(NFA_VISUAL); break; + case 'C': + EMIT(NFA_ANY_COMPOSING); + break; + case '[': { int n; @@ -2259,6 +2264,7 @@ static void nfa_set_code(int c) case NFA_MARK_LT: STRCPY(code, "NFA_MARK_LT "); break; case NFA_CURSOR: STRCPY(code, "NFA_CURSOR "); break; case NFA_VISUAL: STRCPY(code, "NFA_VISUAL "); break; + case NFA_ANY_COMPOSING: STRCPY(code, "NFA_ANY_COMPOSING "); break; case NFA_STAR: STRCPY(code, "NFA_STAR "); break; case NFA_STAR_NONGREEDY: STRCPY(code, "NFA_STAR_NONGREEDY "); break; @@ -2716,6 +2722,7 @@ static int nfa_max_width(nfa_state_T *startstate, int depth) case NFA_NLOWER_IC: case NFA_UPPER_IC: case NFA_NUPPER_IC: + case NFA_ANY_COMPOSING: /* possibly non-ascii */ if (has_mbyte) len += 3; @@ -3714,6 +3721,7 @@ static int match_follows(nfa_state_T *startstate, int depth) continue; case NFA_ANY: + case NFA_ANY_COMPOSING: case NFA_IDENT: case NFA_SIDENT: case NFA_KWORD: @@ -3943,7 +3951,7 @@ skip_add: #endif switch (state->c) { case NFA_MATCH: - nfa_match = TRUE; + //nfa_match = TRUE; break; case NFA_SPLIT: @@ -4573,6 +4581,7 @@ static int failure_chance(nfa_state_T *state, int depth) case NFA_MATCH: case NFA_MCLOSE: + case NFA_ANY_COMPOSING: /* empty match works always */ return 0; @@ -4951,6 +4960,11 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *subm switch (t->state->c) { case NFA_MATCH: { + // If the match ends before a composing characters and + // ireg_icombine is not set, that is not really a match. + if (enc_utf8 && !ireg_icombine && utf_iscomposing(curc)) { + break; + } nfa_match = TRUE; copy_sub(&submatch->norm, &t->subs.norm); if (nfa_has_zsubexpr) @@ -5430,6 +5444,18 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *subm } break; + case NFA_ANY_COMPOSING: + // On a composing character skip over it. Otherwise do + // nothing. Always matches. + if (enc_utf8 && utf_iscomposing(curc)) { + add_off = clen; + } else { + add_here = TRUE; + add_off = 0; + } + add_state = t->state->out; + break; + /* * Character classes like \a for alpha, \d for digit etc. */ @@ -5769,12 +5795,13 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *subm if (!result && ireg_ic) result = vim_tolower(c) == vim_tolower(curc); - /* If there is a composing character which is not being - * ignored there can be no match. Match with composing - * character uses NFA_COMPOSING above. */ - if (result && enc_utf8 && !ireg_icombine - && clen != utf_char2len(curc)) - result = FALSE; + + // If ireg_icombine is not set only skip over the character + // itself. When it is set skip over composing characters. + if (result && enc_utf8 && !ireg_icombine) { + clen = utf_char2len(curc); + } + ADD_STATE_IF_MATCH(t->state); break; } diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 1fd872d61c..03c59bf584 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -41,7 +41,7 @@ * * The part of the buffer that is displayed in a window is set with: * - w_topline (first buffer line in window) - * - w_topfill (filler line above the first line) + * - w_topfill (filler lines above the first line) * - w_leftcol (leftmost window cell in window), * - w_skipcol (skipped window cells of first line) * @@ -7341,7 +7341,8 @@ int showmode(void) attr = hl_attr(HLF_CM); /* Highlight mode */ if (do_mode) { MSG_PUTS_ATTR("--", attr); - if (edit_submode != NULL) { /* CTRL-X in Insert mode */ + // CTRL-X in Insert mode + if (edit_submode != NULL && !shortmess(SHM_COMPLETIONMENU)) { /* These messages can get long, avoid a wrap in a narrow * window. Prefer showing edit_submode_extra. */ length = (Rows - msg_row) * Columns - 3; diff --git a/src/nvim/search.c b/src/nvim/search.c index c995300d56..b0a782a515 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -3015,21 +3015,21 @@ current_block ( } curwin->w_cursor = *end_pos; - /* - * Try to exclude the '(', '{', ')', '}', etc. when "include" is FALSE. - * If the ending '}' is only preceded by indent, skip that indent. - * But only if the resulting area is not smaller than what we started with. - */ + // Try to exclude the '(', '{', ')', '}', etc. when "include" is FALSE. + // If the ending '}', ')' or ']' is only preceded by indent, skip that + // indent. But only if the resulting area is not smaller than what we + // started with. while (!include) { incl(&start_pos); sol = (curwin->w_cursor.col == 0); decl(&curwin->w_cursor); - if (what == '{') - while (inindent(1)) { - sol = TRUE; - if (decl(&curwin->w_cursor) != 0) - break; + while (inindent(1)) { + sol = TRUE; + if (decl(&curwin->w_cursor) != 0) { + break; } + } + /* * In Visual mode, when the resulting area is not bigger than what we * started with, extend it to the next block, and then exclude again. diff --git a/src/nvim/testdir/test100.in b/src/nvim/testdir/test100.in index e42331946c..f9f5f9119f 100644 --- a/src/nvim/testdir/test100.in +++ b/src/nvim/testdir/test100.in @@ -37,6 +37,14 @@ STARTTEST :call UndoLevel() :%w >> test.out :"sleep 10 +:" +:" Testing 'lispwords' +:" +:setglobal lispwords=foo,bar,baz +:setlocal lispwords-=foo | setlocal lispwords+=quux +:redir >> test.out | echon "\nTesting 'lispwords' local value" | setglobal lispwords? | setlocal lispwords? | echo &lispwords . "\n" | redir end +:setlocal lispwords< +:redir >> test.out | echon "\nTesting 'lispwords' value reset" | setglobal lispwords? | setlocal lispwords? | echo &lispwords . "\n" | redir end :qa! ENDTEST diff --git a/src/nvim/testdir/test100.ok b/src/nvim/testdir/test100.ok index 95b318461c..477106b8f2 100644 --- a/src/nvim/testdir/test100.ok +++ b/src/nvim/testdir/test100.ok @@ -39,3 +39,13 @@ THREE: expecting global undolevels: 50, local undolevels: -123456 (default) undolevels=50 global undolevels=-123456 local + +Testing 'lispwords' local value + lispwords=foo,bar,baz + lispwords=bar,baz,quux +bar,baz,quux + +Testing 'lispwords' value reset + lispwords=foo,bar,baz + lispwords=foo,bar,baz +foo,bar,baz diff --git a/src/nvim/testdir/test95.in b/src/nvim/testdir/test95.in index 568563f88d..b2b9de772e 100644 --- a/src/nvim/testdir/test95.in +++ b/src/nvim/testdir/test95.in @@ -50,7 +50,11 @@ STARTTEST :call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"]) :call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"]) :call add(tl, [2, "a", "ca\u0300t"]) +:call add(tl, [2, "ca", "ca\u0300t"]) :call add(tl, [2, "a\u0300", "ca\u0300t", "a\u0300"]) +:call add(tl, [2, 'a\%C', "ca\u0300t", "a\u0300"]) +:call add(tl, [2, 'ca\%C', "ca\u0300t", "ca\u0300"]) +:call add(tl, [2, 'ca\%Ct', "ca\u0300t", "ca\u0300t"]) :"""" Test \Z @@ -90,15 +94,15 @@ STARTTEST : try : let l = matchlist(text, pat) : catch -: $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"' +: $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"' : endtry :" check the match itself : if len(l) == 0 && len(t) > matchidx -: $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"' +: $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"' : elseif len(l) > 0 && len(t) == matchidx -: $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match' +: $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match' : elseif len(t) > matchidx && l[0] != t[matchidx] -: $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"' +: $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"' : else : $put ='OK ' . engine . ' - ' . pat : endif @@ -111,7 +115,7 @@ STARTTEST : let e = t[matchidx + i] : endif : if l[i] != e -: $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"' +: $put ='ERROR ' . engine . ': pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"' : endif : endfor : unlet i diff --git a/src/nvim/testdir/test95.ok b/src/nvim/testdir/test95.ok index e2baee8d29..6762994c12 100644 --- a/src/nvim/testdir/test95.ok +++ b/src/nvim/testdir/test95.ok @@ -70,9 +70,21 @@ OK 2 - .ֹֻ OK 0 - a OK 1 - a OK 2 - a +OK 0 - ca +OK 1 - ca +OK 2 - ca OK 0 - à OK 1 - à OK 2 - à +OK 0 - a\%C +OK 1 - a\%C +OK 2 - a\%C +OK 0 - ca\%C +OK 1 - ca\%C +OK 2 - ca\%C +OK 0 - ca\%Ct +OK 1 - ca\%Ct +OK 2 - ca\%Ct OK 0 - ú\Z OK 1 - ú\Z OK 2 - ú\Z diff --git a/src/nvim/version.c b/src/nvim/version.c index 3311b78f49..9f0909fb18 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -214,15 +214,15 @@ static int included_patches[] = { //338, //337, //336, - //335, + 335, //334, //333, //332, - //331, + 331, //330, //329, - //328, - //327, + 328, + 327, //326, //325, //324, @@ -235,7 +235,7 @@ static int included_patches[] = { //317, //316, 315, - //314, + 314, //313, //312, //311, @@ -255,8 +255,8 @@ static int included_patches[] = { //297, //296, 295, - //294, - //293, + 294, + 293, 292, 291, 290, @@ -348,7 +348,7 @@ static int included_patches[] = { 204, 203, //202, - //201, + 201, //200, 199, //198, |