vim-patch:9.1.2102: foldtext not reversed and cut off in 'rightleft' mode

Problem:  foldtext not reversed and cut off in 'rightleft' mode
          (bfredl)
Solution: Fix the rightleft redrawing logic (Sergey Vlasov)

fixes:  vim/vim#2659
closes: vim/vim#19220

b51ac5e378

Co-authored-by: Sergey Vlasov <sergey@vlasov.me>
This commit is contained in:
zeertzjq
2026-01-24 06:49:03 +08:00
parent 6342fc7dc8
commit b3242af187
3 changed files with 76 additions and 1 deletions

View File

@@ -296,4 +296,32 @@ describe('folding', function()
|
]])
end)
-- oldtest: Test_foldtext_and_fillchars_rightleft()
it("fold text is displayed properly with 'rightleft'", function()
screen:try_resize(70, 5)
exec([[
let longtext = 'Lorem ipsum dolor sit amet, consectetur adipiscing'
let g:multibyte = ' '
call setline(1, [longtext, longtext, longtext])
1,2fold
setlocal rightleft
set noshowmode noshowcmd
]])
screen:expect([[
{13:······gnicsipida rutetcesnoc ,tema tis rolod muspi meroL :senil 2 --^+}|
gnicsipida rutetcesnoc ,tema tis rolod muspi meroL|
{1: ~}|*2
|
]])
command('call setline(1, [g:multibyte, g:multibyte, g:multibyte])')
screen:expect([[
{13:········tema :senil 2 -^-+}|
|
{1: ~}|*2
|
]])
end)
end)

View File

@@ -1079,7 +1079,6 @@ describe('folded lines', function()
]])
end
-- Note: too much of the folded line gets cut off.This is a vim bug.
feed_command('set rightleft')
if multigrid then
screen:expect([[

View File

@@ -1303,6 +1303,54 @@ func Test_foldtextresult()
bw!
endfunc
" Test for foldtext and fillchars with 'rightleft' enabled
func Test_foldtext_and_fillchars_rightleft()
CheckFeature rightleft
CheckScreendump
CheckRunVimInTerminal
let script_lines =<< trim END
let longtext = 'Lorem ipsum dolor sit amet, consectetur adipiscing'
let g:multibyte = ' '
call setline(1, [longtext, longtext, longtext])
1,2fold
setlocal rightleft
set noshowmode noshowcmd
END
call writefile(script_lines, 'XTest_foldtext_and_fillchars_rightleft', 'D')
let buf = RunVimInTerminal('-S XTest_foldtext_and_fillchars_rightleft', {'rows': 5, 'cols': 70})
call VerifyScreenDump(buf, 'Test_foldtext_and_fillchars_rightleft_01', {})
call term_sendkeys(buf, ":call setline(1, [g:multibyte, g:multibyte, g:multibyte])\<CR>")
call VerifyScreenDump(buf, 'Test_foldtext_and_fillchars_rightleft_02', {})
" clean up
call StopVimInTerminal(buf)
endfunc
" Test for foldtextresult() with 'rightleft' enabled
func Test_foldtextresult_rightleft()
CheckFeature rightleft
new
set columns=70
setlocal rightleft
let longtext = 'Lorem ipsum dolor sit amet, consectetur adipiscing'
let multibyte = ' '
call setline(1, [longtext, longtext, longtext])
1,2fold
call assert_equal('+-- 2 lines: ' .. longtext, foldtextresult(1))
call setline(1, [multibyte, multibyte, multibyte])
call assert_equal('+-- 2 lines: ' .. multibyte, foldtextresult(1))
bw!
endfunc
" Test for merging two recursive folds when an intermediate line with no fold
" is removed
func Test_fold_merge_recursive()