Skip to content

Commit d489631

Browse files
committed
Merge remote-tracking branch 'vim/master'
2 parents 69744f5 + aeb661e commit d489631

37 files changed

+689
-126
lines changed

Filelist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ SRC_ALL = \
9797
src/tee/tee.c \
9898
src/xxd/xxd.c \
9999
src/main.aap \
100+
src/gen_opt_test.vim \
100101
src/testdir/main.aap \
101102
src/testdir/README.txt \
102103
src/testdir/Make_all.mak \

src/Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2042,6 +2042,7 @@ test check: scripttests unittests
20422042
#
20432043
scripttests:
20442044
$(MAKE) -f Makefile $(VIMTARGET)
2045+
$(MAKE) -f Makefile testdir/opt_test.vim
20452046
if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \
20462047
cd $(PODIR); $(MAKE) -f Makefile check VIM=../$(VIMTARGET); \
20472048
fi
@@ -2050,6 +2051,8 @@ scripttests:
20502051
fi
20512052
cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE)
20522053

2054+
testdir/opt_test.vim: option.c gen_opt_test.vim
2055+
./$(VIMTARGET) -u gen_opt_test.vim --noplugin --not-a-term
20532056

20542057
# Run the tests with the GUI. Assumes vim/gvim was already built
20552058
testgui:
@@ -2210,6 +2213,7 @@ test_arglist \
22102213
test_smartindent \
22112214
test_sort \
22122215
test_source_utf8 \
2216+
test_spell \
22132217
test_startup \
22142218
test_startup_utf8 \
22152219
test_stat \
@@ -2769,6 +2773,7 @@ clean celan: testclean macvimclean
27692773
-rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
27702774
-rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c auto/gui_gtk_gresources.c auto/gui_gtk_gresources.h
27712775
-rm -f conftest* *~ auto/link.sed
2776+
-rm -f testdir/opt_test.vim
27722777
-rm -f $(UNITTEST_TARGETS)
27732778
-rm -f runtime pixmaps
27742779
-rm -rf $(APPDIR)
@@ -2783,7 +2788,7 @@ SHADOWDIR = shadow
27832788

27842789
shadow: runtime pixmaps
27852790
mkdir $(SHADOWDIR)
2786-
cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../vimtutor ../gvimtutor ../mkinstalldirs .
2791+
cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.vim ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../vimtutor ../gvimtutor ../mkinstalldirs .
27872792
mkdir $(SHADOWDIR)/auto
27882793
cd $(SHADOWDIR)/auto; ln -s ../../auto/configure .
27892794
mkdir $(SHADOWDIR)/po

src/buffer.c

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,6 @@ free_buffer(buf_T *buf)
836836
free_buffer_stuff(buf, TRUE);
837837
#ifdef FEAT_EVAL
838838
unref_var_dict(buf->b_vars);
839-
buf->b_changedtick = &buf->b_ct_val;
840839
#endif
841840
#ifdef FEAT_LUA
842841
lua_buffer_free(buf);
@@ -878,31 +877,22 @@ free_buffer(buf_T *buf)
878877
}
879878

880879
/*
881-
* Initializes buf->b_changedtick.
880+
* Initializes b:changedtick.
882881
*/
883882
static void
884883
init_changedtick(buf_T *buf)
885884
{
886-
#ifdef FEAT_EVAL
887-
dictitem_T *di = dictitem_alloc((char_u *)"changedtick");
885+
dictitem_T *di = (dictitem_T *)&buf->b_ct_di;
888886

889-
if (di != NULL)
890-
{
891-
di->di_flags |= DI_FLAGS_FIX | DI_FLAGS_RO;
892-
di->di_tv.v_type = VAR_NUMBER;
893-
di->di_tv.v_lock = VAR_FIXED;
894-
di->di_tv.vval.v_number = 0;
895-
if (dict_add(buf->b_vars, di) == OK)
896-
buf->b_changedtick = &di->di_tv.vval.v_number;
897-
else
898-
{
899-
vim_free(di);
900-
buf->b_changedtick = &buf->b_ct_val;
901-
}
902-
}
903-
else
887+
di->di_flags = DI_FLAGS_FIX | DI_FLAGS_RO;
888+
di->di_tv.v_type = VAR_NUMBER;
889+
di->di_tv.v_lock = VAR_FIXED;
890+
di->di_tv.vval.v_number = 0;
891+
892+
#ifdef FEAT_EVAL
893+
STRCPY(buf->b_ct_di.di_key, "changedtick");
894+
(void)dict_add(buf->b_vars, di);
904895
#endif
905-
buf->b_changedtick = &buf->b_ct_val;
906896
}
907897

908898
/*
@@ -923,12 +913,12 @@ free_buffer_stuff(
923913
}
924914
#ifdef FEAT_EVAL
925915
{
926-
varnumber_T tick = *buf->b_changedtick;
916+
varnumber_T tick = CHANGEDTICK(buf);
927917

928918
vars_clear(&buf->b_vars->dv_hashtab); /* free all buffer variables */
929919
hash_init(&buf->b_vars->dv_hashtab);
930920
init_changedtick(buf);
931-
*buf->b_changedtick = tick;
921+
CHANGEDTICK(buf) = tick;
932922
}
933923
#endif
934924
#ifdef FEAT_USR_CMDS

src/dict.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ dict_free_contents(dict_T *d)
8888
* something recursive causing trouble. */
8989
di = HI2DI(hi);
9090
hash_remove(&d->dv_hashtab, hi);
91-
clear_tv(&di->di_tv);
92-
vim_free(di);
91+
dictitem_free(di);
9392
--todo;
9493
}
9594
}

