summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-08-08 18:01:05 +0200
committerBram Moolenaar <Bram@vim.org>2012-08-08 18:01:05 +0200
commit14f247414733b9dafb50e59320f75e8b56ac6ec6 (patch)
tree3444e7c3c3e666121e317b50e5f7cdd9718dc5f1
parentb02612b6411659b6385aea44fe8abb5a2e16d4d7 (diff)
downloadvim-14f247414733b9dafb50e59320f75e8b56ac6ec6.zip
updated for version 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)
-rw-r--r--src/edit.c8
-rw-r--r--src/ex_getln.c6
-rw-r--r--src/fold.c2
-rw-r--r--src/misc1.c37
-rw-r--r--src/ops.c4
-rw-r--r--src/option.c12
-rw-r--r--src/proto/option.pro1
-rw-r--r--src/version.c2
8 files changed, 46 insertions, 26 deletions
diff --git a/src/edit.c b/src/edit.c
index 1c614333f..5fde388f7 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -8899,9 +8899,9 @@ ins_bs(c, mode, inserted_space_p)
*inserted_space_p = FALSE;
if (p_sta && in_indent)
- ts = curbuf->b_p_sw;
+ ts = (int)get_sw_value();
else
- ts = curbuf->b_p_sts;
+ 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,7 +9589,7 @@ ins_tab()
* 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)
+ && !(p_sta && ind && curbuf->b_p_ts != get_sw_value())
&& curbuf->b_p_sts == 0)
return TRUE;
@@ -9605,7 +9605,7 @@ ins_tab()
AppendToRedobuff((char_u *)"\t");
if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */
- temp = (int)curbuf->b_p_sw;
+ 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' */
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 0c7dd8036..bc92488da 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -2268,10 +2268,12 @@ getexmodeline(promptc, cookie, indent)
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 += curbuf->b_p_sw - indent % curbuf->b_p_sw;
+ indent += sw - indent % sw;
add_indent:
while (get_indent_str(p, 8) < indent)
{
@@ -2323,7 +2325,7 @@ redraw:
p[line_ga.ga_len] = NUL;
indent = get_indent_str(p, 8);
--indent;
- indent -= indent % curbuf->b_p_sw;
+ indent -= indent % get_sw_value();
}
while (get_indent_str(p, 8) > indent)
{
diff --git a/src/fold.c b/src/fold.c
index 881a19614..f8d9c1d7c 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -3025,7 +3025,7 @@ foldlevelIndent(flp)
flp->lvl = -1;
}
else
- flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
+ 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;
diff --git a/src/misc1.c b/src/misc1.c
index 69ede43ff..e11e10e0c 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -1389,9 +1389,11 @@ open_line(dir, flags, second_line_indent)
#ifdef FEAT_SMARTINDENT
if (did_si)
{
+ int sw = (int)get_sw_value();
+
if (p_sr)
- newindent -= newindent % (int)curbuf->b_p_sw;
- newindent += (int)curbuf->b_p_sw;
+ newindent -= newindent % sw;
+ newindent += sw;
}
#endif
/* Copy the indent */
@@ -6461,11 +6463,14 @@ find_last_paren(l, start, end)
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 = curbuf->b_p_sw;
+
+ int ind_level = sw;
/*
* spaces from the edge of the line an open brace that's at the end of a
@@ -6512,12 +6517,12 @@ get_c_indent()
/*
* spaces from the switch() indent a "case xx" label should be located
*/
- int ind_case = curbuf->b_p_sw;
+ int ind_case = sw;
/*
* spaces from the "case xx:" code after a switch() should be located
*/
- int ind_case_code = curbuf->b_p_sw;
+ int ind_case_code = sw;
/*
* lineup break at end of case in switch() with case label
@@ -6528,45 +6533,45 @@ get_c_indent()
* spaces from the class declaration indent a scope declaration label
* should be located
*/
- int ind_scopedecl = curbuf->b_p_sw;
+ int ind_scopedecl = sw;
/*
* spaces from the scope declaration label code should be located
*/
- int ind_scopedecl_code = curbuf->b_p_sw;
+ int ind_scopedecl_code = sw;
/*
* amount K&R-style parameters should be indented
*/
- int ind_param = curbuf->b_p_sw;
+ int ind_param = sw;
/*
* amount a function type spec should be indented
*/
- int ind_func_type = curbuf->b_p_sw;
+ int ind_func_type = sw;
/*
* amount a cpp base class declaration or constructor initialization
* should be indented
*/
- int ind_cpp_baseclass = curbuf->b_p_sw;
+ int ind_cpp_baseclass = sw;
/*
* additional spaces beyond the prevailing indent a continuation line
* should be located
*/
- int ind_continuation = curbuf->b_p_sw;
+ int ind_continuation = sw;
/*
* spaces from the indent of the line with an unclosed parentheses
*/
- int ind_unclosed = curbuf->b_p_sw * 2;
+ int ind_unclosed = 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;
+ int ind_unclosed2 = sw;
/*
* suppress ignoring spaces from the indent of a line starting with an
@@ -6719,12 +6724,12 @@ get_c_indent()
if (*options == 's') /* "2s" means two times 'shiftwidth' */
{
if (options == digits)
- n = curbuf->b_p_sw; /* just "s" is one 'shiftwidth' */
+ n = sw; /* just "s" is one 'shiftwidth' */
else
{
- n *= curbuf->b_p_sw;
+ n *= sw;
if (divider)
- n += (curbuf->b_p_sw * fraction + divider / 2) / divider;
+ n += (sw * fraction + divider / 2) / divider;
}
++options;
}
diff --git a/src/ops.c b/src/ops.c
index c60f3375e..561046d37 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -332,7 +332,7 @@ shift_line(left, round, amount, call_changed_bytes)
{
int count;
int i, j;
- int p_sw = (int)curbuf->b_p_sw;
+ int p_sw = (int)get_sw_value();
count = get_indent(); /* get current indent */
@@ -388,7 +388,7 @@ shift_block(oap, amount)
int total;
char_u *newp, *oldp;
int oldcol = curwin->w_cursor.col;
- int p_sw = (int)curbuf->b_p_sw;
+ int p_sw = (int)get_sw_value();
int p_ts = (int)curbuf->b_p_ts;
struct block_def bd;
int incr;
diff --git a/src/option.c b/src/option.c
index 97e45cd53..b6b0bf634 100644
--- a/src/option.c
+++ b/src/option.c
@@ -8125,7 +8125,7 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
need_mouse_correct = TRUE;
#endif
- if (curbuf->b_p_sw <= 0)
+ if (curbuf->b_p_sw < 0)
{
errmsg = e_positive;
curbuf->b_p_sw = curbuf->b_p_ts;
@@ -11419,3 +11419,13 @@ check_ff_value(p)
{
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;
+}
diff --git a/src/proto/option.pro b/src/proto/option.pro
index 15cf2b4f8..7d3d8d651 100644
--- a/src/proto/option.pro
+++ b/src/proto/option.pro
@@ -56,4 +56,5 @@ int can_bs __ARGS((int what));
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 : */
diff --git a/src/version.c b/src/version.c
index c01083484..c35104b05 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 629,
+/**/
628,
/**/
627,