vim-patch:9.1.0084: Visual hl wrong when it ends before multibyte 'showbreak' (#27404)

Problem:  Visual hl wrong when it ends before multibyte 'showbreak'.
          (lacygoil)
Solution: Use vcol_sbr instead of adding n_extra.
          (zeertzjq)

fixes: vim/vim#11272
closes: vim/vim#13996

df23d7f4bd

Bug doesn't apply to Nvim.
This commit is contained in:
zeertzjq 2024-02-10 06:53:10 +08:00 committed by GitHub
parent 44ec4b5b18
commit 0d4d3e4325
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 49 additions and 1 deletions

View File

@ -1,12 +1,14 @@
-- Test for linebreak and list option in utf-8 mode
local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local source = helpers.source
local feed = helpers.feed
local exec = helpers.exec
local clear, expect = helpers.clear, helpers.expect
describe('linebreak', function()
setup(clear)
before_each(clear)
-- luacheck: ignore 621 (Indentation)
-- luacheck: ignore 613 (Trailing whitespaces in a string)
@ -208,4 +210,29 @@ describe('linebreak', function()
a b c
Screen attributes are the same!]])
end)
-- oldtest: Test_visual_ends_before_showbreak()
it("Visual area is correct when it ends before multibyte 'showbreak'", function()
local screen = Screen.new(60, 8)
screen:set_default_attr_ids({
[0] = { bold = true, foreground = Screen.colors.Blue }, -- NonText
[1] = { background = Screen.colors.LightGrey }, -- Visual
[2] = { bold = true }, -- ModeMsg
})
screen:attach()
exec([[
let &wrap = v:true
let &linebreak = v:true
let &showbreak = ''
eval ['xxxxx ' .. 'y'->repeat(&columns - 6) .. ' zzzz']->setline(1)
normal! wvel
]])
screen:expect([[
xxxxx |
{0: }{1:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy}^ {1: }|
{0: }zzzz |
{0:~ }|*4
{2:-- VISUAL --} |
]])
end)
end)

View File

@ -9,6 +9,7 @@ CheckFeature conceal
CheckFeature signs
source view_util.vim
source screendump.vim
func s:screen_lines(lnum, width) abort
return ScreenLines(a:lnum, a:width)
@ -358,4 +359,24 @@ func Test_unprintable_char_on_wrap_column()
call s:close_windows()
endfunc
" Test that Visual selection is drawn correctly when 'linebreak' is set and
" selection ends before multibyte 'showbreak'.
func Test_visual_ends_before_showbreak()
CheckScreendump
let lines =<< trim END
vim9script
&wrap = true
&linebreak = true
&showbreak = '↪ '
['xxxxx ' .. 'y'->repeat(&columns - 6) .. ' zzzz']->setline(1)
normal! wvel
END
call writefile(lines, 'XvisualEndsBeforeShowbreak', 'D')
let buf = RunVimInTerminal('-S XvisualEndsBeforeShowbreak', #{rows: 6})
call VerifyScreenDump(buf, 'Test_visual_ends_before_showbreak', {})
call StopVimInTerminal(buf)
endfunc
" vim: shiftwidth=2 sts=2 expandtab