src/edit.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,8 +1038,10 @@ edit(
10381038
if (!p_im)
10391039
goto normalchar; /* insert CTRL-Z as normal char */
10401040
do_cmdline_cmd((char_u *)"stop");
1041-
c = Ctrl_O;
1042-
/*FALLTHROUGH*/
1041+
#ifdef CURSOR_SHAPE
1042+
ui_cursor_shape(); /* may need to update cursor shape */
1043+
#endif
1044+
continue;
10431045

10441046
case Ctrl_O: /* execute one command */
10451047
#ifdef FEAT_COMPL_FUNC
@@ -1677,7 +1679,7 @@ ins_redraw(
16771679
#ifdef FEAT_AUTOCMD
16781680
/* Trigger TextChangedI if b_changedtick differs. */
16791681
if (ready && has_textchangedI()
1680-
&& last_changedtick != *curbuf->b_changedtick
1682+
&& last_changedtick != CHANGEDTICK(curbuf)
16811683
# ifdef FEAT_INS_EXPAND
16821684
&& !pum_visible()
16831685
# endif
@@ -1686,7 +1688,7 @@ ins_redraw(
16861688
if (last_changedtick_buf == curbuf)
16871689
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
16881690
last_changedtick_buf = curbuf;
1689-
last_changedtick = *curbuf->b_changedtick;
1691+
last_changedtick = CHANGEDTICK(curbuf);
16901692
}
16911693
#endif
16921694

src/eval.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6640,7 +6640,7 @@ set_vim_var_dict(int idx, dict_T *val)
66406640
if (HASHITEM_EMPTY(hi))
66416641
continue;
66426642
--todo;
6643-
HI2DI(hi)->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
6643+
HI2DI(hi)->di_flags |= DI_FLAGS_RO | DI_FLAGS_FIX;
66446644
}
66456645
}
66466646
}

src/evalfunc.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2550,7 +2550,7 @@ f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
25502550
if (lnum < 0) /* ignore type error in {lnum} arg */
25512551
lnum = 0;
25522552
if (lnum != prev_lnum
2553-
|| changedtick != *curbuf->b_changedtick
2553+
|| changedtick != CHANGEDTICK(curbuf)
25542554
|| fnum != curbuf->b_fnum)
25552555
{
25562556
/* New line, buffer, change: need to get the values. */
@@ -2572,7 +2572,7 @@ f_diff_hlID(typval_T *argvars UNUSED, typval_T *rettv UNUSED)
25722572
else
25732573
hlID = (hlf_T)0;
25742574
prev_lnum = lnum;
2575-
changedtick = *curbuf->b_changedtick;
2575+
changedtick = CHANGEDTICK(curbuf);
25762576
fnum = curbuf->b_fnum;
25772577
}
25782578

@@ -3957,7 +3957,7 @@ get_buffer_info(buf_T *buf)
39573957
dict_add_nr_str(dict, "loaded", buf->b_ml.ml_mfp != NULL, NULL);
39583958
dict_add_nr_str(dict, "listed", buf->b_p_bl, NULL);
39593959
dict_add_nr_str(dict, "changed", bufIsChanged(buf), NULL);
3960-
dict_add_nr_str(dict, "changedtick", *buf->b_changedtick, NULL);
3960+
dict_add_nr_str(dict, "changedtick", CHANGEDTICK(buf), NULL);
39613961
dict_add_nr_str(dict, "hidden",
39623962
buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0,
39633963
NULL);

src/ex_cmds.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5288,6 +5288,8 @@ do_sub(exarg_T *eap)
52885288

52895289
getvcol(curwin, &curwin->w_cursor, &sc, NULL, NULL);
52905290
curwin->w_cursor.col = regmatch.endpos[0].col - 1;
5291+
if (curwin->w_cursor.col < 0)
5292+
curwin->w_cursor.col = 0;
52915293
getvcol(curwin, &curwin->w_cursor, NULL, NULL, &ec);
52925294
if (subflags.do_number || curwin->w_p_nu)
52935295
{

src/ex_docmd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ do_exmode(
667667
need_wait_return = FALSE;
668668
ex_pressedreturn = FALSE;
669669
ex_no_reprint = FALSE;
670-
changedtick = *curbuf->b_changedtick;
670+
changedtick = CHANGEDTICK(curbuf);
671671
prev_msg_row = msg_row;
672672
prev_line = curwin->w_cursor.lnum;
673673
if (improved)
@@ -680,7 +680,7 @@ do_exmode(
680680
lines_left = Rows - 1;
681681

682682
if ((prev_line != curwin->w_cursor.lnum
683-
|| changedtick != *curbuf->b_changedtick) && !ex_no_reprint)
683+
|| changedtick != CHANGEDTICK(curbuf)) && !ex_no_reprint)
684684
{
685685
if (curbuf->b_ml.ml_flags & ML_EMPTY)
686686
EMSG(_(e_emptybuf));

src/ex_getln.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2377,9 +2377,16 @@ getexmodeline(
23772377
if (ga_grow(&line_ga, 40) == FAIL)
23782378
break;
23792379

2380-
/* Get one character at a time. */
2380+
/*
2381+
* Get one character at a time.
2382+
*/
23812383
prev_char = c1;
2382-
c1 = vgetc();
2384+
2385+
/* Check for a ":normal" command and no more characters left. */
2386+
if (ex_normal_busy > 0 && typebuf.tb_len == 0)
2387+
c1 = '\n';
2388+
else
2389+
c1 = vgetc();
23832390

23842391
/*
23852392
* Handle line editing.

0 commit comments

Comments
 (0)