summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-09-04 20:34:19 +0200
committerBram Moolenaar <Bram@vim.org>2017-09-04 20:34:19 +0200
commit9d954207e2cc807b475bb04f8b59ef5bb3772d99 (patch)
tree1cc786e3355baa912671ab3b54ae8da5de43ae8b /src
parente88fc7a574263fd399c6815378bcd8fd228d8b54 (diff)
downloadvim-git-9d954207e2cc807b475bb04f8b59ef5bb3772d99.tar.gz
patch 8.0.1053: setline() does not work on startupv8.0.1053
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)
Diffstat (limited to 'src')
-rw-r--r--src/evalfunc.c5
-rw-r--r--src/testdir/shared.vim14
-rw-r--r--src/testdir/test_alot.vim2
-rw-r--r--src/testdir/test_bufline.vim13
-rw-r--r--src/testdir/test_timers.vim2
-rw-r--r--src/version.c2
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
@@ -770,6 +770,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1053,
+/**/
1052,
/**/
1051,