mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:7.4.503 #2178
Problem: Cannot append a list of lines to a file. Solution: Add the append option to writefile(). (Yasuhiro Matsumoto) https://code.google.com/p/vim/source/detail?r=v7-4-503 -Ported old legacy test over to test/functional/legacy/writefile_spec.lua -Tests for mapping and signs from the original patch were removed since they have nothing to do this with feature Tested with: make oldtest, make test on OS X. Signed-off-by: Perry Hung <iperry@gmail.com>
This commit is contained in:
parent
2d0f7fa95d
commit
26e6bca769
@ -2049,7 +2049,7 @@ winrestcmd() String returns command to restore window sizes
|
|||||||
winrestview( {dict}) none restore view of current window
|
winrestview( {dict}) none restore view of current window
|
||||||
winsaveview() Dict save view of current window
|
winsaveview() Dict save view of current window
|
||||||
winwidth( {nr}) Number width of window {nr}
|
winwidth( {nr}) Number width of window {nr}
|
||||||
writefile( {list}, {fname} [, {binary}])
|
writefile( {list}, {fname} [, {flags}])
|
||||||
Number write list of lines to file {fname}
|
Number write list of lines to file {fname}
|
||||||
xor( {expr}, {expr}) Number bitwise XOR
|
xor( {expr}, {expr}) Number bitwise XOR
|
||||||
|
|
||||||
@ -6593,13 +6593,19 @@ winwidth({nr}) *winwidth()*
|
|||||||
:endif
|
:endif
|
||||||
<
|
<
|
||||||
*writefile()*
|
*writefile()*
|
||||||
writefile({list}, {fname} [, {binary}])
|
writefile({list}, {fname} [, {flags}])
|
||||||
Write |List| {list} to file {fname}. Each list item is
|
Write |List| {list} to file {fname}. Each list item is
|
||||||
separated with a NL. Each list item must be a String or
|
separated with a NL. Each list item must be a String or
|
||||||
Number.
|
Number.
|
||||||
When {binary} is equal to "b" binary mode is used: There will
|
When {flags} contains "b" then binary mode is used: There will
|
||||||
not be a NL after the last list item. An empty item at the
|
not be a NL after the last list item. An empty item at the
|
||||||
end does cause the last line in the file to end in a NL.
|
end does cause the last line in the file to end in a NL.
|
||||||
|
|
||||||
|
When {flags} contains "a" then append mode is used, lines are
|
||||||
|
appended to the file: >
|
||||||
|
:call writefile(["foo"], "event.log", "a")
|
||||||
|
:call writefile(["bar"], "event.log", "a")
|
||||||
|
|
||||||
All NL characters are replaced with a NUL character.
|
All NL characters are replaced with a NUL character.
|
||||||
Inserting CR characters needs to be done before passing {list}
|
Inserting CR characters needs to be done before passing {list}
|
||||||
to writefile().
|
to writefile().
|
||||||
|
@ -15453,16 +15453,22 @@ static void f_writefile(typval_T *argvars, typval_T *rettv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool binary = false;
|
bool binary = false;
|
||||||
if (argvars[2].v_type != VAR_UNKNOWN
|
bool append = false;
|
||||||
&& STRCMP(get_tv_string(&argvars[2]), "b") == 0) {
|
if (argvars[2].v_type != VAR_UNKNOWN) {
|
||||||
binary = true;
|
if (vim_strchr(get_tv_string(&argvars[2]), 'b')) {
|
||||||
|
binary = true;
|
||||||
|
}
|
||||||
|
if (vim_strchr(get_tv_string(&argvars[2]), 'a')) {
|
||||||
|
append = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always open the file in binary mode, library functions have a mind of
|
// Always open the file in binary mode, library functions have a mind of
|
||||||
// their own about CR-LF conversion.
|
// their own about CR-LF conversion.
|
||||||
char_u *fname = get_tv_string(&argvars[1]);
|
char_u *fname = get_tv_string(&argvars[1]);
|
||||||
FILE *fd;
|
FILE *fd;
|
||||||
if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL) {
|
if (*fname == NUL || (fd = mch_fopen((char *)fname,
|
||||||
|
append ? APPENDBIN : WRITEBIN)) == NULL) {
|
||||||
EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
|
EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
|
||||||
rettv->vval.v_number = -1;
|
rettv->vval.v_number = -1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -337,7 +337,7 @@ static int included_patches[] = {
|
|||||||
//506 NA
|
//506 NA
|
||||||
//505 NA
|
//505 NA
|
||||||
//504 NA
|
//504 NA
|
||||||
//503,
|
503,
|
||||||
//502,
|
//502,
|
||||||
//501 NA
|
//501 NA
|
||||||
500,
|
500,
|
||||||
|
30
test/functional/legacy/writefile_spec.lua
Normal file
30
test/functional/legacy/writefile_spec.lua
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
-- Tests for writefile()
|
||||||
|
|
||||||
|
local helpers = require('test.functional.helpers')
|
||||||
|
local feed, insert, source = helpers.feed, helpers.insert, helpers.source
|
||||||
|
local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect
|
||||||
|
|
||||||
|
describe('writefile', function()
|
||||||
|
setup(clear)
|
||||||
|
|
||||||
|
it('is working', function()
|
||||||
|
execute('%delete _')
|
||||||
|
execute('let f = tempname()')
|
||||||
|
execute('call writefile(["over","written"], f, "b")')
|
||||||
|
execute('call writefile(["hello","world"], f, "b")')
|
||||||
|
execute('call writefile(["!", "good"], f, "a")')
|
||||||
|
execute('call writefile(["morning"], f, "ab")')
|
||||||
|
execute('call writefile(["", "vimmers"], f, "ab")')
|
||||||
|
execute('bwipeout!')
|
||||||
|
execute('$put =readfile(f)')
|
||||||
|
execute('1 delete _')
|
||||||
|
|
||||||
|
-- Assert buffer contents.
|
||||||
|
expect([[
|
||||||
|
hello
|
||||||
|
world!
|
||||||
|
good
|
||||||
|
morning
|
||||||
|
vimmers]])
|
||||||
|
end)
|
||||||
|
end)
|
Loading…
Reference in New Issue
Block a user