| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.503 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.503 |
| Problem: Cannot append a list of lines to a file. |
| Solution: Add the append option to writefile(). (Yasuhiro Matsumoto) |
| Files: runtime/doc/eval.txt, src/Makefile, src/eval.c, |
| src/testdir/test_writefile.in, src/testdir/test_writefile.ok |
| |
| |
| |
| |
| |
| *** 2040,2046 **** |
| winrestview( {dict}) none restore view of current window |
| winsaveview() Dict save view of current window |
| winwidth( {nr}) Number width of window {nr} |
| ! writefile( {list}, {fname} [, {binary}]) |
| Number write list of lines to file {fname} |
| xor( {expr}, {expr}) Number bitwise XOR |
| |
| --- 2041,2047 ---- |
| winrestview( {dict}) none restore view of current window |
| winsaveview() Dict save view of current window |
| winwidth( {nr}) Number width of window {nr} |
| ! writefile( {list}, {fname} [, {flags}]) |
| Number write list of lines to file {fname} |
| xor( {expr}, {expr}) Number bitwise XOR |
| |
| |
| *** 6532,6545 **** |
| :endif |
| < |
| *writefile()* |
| ! writefile({list}, {fname} [, {binary}]) |
| Write |List| {list} to file {fname}. Each list item is |
| separated with a NL. Each list item must be a String or |
| Number. |
| ! When {binary} is equal to "b" binary mode is used: There will |
| 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. |
| ! All NL characters are replaced with a NUL character. |
| Inserting CR characters needs to be done before passing {list} |
| to writefile(). |
| An existing file is overwritten, if possible. |
| --- 6555,6574 ---- |
| :endif |
| < |
| *writefile()* |
| ! writefile({list}, {fname} [, {flags}]) |
| Write |List| {list} to file {fname}. Each list item is |
| separated with a NL. Each list item must be a String or |
| Number. |
| ! 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 |
| 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 |
| ! append to the file: > |
| ! :call writefile(["foo"], "event.log", "a") |
| ! :call writefile(["bar"], "event.log", "a") |
| ! > |
| ! < All NL characters are replaced with a NUL character. |
| Inserting CR characters needs to be done before passing {list} |
| to writefile(). |
| An existing file is overwritten, if possible. |
| |
| |
| |
| *** 1899,1906 **** |
| --- 1899,1910 ---- |
| test_insertcount \ |
| test_listlbr \ |
| test_listlbr_utf8 \ |
| + test_mapping \ |
| test_options \ |
| test_qf_title \ |
| + test_signs \ |
| + test_utf8 \ |
| + test_writefile \ |
| test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \ |
| test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \ |
| test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \ |
| |
| |
| |
| *** 19689,19694 **** |
| --- 19689,19695 ---- |
| typval_T *rettv; |
| { |
| int binary = FALSE; |
| + int append = FALSE; |
| char_u *fname; |
| FILE *fd; |
| int ret = 0; |
| |
| *** 19704,19717 **** |
| if (argvars[0].vval.v_list == NULL) |
| return; |
| |
| ! if (argvars[2].v_type != VAR_UNKNOWN |
| ! && STRCMP(get_tv_string(&argvars[2]), "b") == 0) |
| ! binary = TRUE; |
| |
| /* Always open the file in binary mode, library functions have a mind of |
| * their own about CR-LF conversion. */ |
| fname = get_tv_string(&argvars[1]); |
| ! if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL) |
| { |
| EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname); |
| ret = -1; |
| --- 19705,19723 ---- |
| if (argvars[0].vval.v_list == NULL) |
| return; |
| |
| ! if (argvars[2].v_type != VAR_UNKNOWN) |
| ! { |
| ! if (vim_strchr(get_tv_string(&argvars[2]), 'b') != NULL) |
| ! binary = TRUE; |
| ! if (vim_strchr(get_tv_string(&argvars[2]), 'a') != NULL) |
| ! append = TRUE; |
| ! } |
| |
| /* Always open the file in binary mode, library functions have a mind of |
| * their own about CR-LF conversion. */ |
| fname = get_tv_string(&argvars[1]); |
| ! if (*fname == NUL || (fd = mch_fopen((char *)fname, |
| ! append ? APPENDBIN : WRITEBIN)) == NULL) |
| { |
| EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname); |
| ret = -1; |
| |
| |
| |
| |
| --- 1,18 ---- |
| + Tests for writefile() |
| + |
| + STARTTEST |
| + :source small.vim |
| + :%delete _ |
| + :let f = tempname() |
| + :call writefile(["over","written"], f, "b") |
| + :call writefile(["hello","world"], f, "b") |
| + :call writefile(["!", "good"], f, "a") |
| + :call writefile(["morning"], f, "ab") |
| + :call writefile(["", "vimmers"], f, "ab") |
| + :bwipeout! |
| + :$put =readfile(f) |
| + :1 delete _ |
| + :w! test.out |
| + :qa! |
| + ENDTEST |
| + |
| |
| |
| |
| |
| --- 1,5 ---- |
| + hello |
| + world! |
| + good |
| + morning |
| + vimmers |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 503, |
| /**/ |
| |
| -- |
| BLACK KNIGHT: Come on you pansy! |
| [hah] [parry thrust] |
| [ARTHUR chops the BLACK KNIGHT's right arm off] |
| ARTHUR: Victory is mine! [kneeling] |
| We thank thee Lord, that in thy merc- |
| [Black Knight kicks Arthur in the head while he is praying] |
| The Quest for the Holy Grail (Monty Python) |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |