aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/plines.c2
-rw-r--r--test/functional/ui/decorations_spec.lua16
-rw-r--r--test/old/testdir/test_breakindent.vim11
-rw-r--r--test/old/testdir/test_listlbr_utf8.vim6
4 files changed, 32 insertions, 3 deletions
diff --git a/src/nvim/plines.c b/src/nvim/plines.c
index f273f88dd1..f74beff954 100644
--- a/src/nvim/plines.c
+++ b/src/nvim/plines.c
@@ -268,7 +268,7 @@ CharSize charsize_regular(CharsizeArg *csarg, char *const cur, colnr_T const vco
head += (max_head_vcol - (vcol + head_prev + prev_rem)
+ width2 - 1) / width2 * head_mid;
} else if (max_head_vcol < 0) {
- int off = virt_text_cursor_off(csarg, *cur == NUL);
+ int off = mb_added + virt_text_cursor_off(csarg, *cur == NUL);
if (off >= prev_rem) {
if (size > off) {
head += (1 + (off - prev_rem) / width) * head_mid;
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index 318dc8c197..eda95b8991 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -4027,11 +4027,23 @@ describe('decorations: inline virtual text', function()
normal! $
]])
api.nvim_buf_set_extmark(0, ns, 0, 40, { virt_text = { { ('b'):rep(9) } }, virt_text_pos = 'inline' })
- screen:expect{grid=[[
+ screen:expect([[
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb{1:>}|
口1234^5 |
|
- ]]}
+ ]])
+ feed('g0')
+ screen:expect([[
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb{1:>}|
+ ^口12345 |
+ |
+ ]])
+ command('set showbreak=+++')
+ screen:expect([[
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbb{1:>}|
+ {1:+++}^口12345 |
+ |
+ ]])
end)
end)
diff --git a/test/old/testdir/test_breakindent.vim b/test/old/testdir/test_breakindent.vim
index 636ec6f285..f09ab8684f 100644
--- a/test/old/testdir/test_breakindent.vim
+++ b/test/old/testdir/test_breakindent.vim
@@ -1205,4 +1205,15 @@ func Test_breakindent_min_with_signcol()
call s:close_windows()
endfunc
+func Test_breakindent_with_double_width_wrap()
+ 50vnew
+ setlocal tabstop=8 breakindent nolist
+ call setline(1, "\t" .. repeat('a', winwidth(0) - 9) .. '口口口')
+ normal! $g0
+ call assert_equal(2, winline())
+ call assert_equal(9, wincol())
+
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/test/old/testdir/test_listlbr_utf8.vim b/test/old/testdir/test_listlbr_utf8.vim
index 313ff30cc4..693f2015fc 100644
--- a/test/old/testdir/test_listlbr_utf8.vim
+++ b/test/old/testdir/test_listlbr_utf8.vim
@@ -280,6 +280,9 @@ func Test_chinese_char_on_wrap_column()
call s:compare_lines(expect, lines)
call assert_equal(len(expect), winline())
call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+ norm! g0
+ call assert_equal(len(expect), winline())
+ call assert_equal(1, wincol())
call s:close_windows()
endfunc
@@ -315,6 +318,9 @@ func Test_chinese_char_on_wrap_column_sbr()
call s:compare_lines(expect, lines)
call assert_equal(len(expect), winline())
call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+ norm! g0
+ call assert_equal(len(expect), winline())
+ call assert_equal(4, wincol())
call s:close_windows()
endfunc