| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.629 |
| 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.3.629 |
| Problem: There is no way to make 'shiftwidth' follow 'tabstop'. |
| Solution: When 'shiftwidth' is zero use the value of 'tabstop'. (Christian |
| Brabandt) |
| Files: src/edit.c, src/ex_getln.c, src/fold.c, src/misc1.c, src/ops.c, |
| src/option.c, src/proto/option.pro |
| |
| |
| |
| |
| |
| *** 8899,8907 **** |
| |
| *inserted_space_p = FALSE; |
| if (p_sta && in_indent) |
| ! ts = curbuf->b_p_sw; |
| else |
| ! ts = curbuf->b_p_sts; |
| /* Compute the virtual column where we want to be. Since |
| * 'showbreak' may get in the way, need to get the last column of |
| * the previous character. */ |
| --- 8899,8907 ---- |
| |
| *inserted_space_p = FALSE; |
| if (p_sta && in_indent) |
| ! ts = (int)get_sw_value(); |
| else |
| ! ts = (int)curbuf->b_p_sts; |
| /* Compute the virtual column where we want to be. Since |
| * 'showbreak' may get in the way, need to get the last column of |
| * the previous character. */ |
| |
| *** 9589,9595 **** |
| * When nothing special, insert TAB like a normal character |
| */ |
| if (!curbuf->b_p_et |
| ! && !(p_sta && ind && curbuf->b_p_ts != curbuf->b_p_sw) |
| && curbuf->b_p_sts == 0) |
| return TRUE; |
| |
| --- 9589,9595 ---- |
| * When nothing special, insert TAB like a normal character |
| */ |
| if (!curbuf->b_p_et |
| ! && !(p_sta && ind && curbuf->b_p_ts != get_sw_value()) |
| && curbuf->b_p_sts == 0) |
| return TRUE; |
| |
| |
| *** 9605,9611 **** |
| AppendToRedobuff((char_u *)"\t"); |
| |
| if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ |
| ! temp = (int)curbuf->b_p_sw; |
| else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */ |
| temp = (int)curbuf->b_p_sts; |
| else /* otherwise use 'tabstop' */ |
| --- 9605,9611 ---- |
| AppendToRedobuff((char_u *)"\t"); |
| |
| if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ |
| ! temp = (int)get_sw_value(); |
| else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */ |
| temp = (int)curbuf->b_p_sts; |
| else /* otherwise use 'tabstop' */ |
| |
| |
| |
| *** 2268,2277 **** |
| |
| if (c1 == Ctrl_T) |
| { |
| p = (char_u *)line_ga.ga_data; |
| p[line_ga.ga_len] = NUL; |
| indent = get_indent_str(p, 8); |
| ! indent += curbuf->b_p_sw - indent % curbuf->b_p_sw; |
| add_indent: |
| while (get_indent_str(p, 8) < indent) |
| { |
| --- 2268,2279 ---- |
| |
| if (c1 == Ctrl_T) |
| { |
| + long sw = get_sw_value(); |
| + |
| p = (char_u *)line_ga.ga_data; |
| p[line_ga.ga_len] = NUL; |
| indent = get_indent_str(p, 8); |
| ! indent += sw - indent % sw; |
| add_indent: |
| while (get_indent_str(p, 8) < indent) |
| { |
| |
| *** 2323,2329 **** |
| p[line_ga.ga_len] = NUL; |
| indent = get_indent_str(p, 8); |
| --indent; |
| ! indent -= indent % curbuf->b_p_sw; |
| } |
| while (get_indent_str(p, 8) > indent) |
| { |
| --- 2325,2331 ---- |
| p[line_ga.ga_len] = NUL; |
| indent = get_indent_str(p, 8); |
| --indent; |
| ! indent -= indent % get_sw_value(); |
| } |
| while (get_indent_str(p, 8) > indent) |
| { |
| |
| |
| |
| *** 3025,3031 **** |
| flp->lvl = -1; |
| } |
| else |
| ! flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw; |
| if (flp->lvl > flp->wp->w_p_fdn) |
| { |
| flp->lvl = flp->wp->w_p_fdn; |
| --- 3025,3031 ---- |
| flp->lvl = -1; |
| } |
| else |
| ! flp->lvl = get_indent_buf(buf, lnum) / get_sw_value(); |
| if (flp->lvl > flp->wp->w_p_fdn) |
| { |
| flp->lvl = flp->wp->w_p_fdn; |
| |
| |
| |
| *** 1389,1397 **** |
| #ifdef FEAT_SMARTINDENT |
| if (did_si) |
| { |
| if (p_sr) |
| ! newindent -= newindent % (int)curbuf->b_p_sw; |
| ! newindent += (int)curbuf->b_p_sw; |
| } |
| #endif |
| /* Copy the indent */ |
| --- 1389,1399 ---- |
| #ifdef FEAT_SMARTINDENT |
| if (did_si) |
| { |
| + int sw = (int)get_sw_value(); |
| + |
| if (p_sr) |
| ! newindent -= newindent % sw; |
| ! newindent += sw; |
| } |
| #endif |
| /* Copy the indent */ |
| |
| *** 6461,6471 **** |
| int |
| get_c_indent() |
| { |
| /* |
| * spaces from a block's opening brace the prevailing indent for that |
| * block should be |
| */ |
| ! int ind_level = curbuf->b_p_sw; |
| |
| /* |
| * spaces from the edge of the line an open brace that's at the end of a |
| --- 6463,6476 ---- |
| int |
| get_c_indent() |
| { |
| + int sw = (int)get_sw_value(); |
| + |
| /* |
| * spaces from a block's opening brace the prevailing indent for that |
| * block should be |
| */ |
| ! |
| ! int ind_level = sw; |
| |
| /* |
| * spaces from the edge of the line an open brace that's at the end of a |
| |
| *** 6512,6523 **** |
| /* |
| * spaces from the switch() indent a "case xx" label should be located |
| */ |
| ! int ind_case = curbuf->b_p_sw; |
| |
| /* |
| * spaces from the "case xx:" code after a switch() should be located |
| */ |
| ! int ind_case_code = curbuf->b_p_sw; |
| |
| /* |
| * lineup break at end of case in switch() with case label |
| --- 6517,6528 ---- |
| /* |
| * spaces from the switch() indent a "case xx" label should be located |
| */ |
| ! int ind_case = sw; |
| |
| /* |
| * spaces from the "case xx:" code after a switch() should be located |
| */ |
| ! int ind_case_code = sw; |
| |
| /* |
| * lineup break at end of case in switch() with case label |
| |
| *** 6528,6572 **** |
| * spaces from the class declaration indent a scope declaration label |
| * should be located |
| */ |
| ! int ind_scopedecl = curbuf->b_p_sw; |
| |
| /* |
| * spaces from the scope declaration label code should be located |
| */ |
| ! int ind_scopedecl_code = curbuf->b_p_sw; |
| |
| /* |
| * amount K&R-style parameters should be indented |
| */ |
| ! int ind_param = curbuf->b_p_sw; |
| |
| /* |
| * amount a function type spec should be indented |
| */ |
| ! int ind_func_type = curbuf->b_p_sw; |
| |
| /* |
| * amount a cpp base class declaration or constructor initialization |
| * should be indented |
| */ |
| ! int ind_cpp_baseclass = curbuf->b_p_sw; |
| |
| /* |
| * additional spaces beyond the prevailing indent a continuation line |
| * should be located |
| */ |
| ! int ind_continuation = curbuf->b_p_sw; |
| |
| /* |
| * spaces from the indent of the line with an unclosed parentheses |
| */ |
| ! int ind_unclosed = curbuf->b_p_sw * 2; |
| |
| /* |
| * spaces from the indent of the line with an unclosed parentheses, which |
| * itself is also unclosed |
| */ |
| ! int ind_unclosed2 = curbuf->b_p_sw; |
| |
| /* |
| * suppress ignoring spaces from the indent of a line starting with an |
| --- 6533,6577 ---- |
| * spaces from the class declaration indent a scope declaration label |
| * should be located |
| */ |
| ! int ind_scopedecl = sw; |
| |
| /* |
| * spaces from the scope declaration label code should be located |
| */ |
| ! int ind_scopedecl_code = sw; |
| |
| /* |
| * amount K&R-style parameters should be indented |
| */ |
| ! int ind_param = sw; |
| |
| /* |
| * amount a function type spec should be indented |
| */ |
| ! int ind_func_type = sw; |
| |
| /* |
| * amount a cpp base class declaration or constructor initialization |
| * should be indented |
| */ |
| ! int ind_cpp_baseclass = sw; |
| |
| /* |
| * additional spaces beyond the prevailing indent a continuation line |
| * should be located |
| */ |
| ! int ind_continuation = sw; |
| |
| /* |
| * spaces from the indent of the line with an unclosed parentheses |
| */ |
| ! int ind_unclosed = sw * 2; |
| |
| /* |
| * spaces from the indent of the line with an unclosed parentheses, which |
| * itself is also unclosed |
| */ |
| ! int ind_unclosed2 = sw; |
| |
| /* |
| * suppress ignoring spaces from the indent of a line starting with an |
| |
| *** 6719,6730 **** |
| if (*options == 's') /* "2s" means two times 'shiftwidth' */ |
| { |
| if (options == digits) |
| ! n = curbuf->b_p_sw; /* just "s" is one 'shiftwidth' */ |
| else |
| { |
| ! n *= curbuf->b_p_sw; |
| if (divider) |
| ! n += (curbuf->b_p_sw * fraction + divider / 2) / divider; |
| } |
| ++options; |
| } |
| --- 6724,6735 ---- |
| if (*options == 's') /* "2s" means two times 'shiftwidth' */ |
| { |
| if (options == digits) |
| ! n = sw; /* just "s" is one 'shiftwidth' */ |
| else |
| { |
| ! n *= sw; |
| if (divider) |
| ! n += (sw * fraction + divider / 2) / divider; |
| } |
| ++options; |
| } |
| |
| |
| |
| *** 332,338 **** |
| { |
| int count; |
| int i, j; |
| ! int p_sw = (int)curbuf->b_p_sw; |
| |
| count = get_indent(); /* get current indent */ |
| |
| --- 332,338 ---- |
| { |
| int count; |
| int i, j; |
| ! int p_sw = (int)get_sw_value(); |
| |
| count = get_indent(); /* get current indent */ |
| |
| |
| *** 388,394 **** |
| int total; |
| char_u *newp, *oldp; |
| int oldcol = curwin->w_cursor.col; |
| ! int p_sw = (int)curbuf->b_p_sw; |
| int p_ts = (int)curbuf->b_p_ts; |
| struct block_def bd; |
| int incr; |
| --- 388,394 ---- |
| int total; |
| char_u *newp, *oldp; |
| int oldcol = curwin->w_cursor.col; |
| ! int p_sw = (int)get_sw_value(); |
| int p_ts = (int)curbuf->b_p_ts; |
| struct block_def bd; |
| int incr; |
| |
| |
| |
| *** 8125,8131 **** |
| need_mouse_correct = TRUE; |
| #endif |
| |
| ! if (curbuf->b_p_sw <= 0) |
| { |
| errmsg = e_positive; |
| curbuf->b_p_sw = curbuf->b_p_ts; |
| --- 8125,8131 ---- |
| need_mouse_correct = TRUE; |
| #endif |
| |
| ! if (curbuf->b_p_sw < 0) |
| { |
| errmsg = e_positive; |
| curbuf->b_p_sw = curbuf->b_p_ts; |
| |
| *** 11419,11421 **** |
| --- 11419,11431 ---- |
| { |
| return check_opt_strings(p, p_ff_values, FALSE); |
| } |
| + |
| + /* |
| + * Return the effective shiftwidth value for current buffer, using the |
| + * 'tabstop' value when 'shiftwidth' is zero. |
| + */ |
| + long |
| + get_sw_value() |
| + { |
| + return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts; |
| + } |
| |
| |
| |
| *** 56,59 **** |
| --- 56,60 ---- |
| void save_file_ff __ARGS((buf_T *buf)); |
| int file_ff_differs __ARGS((buf_T *buf, int ignore_empty)); |
| int check_ff_value __ARGS((char_u *p)); |
| + long get_sw_value __ARGS((void)); |
| /* vim: set ft=c : */ |
| |
| |
| |
| *** 716,717 **** |
| --- 716,719 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 629, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 228. You spend Saturday night making the counter on your home page |
| pass that 2000 mark. |
| |
| /// 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 /// |