diff options
Diffstat (limited to 'data/vim/patches/8.1.0037')
-rw-r--r-- | data/vim/patches/8.1.0037 | 581 |
1 files changed, 0 insertions, 581 deletions
diff --git a/data/vim/patches/8.1.0037 b/data/vim/patches/8.1.0037 deleted file mode 100644 index d6b823354..000000000 --- a/data/vim/patches/8.1.0037 +++ /dev/null @@ -1,581 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0037 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0037 -Problem: Cannot easily append lines to another buffer. -Solution: Add appendbufline(). -Files: runtime/doc/eval.txt, src/evalfunc.c, - src/testdir/test_bufline.vim, src/testdir/test_edit.vim - - -*** ../vim-8.1.0036/runtime/doc/eval.txt 2018-06-03 14:42:17.824505143 +0200 ---- runtime/doc/eval.txt 2018-06-06 20:58:47.732807369 +0200 -*************** -*** 2560,2565 **** ---- 2560,2580 ---- - 0 for success. Example: > - :let failed = append(line('$'), "# THE END") - :let failed = append(0, ["Chapter 1", "the beginning"]) -+ -+ appendbufline({expr}, {lnum}, {text}) *appendbufline()* -+ Like |append()| but append the text in buffer {expr}. -+ -+ For the use of {expr}, see |bufname()|. -+ -+ {lnum} is used like with |append()|. Note that using |line()| -+ would use the current buffer, not the one appending to. -+ Use "$" to append at the end of the buffer. -+ -+ On success 0 is returned, on failure 1 is returned. -+ -+ If {expr} is not a valid buffer or {lnum} is not valid, an -+ error message is given. Example: > -+ :let failed = appendbufline(13, 0, "# THE START") - < - *argc()* - argc() The result is the number of files in the argument list of the -*** ../vim-8.1.0036/src/evalfunc.c 2018-06-03 14:42:17.844505109 +0200 ---- src/evalfunc.c 2018-06-06 20:58:47.740807362 +0200 -*************** -*** 40,45 **** ---- 40,46 ---- - static void f_add(typval_T *argvars, typval_T *rettv); - static void f_and(typval_T *argvars, typval_T *rettv); - static void f_append(typval_T *argvars, typval_T *rettv); -+ static void f_appendbufline(typval_T *argvars, typval_T *rettv); - static void f_argc(typval_T *argvars, typval_T *rettv); - static void f_argidx(typval_T *argvars, typval_T *rettv); - static void f_arglistid(typval_T *argvars, typval_T *rettv); -*************** -*** 487,492 **** ---- 488,494 ---- - {"add", 2, 2, f_add}, - {"and", 2, 2, f_and}, - {"append", 2, 2, f_append}, -+ {"appendbufline", 3, 3, f_appendbufline}, - {"argc", 0, 0, f_argc}, - {"argidx", 0, 0, f_argidx}, - {"arglistid", 0, 2, f_arglistid}, -*************** -*** 1192,1261 **** - } - - /* -! * "append(lnum, string/list)" function - */ - static void -! f_append(typval_T *argvars, typval_T *rettv) - { -! long lnum; -! char_u *line; - list_T *l = NULL; - listitem_T *li = NULL; -- typval_T *tv; - long added = 0; - -! /* When coming here from Insert mode, sync undo, so that this can be -! * undone separately from what was previously inserted. */ -! if (u_sync_once == 2) - { -! u_sync_once = 1; /* notify that u_sync() was called */ -! u_sync(TRUE); - } - -! lnum = get_tv_lnum(argvars); -! if (lnum >= 0 -! && lnum <= curbuf->b_ml.ml_line_count -! && u_save(lnum, lnum + 1) == OK) - { -! if (argvars[1].v_type == VAR_LIST) -! { -! l = argvars[1].vval.v_list; -! if (l == NULL) -! return; -! li = l->lv_first; -! } -! for (;;) - { -! if (l == NULL) -! tv = &argvars[1]; /* append a string */ -! else if (li == NULL) -! break; /* end of list */ -! else -! tv = &li->li_tv; /* append item from list */ -! line = get_tv_string_chk(tv); -! if (line == NULL) /* type error */ - { -! rettv->vval.v_number = 1; /* Failed */ - break; - } -! ml_append(lnum + added, line, (colnr_T)0, FALSE); -! ++added; -! if (l == NULL) - break; - li = li->li_next; - } - -! appended_lines_mark(lnum, added); -! if (curwin->w_cursor.lnum > lnum) -! curwin->w_cursor.lnum += added; - #ifdef FEAT_JOB_CHANNEL - if (bt_prompt(curbuf) && (State & INSERT)) - // show the line with the prompt - update_topline(); - #endif - } - else -! rettv->vval.v_number = 1; /* Failed */ - } - - /* ---- 1194,1378 ---- - } - - /* -! * Get the lnum from the first argument. -! * Also accepts "$", then "buf" is used. -! * Returns 0 on error. -! */ -! static linenr_T -! get_tv_lnum_buf(typval_T *argvars, buf_T *buf) -! { -! if (argvars[0].v_type == VAR_STRING -! && argvars[0].vval.v_string != NULL -! && argvars[0].vval.v_string[0] == '$' -! && buf != NULL) -! return buf->b_ml.ml_line_count; -! return (linenr_T)get_tv_number_chk(&argvars[0], NULL); -! } -! -! /* -! * Set line or list of lines in buffer "buf". - */ - static void -! set_buffer_lines( -! buf_T *buf, -! linenr_T lnum_arg, -! int append, -! typval_T *lines, -! typval_T *rettv) - { -! linenr_T lnum = lnum_arg + (append ? 1 : 0); -! char_u *line = NULL; - list_T *l = NULL; - listitem_T *li = NULL; - long added = 0; -+ linenr_T append_lnum; -+ buf_T *curbuf_save = NULL; -+ win_T *curwin_save = NULL; -+ int is_curbuf = buf == curbuf; - -! /* 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; - } - -! if (!is_curbuf) - { -! wininfo_T *wip; -! -! curbuf_save = curbuf; -! curwin_save = curwin; -! curbuf = buf; -! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) - { -! if (wip->wi_win != NULL) - { -! curwin = wip->wi_win; - break; - } -! } -! } -! -! if (append) -! // appendbufline() uses the line number below which we insert -! append_lnum = lnum - 1; -! else -! // setbufline() uses the line number above which we insert, we only -! // append if it's below the last line -! append_lnum = curbuf->b_ml.ml_line_count; -! -! if (lines->v_type == VAR_LIST) -! { -! l = lines->vval.v_list; -! li = l->lv_first; -! } -! else -! line = get_tv_string_chk(lines); -! -! /* default result is zero == OK */ -! for (;;) -! { -! if (l != NULL) -! { -! /* list argument, get next string */ -! if (li == NULL) - break; -+ line = get_tv_string_chk(&li->li_tv); - li = li->li_next; - } - -! rettv->vval.v_number = 1; /* FAIL */ -! if (line == NULL || lnum > curbuf->b_ml.ml_line_count + 1) -! break; -! -! /* When coming here from Insert mode, sync undo, so that this can be -! * undone separately from what was previously inserted. */ -! if (u_sync_once == 2) -! { -! u_sync_once = 1; /* notify that u_sync() was called */ -! u_sync(TRUE); -! } -! -! if (!append && lnum <= curbuf->b_ml.ml_line_count) -! { -! /* existing line, replace it */ -! if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK) -! { -! changed_bytes(lnum, 0); -! if (is_curbuf && lnum == curwin->w_cursor.lnum) -! check_cursor_col(); -! rettv->vval.v_number = 0; /* OK */ -! } -! } -! else if (added > 0 || u_save(lnum - 1, lnum) == OK) -! { -! /* append the line */ -! ++added; -! if (ml_append(lnum - 1, line, (colnr_T)0, FALSE) == OK) -! rettv->vval.v_number = 0; /* OK */ -! } -! -! if (l == NULL) /* only one string argument */ -! break; -! ++lnum; -! } -! -! if (added > 0) -! { -! win_T *wp; -! tabpage_T *tp; -! -! appended_lines_mark(append_lnum, added); -! FOR_ALL_TAB_WINDOWS(tp, wp) -! if (wp->w_buffer == buf && wp->w_cursor.lnum > append_lnum) -! wp->w_cursor.lnum += added; -! check_cursor_col(); -! - #ifdef FEAT_JOB_CHANNEL - if (bt_prompt(curbuf) && (State & INSERT)) - // show the line with the prompt - update_topline(); - #endif - } -+ -+ if (!is_curbuf) -+ { -+ curbuf = curbuf_save; -+ curwin = curwin_save; -+ } -+ } -+ -+ /* -+ * "append(lnum, string/list)" function -+ */ -+ static void -+ f_append(typval_T *argvars, typval_T *rettv) -+ { -+ linenr_T lnum = get_tv_lnum(&argvars[0]); -+ -+ set_buffer_lines(curbuf, lnum, TRUE, &argvars[1], rettv); -+ } -+ -+ /* -+ * "appendbufline(buf, lnum, string/list)" function -+ */ -+ static void -+ f_appendbufline(typval_T *argvars, typval_T *rettv) -+ { -+ linenr_T lnum; -+ buf_T *buf; -+ -+ buf = get_buf_tv(&argvars[0], FALSE); -+ if (buf == NULL) -+ rettv->vval.v_number = 1; /* FAIL */ - else -! { -! lnum = get_tv_lnum_buf(&argvars[1], buf); -! set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv); -! } - } - - /* -*************** -*** 4276,4297 **** - } - - /* -- * Get the lnum from the first argument. -- * Also accepts "$", then "buf" is used. -- * Returns 0 on error. -- */ -- static linenr_T -- get_tv_lnum_buf(typval_T *argvars, buf_T *buf) -- { -- if (argvars[0].v_type == VAR_STRING -- && argvars[0].vval.v_string != NULL -- && argvars[0].vval.v_string[0] == '$' -- && buf != NULL) -- return buf->b_ml.ml_line_count; -- return (linenr_T)get_tv_number_chk(&argvars[0], NULL); -- } -- -- /* - * "getbufline()" function - */ - static void ---- 4393,4398 ---- -*************** -*** 10226,10340 **** - } - - /* -- * Set line or list of lines in buffer "buf". -- */ -- static void -- set_buffer_lines(buf_T *buf, linenr_T lnum, typval_T *lines, typval_T *rettv) -- { -- char_u *line = NULL; -- list_T *l = NULL; -- listitem_T *li = NULL; -- long added = 0; -- linenr_T lcount; -- buf_T *curbuf_save = NULL; -- win_T *curwin_save = NULL; -- int is_curbuf = buf == curbuf; -- -- /* 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; -- } -- -- if (!is_curbuf) -- { -- wininfo_T *wip; -- -- curbuf_save = curbuf; -- curwin_save = curwin; -- curbuf = buf; -- for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) -- { -- if (wip->wi_win != NULL) -- { -- curwin = wip->wi_win; -- break; -- } -- } -- } -- -- lcount = curbuf->b_ml.ml_line_count; -- -- if (lines->v_type == VAR_LIST) -- { -- l = lines->vval.v_list; -- li = l->lv_first; -- } -- else -- line = get_tv_string_chk(lines); -- -- /* default result is zero == OK */ -- for (;;) -- { -- if (l != NULL) -- { -- /* list argument, get next string */ -- if (li == NULL) -- break; -- line = get_tv_string_chk(&li->li_tv); -- li = li->li_next; -- } -- -- rettv->vval.v_number = 1; /* FAIL */ -- if (line == NULL || lnum > curbuf->b_ml.ml_line_count + 1) -- break; -- -- /* When coming here from Insert mode, sync undo, so that this can be -- * undone separately from what was previously inserted. */ -- if (u_sync_once == 2) -- { -- u_sync_once = 1; /* notify that u_sync() was called */ -- u_sync(TRUE); -- } -- -- if (lnum <= curbuf->b_ml.ml_line_count) -- { -- /* existing line, replace it */ -- if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK) -- { -- changed_bytes(lnum, 0); -- if (is_curbuf && lnum == curwin->w_cursor.lnum) -- check_cursor_col(); -- rettv->vval.v_number = 0; /* OK */ -- } -- } -- else if (added > 0 || u_save(lnum - 1, lnum) == OK) -- { -- /* lnum is one past the last line, append the line */ -- ++added; -- if (ml_append(lnum - 1, line, (colnr_T)0, FALSE) == OK) -- rettv->vval.v_number = 0; /* OK */ -- } -- -- if (l == NULL) /* only one string argument */ -- break; -- ++lnum; -- } -- -- if (added > 0) -- appended_lines_mark(lcount, added); -- -- if (!is_curbuf) -- { -- curbuf = curbuf_save; -- curwin = curwin_save; -- } -- } -- -- /* - * "setbufline()" function - */ - static void ---- 10327,10332 ---- -*************** -*** 10351,10358 **** - else - { - lnum = get_tv_lnum_buf(&argvars[1], buf); -! -! set_buffer_lines(buf, lnum, &argvars[2], rettv); - } - } - ---- 10343,10349 ---- - else - { - lnum = get_tv_lnum_buf(&argvars[1], buf); -! set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv); - } - } - -*************** -*** 10512,10518 **** - { - linenr_T lnum = get_tv_lnum(&argvars[0]); - -! set_buffer_lines(curbuf, lnum, &argvars[1], rettv); - } - - static void set_qf_ll_list(win_T *wp, typval_T *list_arg, typval_T *action_arg, typval_T *what_arg, typval_T *rettv); ---- 10503,10509 ---- - { - linenr_T lnum = get_tv_lnum(&argvars[0]); - -! set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv); - } - - static void set_qf_ll_list(win_T *wp, typval_T *list_arg, typval_T *action_arg, typval_T *what_arg, typval_T *rettv); -*** ../vim-8.1.0036/src/testdir/test_bufline.vim 2017-11-06 21:26:52.000000000 +0100 ---- src/testdir/test_bufline.vim 2018-06-06 20:58:47.740807362 +0200 -*************** -*** 1,4 **** -! " Tests for setbufline() and getbufline() - - source shared.vim - ---- 1,4 ---- -! " Tests for setbufline(), getbufline(), appendbufline() - - source shared.vim - -*************** -*** 65,67 **** ---- 65,92 ---- - call delete('Xscript') - call delete('Xtest') - endfunc -+ -+ func Test_appendbufline() -+ new -+ let b = bufnr('%') -+ hide -+ call assert_equal(0, appendbufline(b, 0, ['foo', 'bar'])) -+ call assert_equal(['foo'], getbufline(b, 1)) -+ call assert_equal(['bar'], getbufline(b, 2)) -+ call assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) -+ exe "bd!" b -+ call assert_equal([], getbufline(b, 1, 2)) -+ -+ split Xtest -+ call setline(1, ['a', 'b', 'c']) -+ let b = bufnr('%') -+ wincmd w -+ call assert_equal(1, appendbufline(b, 4, ['x'])) -+ call assert_equal(1, appendbufline(1234, 1, ['x'])) -+ call assert_equal(0, appendbufline(b, 3, ['d', 'e'])) -+ call assert_equal(['c'], getbufline(b, 3)) -+ call assert_equal(['d'], getbufline(b, 4)) -+ call assert_equal(['e'], getbufline(b, 5)) -+ call assert_equal([], getbufline(b, 6)) -+ exe "bwipe! " . b -+ endfunc -*** ../vim-8.1.0036/src/testdir/test_edit.vim 2018-06-04 20:34:07.607373577 +0200 ---- src/testdir/test_edit.vim 2018-06-06 20:58:47.740807362 +0200 -*************** -*** 527,533 **** - " Tab in completion mode - let path=expand("%:p:h") - new -! call setline(1, [path."/", '']) - call feedkeys("Arunt\<c-x>\<c-f>\<tab>\<cr>\<esc>", 'tnix') - call assert_match('runtest\.vim', getline(1)) - %d ---- 527,533 ---- - " Tab in completion mode - let path=expand("%:p:h") - new -! call setline(1, [path. "/", '']) - call feedkeys("Arunt\<c-x>\<c-f>\<tab>\<cr>\<esc>", 'tnix') - call assert_match('runtest\.vim', getline(1)) - %d -*** ../vim-8.1.0036/src/version.c 2018-06-06 18:02:31.402773772 +0200 ---- src/version.c 2018-06-06 21:00:46.040701324 +0200 -*************** -*** 763,764 **** ---- 763,766 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 37, - /**/ - --- -How To Keep A Healthy Level Of Insanity: -16. Have your coworkers address you by your wrestling name, Rock Hard Kim. - - /// 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 /// |