Problem: append() reports failure when not appending anything.
Solution: Only report failure when appending something. (closes #11498)
{lnum} can be zero to insert a line before the first one.
{lnum} is used like with |getline()|.
Returns 1 for failure ({lnum} out of range or out of memory),
- 0 for success. In |Vim9| script an invalid argument or
- negative number results in an error. Example: >
+ 0 for success. When {text} is an empty list zero is returned,
+ no matter the value of {lnum}.
+ In |Vim9| script an invalid argument or negative number
+ results in an error. Example: >
:let failed = append(line('$'), "# THE END")
:let failed = append(0, ["Chapter 1", "the beginning"])
If {buf} is not a valid buffer or {lnum} is not valid, an
error message is given. Example: >
:let failed = appendbufline(13, 0, "# THE START")
-<
+< However, when {text} is an empty list then no error is given
+ for an invalid {lnum}, since {lnum} isn't actually used.
+
Can also be used as a |method| after a List, the base is
passed as the second argument: >
mylist->appendbufline(buf, lnum)
let acmd.bufnr = 5
let acmd.cmd = 'call BufEnterFunc()'
call autocmd_add([acmd])
-
+<
Can also be used as a |method|: >
GetAutocmdList()->autocmd_add()
<
To insert lines use |appendbufline()|.
Any text properties in {lnum} are cleared.
- {text} can be a string to set one line, or a list of strings
- to set multiple lines. If the list extends below the last
- line then those lines are added.
+ {text} can be a string to set one line, or a List of strings
+ to set multiple lines. If the List extends below the last
+ line then those lines are added. If the List is empty then
+ nothing is changed and zero is returned.
For the use of {buf}, see |bufname()| above.
When {lnum} is just below the last line the {text} will be
added below the last line.
{text} can be any type or a List of any type, each item is
- converted to a String.
+ converted to a String. When {text} is an empty List then
+ nothing is changed and FALSE is returned.
If this succeeds, FALSE is returned. If this fails (most likely
because {lnum} is invalid) TRUE is returned.
l = lines->vval.v_list;
if (l == NULL || list_len(l) == 0)
{
- // set proper return code
- if (lnum > curbuf->b_ml.ml_line_count)
- rettv->vval.v_number = 1; // FAIL
+ // not appending anything always succeeds
goto done;
}
CHECK_LIST_MATERIALIZE(l);
call assert_equal(1, setbufline(b, 5, 'x'))
call assert_equal(1, setbufline(b, 5, ['x']))
- call assert_equal(1, setbufline(b, 5, []))
- call assert_equal(1, setbufline(b, 5, test_null_list()))
+ call assert_equal(0, setbufline(b, 5, []))
+ call assert_equal(0, setbufline(b, 5, test_null_list()))
call assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
call assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
sleep 50m
call assert_equal(['Hello'], readfile('Xtest'))
+ call assert_equal(0, setline(1, []))
+ call assert_equal(0, setline(1, test_null_list()))
+ call assert_equal(0, setline(5, []))
+ call assert_equal(0, setline(6, test_null_list()))
+
call delete('Xtest')
endfunc
call assert_equal(1, appendbufline(b, 4, 'x'))
call assert_equal(1, appendbufline(b, 4, ['x']))
- call assert_equal(1, appendbufline(b, 4, []))
- call assert_equal(1, appendbufline(b, 4, test_null_list()))
+ call assert_equal(0, appendbufline(b, 4, []))
+ call assert_equal(0, appendbufline(b, 4, test_null_list()))
call assert_equal(1, appendbufline(1234, 1, 'x'))
call assert_equal(1, appendbufline(1234, 1, ['x']))
call assert_equal(0, appendbufline(b, 1, []))
call assert_equal(0, appendbufline(b, 1, test_null_list()))
- call assert_equal(1, appendbufline(b, 3, []))
- call assert_equal(1, appendbufline(b, 3, test_null_list()))
+ call assert_equal(0, appendbufline(b, 3, []))
+ call assert_equal(0, appendbufline(b, 3, test_null_list()))
call assert_equal(['a', 'b', 'c'], getbufline(b, 1, '$'))
func Test_append()
enew!
split
- call append(0, ["foo"])
- call append(1, [])
- call append(1, test_null_list())
+ call assert_equal(0, append(1, []))
+ call assert_equal(0, append(1, test_null_list()))
+ call assert_equal(0, append(0, ["foo"]))
+ call assert_equal(0, append(1, []))
+ call assert_equal(0, append(1, test_null_list()))
+ call assert_equal(0, append(8, []))
+ call assert_equal(0, append(9, test_null_list()))
call assert_equal(['foo', ''], getline(1, '$'))
split
only
assert_equal(1, setbufline(b, 5, 'x'))
assert_equal(1, setbufline(b, 5, ['x']))
- assert_equal(1, setbufline(b, 5, []))
- assert_equal(1, setbufline(b, 5, test_null_list()))
+ assert_equal(0, setbufline(b, 5, []))
+ assert_equal(0, setbufline(b, 5, test_null_list()))
assert_equal(1, 'x'->setbufline(bufnr('$') + 1, 1))
assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 837,
/**/
836,
/**/