local n = require('test.functional.testnvim')() local Screen = require('test.functional.ui.screen') local clear = n.clear local exec = n.exec local feed = n.feed local assert_alive = n.assert_alive before_each(clear) describe('smoothscroll', function() local screen before_each(function() screen = Screen.new(40, 12) screen:attach() end) -- oldtest: Test_CtrlE_CtrlY_stop_at_end() it('disabled does not break and stop at end', function() exec([[ enew call setline(1, ['one', 'two']) set number ]]) feed('') screen:expect({ any = '{8: 1 }^one' }) feed('') screen:expect({ any = '{8: 2 }^two' }) end) -- oldtest: Test_smoothscroll_CtrlE_CtrlY() it('works with and ', function() exec([[ call setline(1, [ 'line one', 'word '->repeat(20), 'line three', 'long word '->repeat(7), 'line', 'line', 'line', ]) set smoothscroll scrolloff=5 :5 ]]) local s1 = [[ word word word word word word word word |*2 word word word word | line three | long word long word long word long word | long word long word long word | ^line | line |*2 {1:~ }|*2 | ]] local s2 = [[ {1:<<<}d word word word word word word word | word word word word | line three | long word long word long word long word | long word long word long word | ^line | line |*2 {1:~ }|*3 | ]] local s3 = [[ {1:<<<}d word word word | line three | long word long word long word long word | long word long word long word | ^line | line |*2 {1:~ }|*4 | ]] local s4 = [[ line three | long word long word long word long word | long word long word long word | line |*2 ^line | {1:~ }|*5 | ]] local s5 = [[ {1:<<<}d word word word | line three | long word long word long word long word | long word long word long word | line |*2 ^line | {1:~ }|*4 | ]] local s6 = [[ {1:<<<}d word word word word word word word | word word word word | line three | long word long word long word long word | long word long word long word | line |*2 ^line | {1:~ }|*3 | ]] local s7 = [[ word word word word word word word word |*2 word word word word | line three | long word long word long word long word | long word long word long word | line |*2 ^line | {1:~ }|*2 | ]] local s8 = [[ line one | word word word word word word word word |*2 word word word word | line three | long word long word long word long word | long word long word long word | line |*2 ^line | {1:~ }| | ]] feed('') screen:expect(s1) feed('') screen:expect(s2) feed('') screen:expect(s3) feed('') screen:expect(s4) feed('') screen:expect(s5) feed('') screen:expect(s6) feed('') screen:expect(s7) feed('') screen:expect(s8) exec('set foldmethod=indent') -- move the cursor so we can reuse the same dumps feed('5G') screen:expect(s1) feed('') screen:expect(s2) feed('7G') screen:expect(s7) feed('') screen:expect(s8) end) -- oldtest: Test_smoothscroll_multibyte() it('works with multibyte characters', function() screen:try_resize(40, 6) exec([[ set scrolloff=0 smoothscroll call setline(1, [repeat('ϛ', 45), repeat('2', 36)]) exe "normal G35l\k" ]]) screen:expect([[ ϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛϛ^ϛϛϛϛϛ| ϛϛϛϛϛ | 222222222222222222222222222222222222 | {1:~ }|*2 | ]]) end) -- oldtest: Test_smoothscroll_number() it("works 'number' and 'cpo'+=n", function() exec([[ call setline(1, [ 'one ' .. 'word '->repeat(20), 'two ' .. 'long word '->repeat(7), 'line', 'line', 'line', ]) set smoothscroll scrolloff=5 set splitkeep=topline set number cpo+=n :3 func g:DoRel() set number relativenumber scrolloff=0 :%del call setline(1, [ 'one', 'very long text '->repeat(12), 'three', ]) exe "normal 2Gzt\" endfunc ]]) screen:expect([[ {8: 1 }one word word word word word word wo| rd word word word word word word word wo| rd word word word word word | {8: 2 }two long word long word long word lo| ng word long word long word long word | {8: 3 }^line | {8: 4 }line | {8: 5 }line | {1:~ }|*3 | ]]) feed('') screen:expect([[ {1:<<<}word word word word word word word wo| rd word word word word word | {8: 2 }two long word long word long word lo| ng word long word long word long word | {8: 3 }^line | {8: 4 }line | {8: 5 }line | {1:~ }|*4 | ]]) feed('') screen:expect([[ {1:<<<}word word word word word | {8: 2 }two long word long word long word lo| ng word long word long word long word | {8: 3 }^line | {8: 4 }line | {8: 5 }line | {1:~ }|*5 | ]]) exec('set cpo-=n') screen:expect([[ {1:<<<}{8: }d word word word word word word | {8: 2 }two long word long word long word lo| {8: }ng word long word long word long wor| {8: }d | {8: 3 }^line | {8: 4 }line | {8: 5 }line | {1:~ }|*4 | ]]) feed('') screen:expect([[ {1:<<<}{8: }rd word word word word word word wor| {8: }d word word word word word word | {8: 2 }two long word long word long word lo| {8: }ng word long word long word long wor| {8: }d | {8: 3 }^line | {8: 4 }line | {8: 5 }line | {1:~ }|*3 | ]]) feed('') screen:expect([[ {8: 1 }one word word word word word word wo| {8: }rd word word word word word word wor| {8: }d word word word word word word | {8: 2 }two long word long word long word lo| {8: }ng word long word long word long wor| {8: }d | {8: 3 }^line | {8: 4 }line | {8: 5 }line | {1:~ }|*2 | ]]) exec('botright split') feed('gg') screen:expect([[ {8: 1 }one word word word word word word wo| {8: }rd word word word word word word wor| {8: }d word word word word word word | {8: 2 }two long word long word long word{1:@@@}| {2:[No Name] [+] }| {8: 1 }^one word word word word word word wo| {8: }rd word word word word word word wor| {8: }d word word word word word word | {8: 2 }two long word long word long word lo| {8: }ng word long word long word long {1:@@@}| {3:[No Name] [+] }| | ]]) feed('') screen:expect([[ {8: 1 }one word word word word word word wo| {8: }rd word word word word word word wor| {8: }d word word word word word word | {8: 2 }two long word long word long word{1:@@@}| {2:[No Name] [+] }| {1:<<<}{8: }rd word word word word word word wor| {8: }d word word word word word word^ | {8: 2 }two long word long word long word lo| {8: }ng word long word long word long wor| {8: }d | {3:[No Name] [+] }| | ]]) feed('') screen:expect([[ {8: 1 }one word word word word word word wo| {8: }rd word word word word word word wor| {8: }d word word word word word word | {8: 2 }two long word long word long word{1:@@@}| {2:[No Name] [+] }| {1:<<<}{8: }d word word word word word word^ | {8: 2 }two long word long word long word lo| {8: }ng word long word long word long wor| {8: }d | {8: 3 }line | {3:[No Name] [+] }| | ]]) exec('close') exec('call DoRel()') screen:expect([[ {8:2}{1:<<<}^ong text very long text very long te| {8: }xt very long text very long text ver| {8: }y long text very long text very long| {8: } text very long text very long text | {8: 1 }three | {1:~ }|*6 --No lines in buffer-- | ]]) end) -- oldtest: Test_smoothscroll_list() it('works with list mode', function() screen:try_resize(40, 8) exec([[ set smoothscroll scrolloff=0 set list call setline(1, [ 'one', 'very long text '->repeat(12), 'three', ]) exe "normal 2Gzt\" ]]) screen:expect([[ {1:<<<}t very long text very long text very | ^long text very long text very long text | very long text very long text very long | text very long text{1:-} | three | {1:~ }|*2 | ]]) exec('set listchars+=precedes:#') screen:expect([[ {1:#}ext very long text very long text very | ^long text very long text very long text | very long text very long text very long | text very long text{1:-} | three | {1:~ }|*2 | ]]) end) -- oldtest: Test_smoothscroll_diff_mode() it('works with diff mode', function() screen:try_resize(40, 8) exec([[ let text = 'just some text here' call setline(1, text) set smoothscroll diffthis new call setline(1, text) set smoothscroll diffthis ]]) screen:expect([[ {7:- }^just some text here | {1:~ }|*2 {3:[No Name] [+] }| {7:- }just some text here | {1:~ }| {2:[No Name] [+] }| | ]]) feed('') screen:expect_unchanged() feed('') screen:expect_unchanged() end) -- oldtest: Test_smoothscroll_wrap_scrolloff_zero() it("works with zero 'scrolloff'", function() screen:try_resize(40, 8) exec([[ call setline(1, ['Line' .. (' with some text'->repeat(7))]->repeat(7)) set smoothscroll scrolloff=0 display= :3 ]]) screen:expect([[ {1:<<<}h some text with some text | Line with some text with some text with | some text with some text with some text | with some text with some text | ^Line with some text with some text with | some text with some text with some text | with some text with some text | | ]]) feed('j') screen:expect_unchanged() -- moving cursor down - whole bottom line shows feed('j') screen:expect_unchanged() feed('G') screen:expect_unchanged() feed('4G') screen:expect_unchanged() -- moving cursor up right after the <<< marker - no need to show whole line feed('2gj3l2k') screen:expect([[ {1:<<<}^h some text with some text | Line with some text with some text with | some text with some text with some text | with some text with some text | Line with some text with some text with | some text with some text with some text | with some text with some text | | ]]) -- moving cursor up where the <<< marker is - whole top line shows feed('2j02k') screen:expect([[ ^Line with some text with some text with | some text with some text with some text | with some text with some text | Line with some text with some text with | some text with some text with some text | with some text with some text | {1:@ }| | ]]) end) -- oldtest: Test_smoothscroll_wrap_long_line() it('adjusts the cursor position in a long line', function() screen:try_resize(40, 6) exec([[ call setline(1, ['one', 'two', 'Line' .. (' with lots of text'->repeat(30)) .. ' end', 'four']) set smoothscroll scrolloff=0 normal 3G10|zt ]]) -- scrolling up, cursor moves screen line down screen:expect([[ Line with^ lots of text with lots of text| with lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text with lots of te| | ]]) feed('') screen:expect([[ {1:<<<}th lot^s of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text with lots of te| xt with lots of text with lots of text w| | ]]) feed('5') screen:expect([[ {1:<<<} lots ^of text with lots of text with | lots of text with lots of text with lots| of text with lots of text with lots of | text with lots of text with lots of text| with lots of text with lots of text wit| | ]]) -- scrolling down, cursor moves screen line up feed('5') screen:expect([[ {1:<<<}th lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text with lots of te| xt with l^ots of text with lots of text w| | ]]) feed('') screen:expect([[ Line with lots of text with lots of text| with lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text wi^th lots of text with lots of te| | ]]) -- 'scrolloff' set to 1, scrolling up, cursor moves screen line down exec('set scrolloff=1') feed('10|') screen:expect([[ {1:<<<}th lots of text with lots of text wit| h lots of^ text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text with lots of te| xt with lots of text with lots of text w| | ]]) -- 'scrolloff' set to 1, scrolling down, cursor moves screen line up feed('gjgj') screen:expect([[ {1:<<<}th lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text wi^th lots of text with lots of te| xt with lots of text with lots of text w| | ]]) -- 'scrolloff' set to 2, scrolling up, cursor moves screen line down exec('set scrolloff=2') feed('10|') screen:expect([[ {1:<<<}th lots of text with lots of text wit| h lots of text with lots of text with lo| ts of tex^t with lots of text with lots o| f text with lots of text with lots of te| xt with lots of text with lots of text w| | ]]) -- 'scrolloff' set to 2, scrolling down, cursor moves screen line up feed('gj') screen:expect_unchanged() -- 'scrolloff' set to 0, move cursor down one line. Cursor should move properly, -- and since this is a really long line, it will be put on top of the screen. exec('set scrolloff=0') feed('0j') screen:expect([[ {1:<<<}th lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text end | ^four | | ]]) -- Test zt/zz/zb that they work properly when a long line is above it feed('zt') screen:expect([[ ^four | {1:~ }|*4 | ]]) feed('zz') screen:expect([[ {1:<<<}of text with lots of text with lots o| f text with lots of text end | ^four | {1:~ }|*2 | ]]) feed('zb') screen:expect([[ {1:<<<}th lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text end | ^four | | ]]) -- Repeat the step and move the cursor down again. -- This time, use a shorter long line that is barely long enough to span more -- than one window. Note that the cursor is at the bottom this time because -- Vim prefers to do so if we are scrolling a few lines only. exec( "call setline(1, ['one', 'two', 'Line' .. (' with lots of text'->repeat(10)) .. ' end', 'four'])" ) -- Currently visible lines were replaced, test that the lines and cursor -- are correctly displayed. screen:expect_unchanged() feed('3Gztj') screen:expect_unchanged() -- Repeat the step but this time start it when the line is smooth-scrolled by -- one line. This tests that the offset calculation is still correct and -- still end up scrolling down to the next line with cursor at bottom of -- screen. feed('3Gztj') screen:expect([[ {1:<<<}th lots of text with lots of text wit| h lots of text with lots of text with lo| ts of text with lots of text with lots o| f text with lots of text end | fou^r | | ]]) end) -- oldtest: Test_smoothscroll_one_long_line() it('scrolls correctly when moving the cursor', function() screen:try_resize(40, 6) exec([[ call setline(1, 'with lots of text '->repeat(7)) set smoothscroll scrolloff=0 ]]) local s1 = [[ ^with lots of text with lots of text with| lots of text with lots of text with lot| s of text with lots of text with lots of| text | {1:~ }| | ]] screen:expect(s1) feed('') screen:expect([[ {1:<<<}ts of text with lots of text with lot| ^s of text with lots of text with lots of| text | {1:~ }|*2 | ]]) feed('0') screen:expect(s1) end) -- oldtest: Test_smoothscroll_long_line_showbreak() it('cursor is not one screen line too far down', function() screen:try_resize(40, 6) -- a line that spans four screen lines exec("call setline(1, 'with lots of text in one line '->repeat(6))") exec('set smoothscroll scrolloff=0 showbreak=+++\\ ') local s1 = [[ ^with lots of text in one line with lots | {1:+++ }of text in one line with lots of tex| {1:+++ }t in one line with lots of text in o| {1:+++ }ne line with lots of text in one lin| {1:+++ }e with lots of text in one line | | ]] screen:expect(s1) feed('') screen:expect([[ {1:+++ }^of text in one line with lots of tex| {1:+++ }t in one line with lots of text in o| {1:+++ }ne line with lots of text in one lin| {1:+++ }e with lots of text in one line | {1:~ }| | ]]) feed('0') screen:expect(s1) end) -- oldtest: Test_smoothscroll_marker_over_double_width_dump() it('marker is drawn over double-width char correctly', function() screen:try_resize(40, 6) exec([[ call setline(1, 'a'->repeat(&columns) .. '口'->repeat(10)) setlocal smoothscroll ]]) screen:expect([[ ^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| 口口口口口口口口口口 | {1:~ }|*3 | ]]) feed('') screen:expect([[ {1:<<<} 口口口口口口口^口 | {1:~ }|*4 | ]]) end) -- oldtest: Test_smoothscroll_zero_width() it('does not divide by zero with a narrow window', function() screen:try_resize(12, 2) exec([[ call setline(1, ['a'->repeat(100)]) set wrap smoothscroll number laststatus=0 wincmd v wincmd v wincmd v wincmd v ]]) screen:expect([[ {8: 1^ }│{8: }│{8: }│{8: }│{8: }| | ]]) feed('llllllllllo') screen:expect([[ {1:<<<}{8: }aa^aaaaaa| | ]]) end) -- oldtest: Test_smoothscroll_ins_lines() it('does not unnecessarily insert lines', function() screen:try_resize(40, 6) exec([=[ set wrap smoothscroll scrolloff=0 conceallevel=2 concealcursor=nc call setline(1, [ \'line one' .. 'with lots of text in one line '->repeat(2), \'line two', \'line three', \'line four', \'line five' \]) ]=]) feed('gjgk') screen:expect([[ {1:<<<}lots of text in one line^ | line two | line three | line four | line five | | ]]) end) -- oldtest: Test_smoothscroll_cursormoved_line() it('does not place the cursor in the command line', function() screen:try_resize(40, 6) exec([=[ set smoothscroll call setline(1, [ \'', \'_'->repeat(&lines * &columns), \(('_')->repeat(&columns - 2) .. 'xxx')->repeat(2) \]) autocmd CursorMoved * eval [line('w0'), line('w$')] call search('xxx') ]=]) screen:expect([[ {1:<<<}_____________________________________| ________________________________________| ______________________________________^xx| x______________________________________x| xx | | ]]) end) -- oldtest: Test_smoothscroll_eob() it('does not scroll halfway at end of buffer', function() screen:try_resize(40, 10) exec([[ set smoothscroll call setline(1, ['']->repeat(100)) norm G ]]) -- does not scroll halfway when scrolling to end of buffer screen:expect([[ |*8 ^ | | ]]) exec("call setline(92, 'a'->repeat(100))") feed('G') -- cursor is not placed below window screen:expect([[ {1:<<<}aaaaaaaaaaaaaaaaa | |*7 ^ | | ]]) end) -- oldtest: Test_smoothscroll_incsearch() it('does not reset skipcol when doing incremental search on the same word', function() screen:try_resize(40, 8) exec([[ set smoothscroll number scrolloff=0 incsearch call setline(1, repeat([''], 20)) call setline(11, repeat('a', 100)) call setline(14, 'bbbb') ]]) feed('/b') screen:expect([[ {1:<<<}{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | {8: 12 } | {8: 13 } | {8: 14 }{2:b}{10:bbb} | {8: 15 } | {8: 16 } | {8: 17 } | /b^ | ]]) feed('b') screen:expect([[ {1:<<<}{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | {8: 12 } | {8: 13 } | {8: 14 }{2:bb}{10:bb} | {8: 15 } | {8: 16 } | {8: 17 } | /bb^ | ]]) feed('b') screen:expect([[ {1:<<<}{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | {8: 12 } | {8: 13 } | {8: 14 }{2:bbb}b | {8: 15 } | {8: 16 } | {8: 17 } | /bbb^ | ]]) feed('b') screen:expect([[ {1:<<<}{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaa | {8: 12 } | {8: 13 } | {8: 14 }{2:bbbb} | {8: 15 } | {8: 16 } | {8: 17 } | /bbbb^ | ]]) end) -- oldtest: Test_smoothscroll_multi_skipcol() it('scrolling multiple lines and stopping at non-zero skipcol', function() screen:try_resize(40, 10) exec([[ setlocal cursorline scrolloff=0 smoothscroll call setline(1, repeat([''], 8)) call setline(3, repeat('a', 50)) call setline(4, repeat('a', 50)) call setline(7, 'bbb') call setline(8, 'ccc') redraw ]]) screen:expect([[ {21:^ }| | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| aaaaaaaaaa | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| aaaaaaaaaa | |*2 bbb | | ]]) feed('3') screen:expect([[ {1:<<<}{21:aaaaaa^a }| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| aaaaaaaaaa | |*2 bbb | ccc | {1:~ }|*2 | ]]) feed('2') screen:expect([[ {1:<<<}{21:aaaaaa^a }| |*2 bbb | ccc | {1:~ }|*4 | ]]) end) -- oldtest: Test_smoothscroll_zero_width_scroll_cursor_bot() it('does not divide by zero in zero-width window', function() screen:try_resize(40, 19) exec([[ silent normal yy silent normal 19p set cpoptions+=n vsplit vertical resize 0 set foldcolumn=1 set number set smoothscroll silent normal 20G ]]) screen:expect([[ {8: }│ | {1:@}│ |*15 {1:^@}│ | {3:< }{2:[No Name] [+] }| | ]]) end) -- oldtest: Test_smoothscroll_cursor_top() it('resets skipcol when scrolling cursor to top', function() screen:try_resize(40, 12) exec([[ set smoothscroll scrolloff=2 new | 11resize | wincmd j call setline(1, ['line1', 'line2', 'line3'->repeat(20), 'line4']) exe "norm G3\k" ]]) screen:expect([[ | {2:[No Name] }| line1 | line2 | ^line3line3line3line3line3line3line3line3| line3line3line3line3line3line3line3line3| line3line3line3line3 | line4 | {1:~ }|*2 {3:[No Name] [+] }| | ]]) end) -- oldtest: Test_smoothscroll_crash() it('does not crash with small window and cpo+=n', function() screen:try_resize(40, 12) exec([[ 20 new vsp put =repeat('aaaa', 20) set nu fdc=1 smoothscroll cpo+=n vert resize 0 exe "norm! 0\" ]]) feed('2') assert_alive() end) it('works with virt_lines above and below', function() screen:try_resize(55, 7) exec([=[ call setline(1, ['Line' .. (' with some text'->repeat(7))]->repeat(3)) set smoothscroll let ns = nvim_create_namespace('') call nvim_buf_set_extmark(0, ns, 0, 0, {'virt_lines':[[['virt_below1']]]}) call nvim_buf_set_extmark(0, ns, 1, 0, {'virt_lines':[[['virt_above1']]],'virt_lines_above':1}) call nvim_buf_set_extmark(0, ns, 1, 0, {'virt_lines':[[['virt_below2']]]}) call nvim_buf_set_extmark(0, ns, 2, 0, {'virt_lines':[[['virt_above2']]],'virt_lines_above':1}) norm ggL ]=]) screen:expect([[ Line with some text with some text with some text with | some text with some text with some text with some text | virt_below1 | virt_above1 | ^Line with some text with some text with some text with | some text with some text with some text with some text | | ]]) feed('') screen:expect([[ {1:<<<}e text with some text with some text with some text | virt_below1 | virt_above1 | ^Line with some text with some text with some text with | some text with some text with some text with some text | virt_below2 | | ]]) feed('') screen:expect([[ virt_below1 | virt_above1 | ^Line with some text with some text with some text with | some text with some text with some text with some text | virt_below2 | virt_above2 | | ]]) feed('') screen:expect([[ virt_above1 | ^Line with some text with some text with some text with | some text with some text with some text with some text | virt_below2 | virt_above2 | Line with some text with some text with some text wi{1:@@@}| | ]]) feed('') screen:expect([[ ^Line with some text with some text with some text with | some text with some text with some text with some text | virt_below2 | virt_above2 | Line with some text with some text with some text with | some text with some text with some text with some text | | ]]) feed('') screen:expect([[ {1:<<<}e text with some text with some text with some tex^t | virt_below2 | virt_above2 | Line with some text with some text with some text with | some text with some text with some text with some text | {1:~ }| | ]]) end) it('works in Insert mode at bottom of window', function() screen:try_resize(40, 9) exec([[ call setline(1, repeat([repeat('A very long line ...', 10)], 5)) set wrap smoothscroll scrolloff=0 ]]) feed('Go123456789') screen:expect([[ {1:<<<}ery long line ...A very long line ...| A very long line ...A very long line ...|*5 123456789 | ^ | {5:-- INSERT --} | ]]) end) it('<<< marker shows with tabline, winbar and splits', function() screen:try_resize(40, 12) screen:set_default_attr_ids({ [1] = { foreground = Screen.colors.Blue1, bold = true }, [2] = { reverse = true }, [3] = { bold = true, reverse = true }, [4] = { background = Screen.colors.LightMagenta }, [5] = { bold = true }, [31] = { foreground = Screen.colors.Fuchsia, bold = true }, }) exec([[ call setline(1, ['Line' .. (' with some text'->repeat(7))]->repeat(7)) set smoothscroll scrolloff=0 norm sj ]]) screen:expect([[ {1:<<<}e text with some text with some text | with some text with some text | Line with some text with some text with | some text with some text with some text | with some text with some text | {2:[No Name] [+] }| {1:<<<}e text with some text with some text | ^with some text with some text | Line with some text with some text with | some text with some text with some te{1:@@@}| {3:[No Name] [+] }| | ]]) exec('set showtabline=2') feed('') screen:expect([[ {5: }{31:2}{5:+ [No Name] }{2: }| {1:<<<}e text with some text with some text | with some text with some text | Line with some text with some text with | some text with some text with some text | with some text with some text | {2:[No Name] [+] }| {1:<<<}e text with some text with some text | ^with some text with some text | Line with some text with some text wi{1:@@@}| {3:[No Name] [+] }| | ]]) exec('set winbar=winbar') feed('k') screen:expect([[ {5: }{31:2}{5:+ [No Name] }{2: }| {5:winbar }| {1:<<<}e text with some text with some text | ^with some text with some text | Line with some text with some text with | some text with some text with some te{1:@@@}| {3:[No Name] [+] }| {5:winbar }| {1:<<<}e text with some text with some text | with some text with some text | {2:[No Name] [+] }| | ]]) end) it('works with very long line', function() exec([[ edit test/functional/fixtures/bigfile_oneline.txt setlocal smoothscroll number ]]) screen:expect([[ {8: 1 }^0000;;Cc;0;BN;;;;;N;NULL;;;| {8: }; 0001;;Cc;0;BN;;;;;N;START| {8: } OF HEADING;;;; 0002;;Cc;0;| {8: }BN;;;;;N;START OF TEXT;;;; 0003;;Cc;0;BN;;;;;N;END OF TEXT;;;; | {8: }0004;;Cc;0;BN;;;;;N;END OF | {8: }TRANSMISSION;;;; 0005;;Cc;0| {8: };BN;;;;;N;ENQUIRY;;;; 0006;| {8: };Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; 0007;| {8: };Cc;0;BN;;;;;N;BELL;;;; 000| {8: }8;;Cc;0;BN;;;;;N;BACKSPACE;| | ]]) feed('j') screen:expect([[ {1:<<<}{8: }CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo| {8: };0;L;243AB;;;;N;;;;; 2F920;CJK COMPA| {8: }TIBILITY IDEOGRAPH-2F920;Lo;0;L;7228| {8: };;;;N;;;;; 2F921;CJK COMPATIBILITY I| {8: }DEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;| {8: } 2F922;CJK COMPATIBILITY IDEOGRAPH-2| {8: }F922;Lo;0;L;7250;;;;N;;;;; | {8: 2 }^2F923;CJK COMPATIBILITY IDEOGRAPH-2F| {8: }923;Lo;0;L;24608;;;;N;;;;; | {8: 3 }2F924;CJK COMPATIBILITY IDEOGRAPH-2F| {8: }924;Lo;0;L;7280;;;;N;;;;; | | ]]) end) end)