From 9d954207e2cc807b475bb04f8b59ef5bb3772d99 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 4 Sep 2017 20:34:19 +0200 Subject: patch 8.0.1053: setline() does not work on startup Problem: setline() does not work on startup. (Manuel Ortega) Solution: Do not check for ml_mfp to be set for the current buffer. (Christian Brabandt) --- src/evalfunc.c | 5 ++++- src/testdir/shared.vim | 14 ++++++++++---- src/testdir/test_alot.vim | 2 ++ src/testdir/test_bufline.vim | 13 +++++++++++++ src/testdir/test_timers.vim | 2 -- src/version.c | 2 ++ 6 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/evalfunc.c b/src/evalfunc.c index 2692de61f..cf9c8d8ec 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -9885,7 +9885,10 @@ set_buffer_lines(buf_T *buf, linenr_T lnum, typval_T *lines, typval_T *rettv) buf_T *curbuf_save; int is_curbuf = buf == curbuf; - if (buf == NULL || buf->b_ml.ml_mfp == NULL || lnum < 1) + /* When using the current buffer ml_mfp will be set if needed. Useful when + * setline() is used on startup. For other buffers the buffer must be + * loaded. */ + if (buf == NULL || (!is_curbuf && buf->b_ml.ml_mfp == NULL) || lnum < 1) { rettv->vval.v_number = 1; /* FAIL */ return; diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim index a305c90cb..691199a97 100644 --- a/src/testdir/shared.vim +++ b/src/testdir/shared.vim @@ -166,15 +166,21 @@ func s:feedkeys(timer) endfunc " Get the command to run Vim, with -u NONE and --not-a-term arguments. +" If there is an argument use it instead of "NONE". " Returns an empty string on error. -func GetVimCommand() +func GetVimCommand(...) if !filereadable('vimcmd') return '' endif + if a:0 == 0 + let name = 'NONE' + else + let name = a:1 + endif let cmd = readfile('vimcmd')[0] - let cmd = substitute(cmd, '-u \f\+', '-u NONE', '') - if cmd !~ '-u NONE' - let cmd = cmd . ' -u NONE' + let cmd = substitute(cmd, '-u \f\+', '-u ' . name, '') + if cmd !~ '-u '. name + let cmd = cmd . ' -u ' . name endif let cmd .= ' --not-a-term' let cmd = substitute(cmd, 'VIMRUNTIME=.*VIMRUNTIME;', '', '') diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim index 189cd82d1..61c3472b2 100644 --- a/src/testdir/test_alot.vim +++ b/src/testdir/test_alot.vim @@ -1,6 +1,8 @@ " A series of tests that can run in one Vim invocation. " This makes testing go faster, since Vim doesn't need to restart. +source shared.vim + set belloff=all source test_assign.vim source test_bufline.vim diff --git a/src/testdir/test_bufline.vim b/src/testdir/test_bufline.vim index 7df36aa6a..2fe6739ed 100644 --- a/src/testdir/test_bufline.vim +++ b/src/testdir/test_bufline.vim @@ -24,3 +24,16 @@ func Test_setbufline_getbufline() call assert_equal([], getbufline(b, 6)) exe "bwipe! " . b endfunc + +func Test_setline_startup() + let cmd = GetVimCommand('Xscript') + if cmd == '' + return + endif + call writefile(['call setline(1, "Hello")', 'w Xtest', 'q!'], 'Xscript') + call system(cmd) + call assert_equal(['Hello'], readfile('Xtest')) + + call delete('Xscript') + call delete('Xtest') +endfunc diff --git a/src/testdir/test_timers.vim b/src/testdir/test_timers.vim index 0c6bb8338..142bfc8a5 100644 --- a/src/testdir/test_timers.vim +++ b/src/testdir/test_timers.vim @@ -1,7 +1,5 @@ " Test for timers -source shared.vim - if !has('timers') finish endif diff --git a/src/version.c b/src/version.c index 2b30a090f..5f49b381f 100644 --- a/src/version.c +++ b/src/version.c @@ -769,6 +769,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1053, /**/ 1052, /**/ -- cgit v1.2.1