From 24ebb018e28187c61900b1616e4f79fec9d70878 Mon Sep 17 00:00:00 2001 From: Scott Prager Date: Sat, 11 Oct 2014 19:13:35 -0400 Subject: vim-patch:7.4.416 Problem: Problem with breakindent/showbreak and tabs. Solution: Handle tabs differently. (Christian Brabandt) https://code.google.com/p/vim/source/detail?name=v7-4-416 --- src/nvim/charset.c | 7 +------ src/nvim/testdir/test_breakindent.in | 17 +++++++++++++++++ src/nvim/testdir/test_breakindent.ok | 3 +++ src/nvim/version.c | 2 +- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/nvim/charset.c b/src/nvim/charset.c index 57c4aec395..e7ecf05880 100644 --- a/src/nvim/charset.c +++ b/src/nvim/charset.c @@ -1072,12 +1072,7 @@ int win_lbr_chartabsize(win_T *wp, char_u *line, char_u *s, colnr_T col, int *he if (wp->w_p_bri) added += get_breakindent_win(wp, line); - if (tab_corr) { - size += (added / wp->w_buffer->b_p_ts) * wp->w_buffer->b_p_ts; - } else { - size += added; - } - + size += added; if (col != 0) { added = 0; } diff --git a/src/nvim/testdir/test_breakindent.in b/src/nvim/testdir/test_breakindent.in index 8f40e4f7e5..79e25f79de 100644 --- a/src/nvim/testdir/test_breakindent.in +++ b/src/nvim/testdir/test_breakindent.in @@ -73,6 +73,23 @@ STARTTEST :let width = strlen(text[1:])+indent(2)*4+strlen(&sbr)*3 " text wraps 3 times :$put =g:test :$put =printf(\"strdisplaywidth: %d == calculated: %d\", strdisplaywidth(text), width) +:" +:" Test, that the string " a\tb\tc\td\te" is correctly +:" displayed in a 20 column wide window (see bug report +:" https://groups.google.com/d/msg/vim_dev/ZOdg2mc9c9Y/TT8EhFjEy0IJ +:only +:vert 20new +:set all& nocp breakindent briopt=min:10 +:call setline(1, [" a\tb\tc\td\te", " z y x w v"]) +:/^\s*a +fbgjyl:let line1 = @0 +:?^\s*z +fygjyl:let line2 = @0 +:quit! +:$put ='Test 12: breakindent with wrapping Tab' +:$put =line1 +:$put =line2 +:" :%w! test.out :qa! ENDTEST diff --git a/src/nvim/testdir/test_breakindent.ok b/src/nvim/testdir/test_breakindent.ok index 723cb25012..d89d424fb3 100644 --- a/src/nvim/testdir/test_breakindent.ok +++ b/src/nvim/testdir/test_breakindent.ok @@ -53,3 +53,6 @@ Test 4: Simple breakindent + min width: 18 Test 11: strdisplaywidth when breakindent is on strdisplaywidth: 46 == calculated: 64 +Test 12: breakindent with wrapping Tab +d +w diff --git a/src/nvim/version.c b/src/nvim/version.c index 9b5b995801..cf0edd8542 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -249,7 +249,7 @@ static int included_patches[] = { //419, 418, //417, - //416, + 416, 415, 414, //413 NA -- cgit From c92e649a1ef9846ec86b09acc8d92f30b1c1d5db Mon Sep 17 00:00:00 2001 From: Scott Prager Date: Sat, 11 Oct 2014 19:29:38 -0400 Subject: vim-patch:7.4.417 Problem: After splitting a window and setting 'breakindent' the default minimum with is not respected. Solution: Call briopt_check() when copying options to a new window. https://code.google.com/p/vim/source/detail?r=v7-4-417 --- src/nvim/option.c | 24 ++++++++++++------------ src/nvim/testdir/test_breakindent.in | 1 + src/nvim/version.c | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/nvim/option.c b/src/nvim/option.c index 207be0bd74..1ab1c32f3c 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -3481,7 +3481,7 @@ static void didset_options(void) (void)compile_cap_prog(curwin->w_s); /* set cedit_key */ (void)check_cedit(); - briopt_check(); + briopt_check(curwin); } /* @@ -3818,7 +3818,7 @@ did_set_string_option ( } /* 'breakindentopt' */ else if (varp == &curwin->w_p_briopt) { - if (briopt_check() == FAIL) + if (briopt_check(curwin) == FAIL) errmsg = e_invarg; } /* @@ -6771,6 +6771,7 @@ void win_copy_options(win_T *wp_from, win_T *wp_to) copy_winopt(&wp_from->w_allbuf_opt, &wp_to->w_allbuf_opt); /* Is this right? */ wp_to->w_farsi = wp_from->w_farsi; + briopt_check(wp_to); } /* @@ -8143,16 +8144,15 @@ void find_mps_values(int *initc, int *findc, int *backwards, int switchit) } } -/* This is called when 'breakindentopt' is changed and when a window is - initialized */ -int briopt_check(void) +/// This is called when 'breakindentopt' is changed and when a window is +/// initialized +static bool briopt_check(win_T *wp) { - char_u *p; int bri_shift = 0; long bri_min = 20; bool bri_sbr = false; - p = curwin->w_p_briopt; + char_u *p = wp->w_p_briopt; while (*p != NUL) { if (STRNCMP(p, "shift:", 6) == 0 @@ -8172,15 +8172,15 @@ int briopt_check(void) bri_sbr = true; } if (*p != ',' && *p != NUL) - return FAIL; + return false; if (*p == ',') ++p; } - curwin->w_p_brishift = bri_shift; - curwin->w_p_brimin = bri_min; - curwin->w_p_brisbr = bri_sbr; + wp->w_p_brishift = bri_shift; + wp->w_p_brimin = bri_min; + wp->w_p_brisbr = bri_sbr; - return OK; + return true; } diff --git a/src/nvim/testdir/test_breakindent.in b/src/nvim/testdir/test_breakindent.in index 79e25f79de..150c9430db 100644 --- a/src/nvim/testdir/test_breakindent.in +++ b/src/nvim/testdir/test_breakindent.in @@ -27,6 +27,7 @@ STARTTEST : $put =g:line1 : wincmd p :endfu +:set briopt=min:0 :let g:test="Test 1: Simple breakindent" :let line1=ScreenChar(8) :call DoRecordScreen() diff --git a/src/nvim/version.c b/src/nvim/version.c index cf0edd8542..248332c42c 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -248,7 +248,7 @@ static int included_patches[] = { //420 NA //419, 418, - //417, + 417, 416, 415, 414, -- cgit