diff options
Diffstat (limited to 'data/vim/patches/8.1.0542')
-rw-r--r-- | data/vim/patches/8.1.0542 | 423 |
1 files changed, 423 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0542 b/data/vim/patches/8.1.0542 new file mode 100644 index 000000000..761fd1b22 --- /dev/null +++ b/data/vim/patches/8.1.0542 @@ -0,0 +1,423 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0542 +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.0542 +Problem: shiftwidth() does not take 'vartabstop' into account. +Solution: Use the cursor position or a position explicitly passed. + Also make >> and << work better with 'vartabstop'. (Christian + Brabandt) +Files: runtime/doc/change.txt, runtime/doc/eval.txt, src/edit.c, + src/evalfunc.c, src/normal.c, src/ops.c, src/option.c, + src/proto/edit.pro, src/proto/option.pro, + src/testdir/test_vartabs.vim + +*** ../vim-8.1.0541/runtime/doc/change.txt 2018-07-29 16:09:14.628945654 +0200 +--- runtime/doc/change.txt 2018-11-22 02:13:49.924044656 +0100 +*************** +*** 476,481 **** +--- 476,485 ---- + *<* + <{motion} Shift {motion} lines one 'shiftwidth' leftwards. + ++ If the 'vartabstop' feature is enabled, and the ++ 'shiftwidth' option is set to zero, the amount of ++ indent is calculated at the first non-blank character ++ in the line. + *<<* + << Shift [count] lines one 'shiftwidth' leftwards. + +*************** +*** 487,492 **** +--- 491,500 ---- + *>* + >{motion} Shift {motion} lines one 'shiftwidth' rightwards. + ++ If the 'vartabstop' feature is enabled, and the ++ 'shiftwidth' option is set to zero, the amount of ++ indent is calculated at the first non-blank character ++ in the line. + *>>* + >> Shift [count] lines one 'shiftwidth' rightwards. + +*************** +*** 708,713 **** +--- 716,722 ---- + search pattern. + {not in Vi: highlighting of the match, other responses than 'y' or 'n'} + ++ *:s_e* + [e] When the search pattern fails, do not issue an error message and, in + particular, continue in maps as if no error occurred. This is most + useful to prevent the "No match" error from breaking a mapping. Vim +*************** +*** 719,724 **** +--- 728,734 ---- + Interrupted + {not in Vi} + ++ *:s_g* + [g] Replace all occurrences in the line. Without this argument, + replacement occurs only for the first occurrence in each line. If + the 'edcompatible' option is on, Vim remembers this flag and toggles +*** ../vim-8.1.0541/runtime/doc/eval.txt 2018-11-11 15:20:32.432704446 +0100 +--- runtime/doc/eval.txt 2018-11-22 02:20:01.809633383 +0100 +*************** +*** 2379,2385 **** + shellescape({string} [, {special}]) + String escape {string} for use as shell + command argument +! shiftwidth() Number effective value of 'shiftwidth' + simplify({filename}) String simplify filename as much as possible + sin({expr}) Float sine of {expr} + sinh({expr}) Float hyperbolic sine of {expr} +--- 2385,2391 ---- + shellescape({string} [, {special}]) + String escape {string} for use as shell + command argument +! shiftwidth([{col}]) Number effective value of 'shiftwidth' + simplify({filename}) String simplify filename as much as possible + sin({expr}) Float sine of {expr} + sinh({expr}) Float hyperbolic sine of {expr} +*************** +*** 7629,7639 **** + < See also |::S|. + + +! shiftwidth() *shiftwidth()* + Returns the effective value of 'shiftwidth'. This is the + 'shiftwidth' value unless it is zero, in which case it is the + 'tabstop' value. This function was introduced with patch +! 7.3.694 in 2012, everybody should have it by now. + + + simplify({filename}) *simplify()* +--- 7638,7654 ---- + < See also |::S|. + + +! shiftwidth([{col}]) *shiftwidth()* + Returns the effective value of 'shiftwidth'. This is the + 'shiftwidth' value unless it is zero, in which case it is the + 'tabstop' value. This function was introduced with patch +! 7.3.694 in 2012, everybody should have it by now (however it +! did not allow for the optional {col} argument until 8.1.542). +! +! When there is one argument {col} this is used as column number +! for which to return the 'shiftwidth' value. This matters for the +! 'vartabstop' feature. If the 'vartabstop' setting is enabled and +! no {col} argument is given, column 1 will be assumed. + + + simplify({filename}) *simplify()* +*** ../vim-8.1.0541/src/edit.c 2018-11-02 11:59:11.555438565 +0100 +--- src/edit.c 2018-11-22 02:21:29.857045389 +0100 +*************** +*** 262,268 **** + #ifdef FEAT_SMARTINDENT + static void ins_try_si(int c); + #endif +- static colnr_T get_nolist_virtcol(void); + #if defined(FEAT_EVAL) + static char_u *do_insert_char_pre(int c); + #endif +--- 262,267 ---- +*************** +*** 10681,10689 **** + * Get the value that w_virtcol would have when 'list' is off. + * Unless 'cpo' contains the 'L' flag. + */ +! static colnr_T + get_nolist_virtcol(void) + { + if (curwin->w_p_list && vim_strchr(p_cpo, CPO_LISTWM) == NULL) + return getvcol_nolist(&curwin->w_cursor); + validate_virtcol(); +--- 10680,10693 ---- + * Get the value that w_virtcol would have when 'list' is off. + * Unless 'cpo' contains the 'L' flag. + */ +! colnr_T + get_nolist_virtcol(void) + { ++ // check validity of cursor in current buffer ++ if (curwin->w_buffer == NULL ++ || curwin->w_buffer->b_ml.ml_mfp == NULL ++ || curwin->w_cursor.lnum > curwin->w_buffer->b_ml.ml_line_count) ++ return 0; + if (curwin->w_p_list && vim_strchr(p_cpo, CPO_LISTWM) == NULL) + return getvcol_nolist(&curwin->w_cursor); + validate_virtcol(); +*** ../vim-8.1.0541/src/evalfunc.c 2018-11-11 21:22:53.649977524 +0100 +--- src/evalfunc.c 2018-11-22 02:23:21.876290935 +0100 +*************** +*** 835,841 **** + {"sha256", 1, 1, f_sha256}, + #endif + {"shellescape", 1, 2, f_shellescape}, +! {"shiftwidth", 0, 0, f_shiftwidth}, + {"simplify", 1, 1, f_simplify}, + #ifdef FEAT_FLOAT + {"sin", 1, 1, f_sin}, +--- 835,841 ---- + {"sha256", 1, 1, f_sha256}, + #endif + {"shellescape", 1, 2, f_shellescape}, +! {"shiftwidth", 0, 1, f_shiftwidth}, + {"simplify", 1, 1, f_simplify}, + #ifdef FEAT_FLOAT + {"sin", 1, 1, f_sin}, +*************** +*** 11241,11246 **** +--- 11241,11261 ---- + static void + f_shiftwidth(typval_T *argvars UNUSED, typval_T *rettv) + { ++ rettv->vval.v_number = 0; ++ ++ if (argvars[0].v_type != VAR_UNKNOWN) ++ { ++ long col; ++ ++ col = (long)get_tv_number_chk(argvars, NULL); ++ if (col < 0) ++ return; // type error; errmsg already given ++ #ifdef FEAT_VARTABS ++ rettv->vval.v_number = get_sw_value_col(curbuf, col); ++ return; ++ #endif ++ } ++ + rettv->vval.v_number = get_sw_value(curbuf); + } + +*** ../vim-8.1.0541/src/normal.c 2018-11-10 16:01:23.331381891 +0100 +--- src/normal.c 2018-11-22 02:24:26.215854890 +0100 +*************** +*** 8143,8148 **** +--- 8143,8149 ---- + do + i = gchar_cursor(); + while (VIM_ISWHITE(i) && oneright() == OK); ++ curwin->w_valid &= ~VALID_WCOL; + } + curwin->w_set_curswant = TRUE; + break; +*** ../vim-8.1.0541/src/ops.c 2018-11-16 20:54:27.053554626 +0100 +--- src/ops.c 2018-11-22 02:51:34.899814809 +0100 +*************** +*** 334,340 **** + { + int count; + int i, j; +! int p_sw = (int)get_sw_value(curbuf); + + count = get_indent(); /* get current indent */ + +--- 334,340 ---- + { + int count; + int i, j; +! int p_sw = (int)get_sw_value_indent(curbuf); + + count = get_indent(); /* get current indent */ + +*************** +*** 386,392 **** + int total; + char_u *newp, *oldp; + int oldcol = curwin->w_cursor.col; +! int p_sw = (int)get_sw_value(curbuf); + #ifdef FEAT_VARTABS + int *p_vts = curbuf->b_p_vts_array; + #endif +--- 386,392 ---- + int total; + char_u *newp, *oldp; + int oldcol = curwin->w_cursor.col; +! int p_sw = (int)get_sw_value_indent(curbuf); + #ifdef FEAT_VARTABS + int *p_vts = curbuf->b_p_vts_array; + #endif +*** ../vim-8.1.0541/src/option.c 2018-11-20 14:25:43.480880171 +0100 +--- src/option.c 2018-11-22 02:52:47.875239563 +0100 +*************** +*** 13113,13119 **** + long + get_sw_value(buf_T *buf) + { +! return buf->b_p_sw ? buf->b_p_sw : buf->b_p_ts; + } + + /* +--- 13113,13160 ---- + long + get_sw_value(buf_T *buf) + { +! return get_sw_value_col(buf, 0); +! } +! +! /* +! * Idem, using the first non-black in the current line. +! */ +! long +! get_sw_value_indent(buf_T *buf) +! { +! pos_T pos = curwin->w_cursor; +! +! pos.col = getwhitecols_curline(); +! return get_sw_value_pos(buf, &pos); +! } +! +! /* +! * Idem, using "pos". +! */ +! long +! get_sw_value_pos(buf_T *buf, pos_T *pos) +! { +! pos_T save_cursor = curwin->w_cursor; +! long sw_value; +! +! curwin->w_cursor = *pos; +! sw_value = get_sw_value_col(buf, get_nolist_virtcol()); +! curwin->w_cursor = save_cursor; +! return sw_value; +! } +! +! /* +! * Idem, using virtual column "col". +! */ +! long +! get_sw_value_col(buf_T *buf, colnr_T col UNUSED) +! { +! return buf->b_p_sw ? buf->b_p_sw : +! #ifdef FEAT_VARTABS +! tabstop_at(col, buf->b_p_ts, buf->b_p_vts_array); +! #else +! buf->b_p_ts; +! #endif + } + + /* +*** ../vim-8.1.0541/src/proto/edit.pro 2018-06-03 14:42:17.848505102 +0200 +--- src/proto/edit.pro 2018-11-22 02:27:22.574651476 +0100 +*************** +*** 46,49 **** +--- 46,50 ---- + void ins_scroll(void); + void ins_horscroll(void); + int ins_copychar(linenr_T lnum); ++ colnr_T get_nolist_virtcol(void); + /* vim: set ft=c : */ +*** ../vim-8.1.0541/src/proto/option.pro 2018-10-02 14:45:07.023652468 +0200 +--- src/proto/option.pro 2018-11-22 02:51:41.159765202 +0100 +*************** +*** 72,77 **** +--- 72,80 ---- + int tabstop_count(int *ts); + int tabstop_first(int *ts); + long get_sw_value(buf_T *buf); ++ long get_sw_value_indent(buf_T *buf); ++ long get_sw_value_pos(buf_T *buf, pos_T *pos); ++ long get_sw_value_col(buf_T *buf, colnr_T col); + long get_sts_value(void); + void find_mps_values(int *initc, int *findc, int *backwards, int switchit); + unsigned int get_bkc_value(buf_T *buf); +*** ../vim-8.1.0541/src/testdir/test_vartabs.vim 2018-10-15 22:51:46.744578471 +0200 +--- src/testdir/test_vartabs.vim 2018-11-22 02:54:38.198381540 +0100 +*************** +*** 297,302 **** +--- 297,367 ---- + set nolist listchars&vim + endfunc + ++ func Test_vartabs_shiftwidth() ++ "return ++ if winwidth(0) < 40 ++ return ++ endif ++ new ++ 40vnew ++ %d ++ " setl varsofttabstop=10,20,30,40 ++ setl shiftwidth=0 vartabstop=10,20,30,40 ++ call setline(1, "x") ++ ++ " Check without any change. ++ let expect = ['x '] ++ let lines = ScreenLines(1, winwidth(0)) ++ call s:compare_lines(expect, lines) ++ " Test 1: ++ " shiftwidth depends on the indent, first check with cursor at the end of the ++ " line (which is the same as the start of the line, since there is only one ++ " character). ++ norm! $>> ++ let expect1 = [' x '] ++ let lines = ScreenLines(1, winwidth(0)) ++ call s:compare_lines(expect1, lines) ++ call assert_equal(10, shiftwidth()) ++ call assert_equal(10, shiftwidth(1)) ++ call assert_equal(20, shiftwidth(virtcol('.'))) ++ norm! $>> ++ let expect2 = [' x ', '~ '] ++ let lines = ScreenLines([1, 2], winwidth(0)) ++ call s:compare_lines(expect2, lines) ++ call assert_equal(20, shiftwidth(virtcol('.')-2)) ++ call assert_equal(30, shiftwidth(virtcol('.'))) ++ norm! $>> ++ let expect3 = [' ', ' x ', '~ '] ++ let lines = ScreenLines([1, 3], winwidth(0)) ++ call s:compare_lines(expect3, lines) ++ call assert_equal(30, shiftwidth(virtcol('.')-2)) ++ call assert_equal(40, shiftwidth(virtcol('.'))) ++ norm! $>> ++ let expect4 = [' ', ' ', ' x '] ++ let lines = ScreenLines([1, 3], winwidth(0)) ++ call assert_equal(40, shiftwidth(virtcol('.'))) ++ call s:compare_lines(expect4, lines) ++ ++ " Test 2: Put the cursor at the first column, result should be the same ++ call setline(1, "x") ++ norm! 0>> ++ let lines = ScreenLines(1, winwidth(0)) ++ call s:compare_lines(expect1, lines) ++ norm! 0>> ++ let lines = ScreenLines([1, 2], winwidth(0)) ++ call s:compare_lines(expect2, lines) ++ norm! 0>> ++ let lines = ScreenLines([1, 3], winwidth(0)) ++ call s:compare_lines(expect3, lines) ++ norm! 0>> ++ let lines = ScreenLines([1, 3], winwidth(0)) ++ call s:compare_lines(expect4, lines) ++ ++ " cleanup ++ bw! ++ bw! ++ endfunc ++ + func Test_vartabs_failures() + call assert_fails('set vts=8,') + call assert_fails('set vsts=8,') +*** ../vim-8.1.0541/src/version.c 2018-11-21 13:58:27.092110956 +0100 +--- src/version.c 2018-11-22 02:19:24.593880355 +0100 +*************** +*** 794,795 **** +--- 794,797 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 542, + /**/ + +-- +I wonder, do vegetarians eat fruit bats? + + /// 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 /// |