12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019 |
- local t = require('test.testutil')
- local n = require('test.functional.testnvim')()
- local Screen = require('test.functional.ui.screen')
- local clear = n.clear
- local command = n.command
- local eq = t.eq
- local exec = n.exec
- local eval = n.eval
- local exec_lua = n.exec_lua
- local feed = n.feed
- local api = n.api
- local pcall_err = t.pcall_err
- local assert_alive = n.assert_alive
- local mousemodels = { 'extend', 'popup', 'popup_setpos' }
- describe('statuscolumn', function()
- local screen
- before_each(function()
- clear('--cmd', 'set number nuw=1 | call setline(1, repeat(["aaaaa"], 16)) | norm GM')
- screen = Screen.new()
- exec_lua('ns = vim.api.nvim_create_namespace("")')
- end)
- it("fails with invalid 'statuscolumn'", function()
- command(
- [[set stc=%{v:relnum?v:relnum:(v:lnum==5?'truncate':v:lnum)}%{!v:relnum&&v:lnum==5?invalid:''}\ ]]
- )
- screen:expect([[
- {8:4 }aaaaa |
- {8:3 }aaaaa |
- {8:2 }aaaaa |
- {8:1 }aaaaa |
- {8:8 }^aaaaa |
- {8:1 }aaaaa |
- {8:2 }aaaaa |
- {8:3 }aaaaa |
- {8:4 }aaaaa |
- {8:5 }aaaaa |
- {8:6 }aaaaa |
- {8:7 }aaaaa |
- {8:8 }aaaaa |
- |
- ]])
- command('norm 5G')
- eq('Vim(redraw):E121: Undefined variable: invalid', pcall_err(command, 'redraw!'))
- eq('', eval('&statuscolumn'))
- screen:expect([[
- {8: 4 }aaaaa |
- {8: 5 }^aaaaa |
- {8: 6 }aaaaa |
- {8: 7 }aaaaa |
- {8: 8 }aaaaa |
- {8: 9 }aaaaa |
- {8:10 }aaaaa |
- {8:11 }aaaaa |
- {8:12 }aaaaa |
- {8:13 }aaaaa |
- {8:14 }aaaaa |
- {8:15 }aaaaa |
- {8:16 }aaaaa |
- |
- ]])
- end)
- it("widens with irregular 'statuscolumn' width", function()
- screen:try_resize(screen._width, 4)
- command([=[
- set stc=%{v:relnum?v:relnum:(v:lnum==5?'bbbbb':v:lnum)}
- let ns = nvim_create_namespace('')
- call nvim_buf_set_extmark(0, ns, 3, 0, {'virt_text':[['virt_text']]})
- norm 5G | redraw!
- ]=])
- screen:expect([[
- {8:1 }aaaaa virt_text |
- {8:bbbbb}a^eaaa |
- {8:1 }aaaaa |
- |
- ]])
- -- Doesn't crash when trying to fill click defs that do not fit (#26845)
- command('norm gg')
- command([=[
- set stc=%@Click@%{v:relnum?v:relnum:(v:lnum==5?'bbbbb':v:lnum)}%T
- norm 5Gzt | redraw!
- ]=])
- screen:expect([[
- {8:bbbbb}a^eaaa |
- {8:1 }aaaaa |
- {8:2 }aaaaa |
- |
- ]])
- -- Doesn't crash when clicking inside padded area without click_defs
- command('set numberwidth=10')
- api.nvim_input_mouse('left', 'press', '', 0, 0, 5)
- assert_alive()
- end)
- it("works with 'number' and 'relativenumber'", function()
- screen:expect([[
- {8: 4 }aaaaa |
- {8: 5 }aaaaa |
- {8: 6 }aaaaa |
- {8: 7 }aaaaa |
- {8: 8 }^aaaaa |
- {8: 9 }aaaaa |
- {8:10 }aaaaa |
- {8:11 }aaaaa |
- {8:12 }aaaaa |
- {8:13 }aaaaa |
- {8:14 }aaaaa |
- {8:15 }aaaaa |
- {8:16 }aaaaa |
- |
- ]])
- command([[set stc=%l\ ]])
- screen:expect_unchanged()
- command('set relativenumber')
- screen:expect([[
- {8: 4 }aaaaa |
- {8: 3 }aaaaa |
- {8: 2 }aaaaa |
- {8: 1 }aaaaa |
- {8:8 }^aaaaa |
- {8: 1 }aaaaa |
- {8: 2 }aaaaa |
- {8: 3 }aaaaa |
- {8: 4 }aaaaa |
- {8: 5 }aaaaa |
- {8: 6 }aaaaa |
- {8: 7 }aaaaa |
- {8: 8 }aaaaa |
- |
- ]])
- command('set stc=')
- screen:expect_unchanged()
- command([[set nonu stc=%l\ ]])
- screen:expect([[
- {8: 4 }aaaaa |
- {8: 3 }aaaaa |
- {8: 2 }aaaaa |
- {8: 1 }aaaaa |
- {8: 0 }^aaaaa |
- {8: 1 }aaaaa |
- {8: 2 }aaaaa |
- {8: 3 }aaaaa |
- {8: 4 }aaaaa |
- {8: 5 }aaaaa |
- {8: 6 }aaaaa |
- {8: 7 }aaaaa |
- {8: 8 }aaaaa |
- |
- ]])
- command('set nuw=1 stc=')
- screen:expect_unchanged()
- -- Correct alignment with items before and after number column
- command([[set nu stc=foo\ %l\ bar]])
- screen:expect([[
- {8:foo 4 bar}aaaaa |
- {8:foo 3 bar}aaaaa |
- {8:foo 2 bar}aaaaa |
- {8:foo 1 bar}aaaaa |
- {8:foo 8 bar}^aaaaa |
- {8:foo 1 bar}aaaaa |
- {8:foo 2 bar}aaaaa |
- {8:foo 3 bar}aaaaa |
- {8:foo 4 bar}aaaaa |
- {8:foo 5 bar}aaaaa |
- {8:foo 6 bar}aaaaa |
- {8:foo 7 bar}aaaaa |
- {8:foo 8 bar}aaaaa |
- |
- ]])
- end)
- it("works with highlighted 'statuscolumn'", function()
- command(
- [[set stc=%#NonText#%{&nu?v:lnum:''}]]
- .. [[%=%{&rnu&&(v:lnum%2)?'\ '.v:relnum:''}]]
- .. [[%#LineNr#%{&rnu&&!(v:lnum%2)?'\ '.v:relnum:''}│]]
- )
- screen:expect([[
- {1:4 }{8:│}aaaaa |
- {1:5 }{8:│}aaaaa |
- {1:6 }{8:│}aaaaa |
- {1:7 }{8:│}aaaaa |
- {1:8 }{8:│}^aaaaa |
- {1:9 }{8:│}aaaaa |
- {1:10}{8:│}aaaaa |
- {1:11}{8:│}aaaaa |
- {1:12}{8:│}aaaaa |
- {1:13}{8:│}aaaaa |
- {1:14}{8:│}aaaaa |
- {1:15}{8:│}aaaaa |
- {1:16}{8:│}aaaaa |
- |
- ]])
- command('set relativenumber')
- screen:expect([[
- {1:4 }{8: 4│}aaaaa |
- {1:5 3}{8:│}aaaaa |
- {1:6 }{8: 2│}aaaaa |
- {1:7 1}{8:│}aaaaa |
- {1:8 }{8: 0│}^aaaaa |
- {1:9 1}{8:│}aaaaa |
- {1:10 }{8: 2│}aaaaa |
- {1:11 3}{8:│}aaaaa |
- {1:12 }{8: 4│}aaaaa |
- {1:13 5}{8:│}aaaaa |
- {1:14 }{8: 6│}aaaaa |
- {1:15 7}{8:│}aaaaa |
- {1:16 }{8: 8│}aaaaa |
- |
- ]])
- command('set nonumber')
- screen:expect([[
- {1: }{8:4│}aaaaa |
- {1: 3}{8:│}aaaaa |
- {1: }{8:2│}aaaaa |
- {1: 1}{8:│}aaaaa |
- {1: }{8:0│}^aaaaa |
- {1: 1}{8:│}aaaaa |
- {1: }{8:2│}aaaaa |
- {1: 3}{8:│}aaaaa |
- {1: }{8:4│}aaaaa |
- {1: 5}{8:│}aaaaa |
- {1: }{8:6│}aaaaa |
- {1: 7}{8:│}aaaaa |
- {1: }{8:8│}aaaaa |
- |
- ]])
- end)
- it('works with wrapped lines, signs and folds', function()
- command([[set stc=%C%s%=%{v:virtnum?'':v:lnum}│\ ]])
- command("call setline(1,repeat([repeat('aaaaa',10)],16))")
- screen:add_extra_attr_ids {
- [100] = { foreground = Screen.colors.Red, background = Screen.colors.LightGray },
- [101] = {
- bold = true,
- background = Screen.colors.WebGray,
- foreground = Screen.colors.DarkBlue,
- },
- }
- command('hi! CursorLine guifg=Red guibg=NONE')
- screen:expect([[
- {8: 4│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8: │ }a |
- {8: 5│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8: │ }a |
- {8: 6│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8: │ }a |
- {8: 7│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8: │ }a |
- {8: 8│ }^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8: │ }a |
- {8: 9│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8: │ }a |
- {8:10│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{1:@@@}|
- |
- ]])
- command([[set stc=%C%s%=%l│\ ]])
- screen:expect_unchanged()
- command('set signcolumn=auto:2 foldcolumn=auto')
- command('sign define piet1 text=>> texthl=LineNr')
- command('sign define piet2 text=>! texthl=NonText')
- command('sign place 1 line=4 name=piet1 buffer=1')
- command('sign place 2 line=5 name=piet2 buffer=1')
- command('sign place 3 line=6 name=piet1 buffer=1')
- command('sign place 4 line=6 name=piet2 buffer=1')
- screen:expect([[
- {8:>>}{7: }{8: 4│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │ }aaaaa |
- {1:>!}{7: }{8: 5│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │ }aaaaa |
- {1:>!}{8:>> 6│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │ }aaaaa |
- {7: }{8: 7│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │ }aaaaa |
- {7: }{8: 8│ }^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │ }aaaaa |
- {7: }{8: 9│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │ }aaaaa |
- {7: }{8:10│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{1:@@@}|
- |
- ]])
- command('norm zf$')
- -- Check that alignment works properly with signs after %=
- command([[set stc=%C%=%{v:virtnum?'':v:lnum}│%s\ ]])
- screen:expect([[
- {7: }{8: 4│>>}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8: 5│}{1:>!}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8: 6│}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8: 7│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7:+}{8: 8│}{7: }{8: }{13:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{8: 9│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8:10│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- |
- ]])
- command('set cursorline')
- screen:expect([[
- {7: }{8: 4│>>}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8: 5│}{1:>!}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8: 6│}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8: 7│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {101:+}{15: 8│}{101: }{15: }{100:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{8: 9│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- {7: }{8:10│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaa |
- |
- ]])
- -- v:lnum is the same value on wrapped lines
- command([[set stc=%C%=%{v:lnum}│%s\ ]])
- screen:expect([[
- {7: }{8: 4│>>}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 4│}{7: }{8: }aaaaaa |
- {7: }{8: 5│}{1:>!}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 5│}{7: }{8: }aaaaaa |
- {7: }{8: 6│}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 6│}{7: }{8: }aaaaaa |
- {7: }{8: 7│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 7│}{7: }{8: }aaaaaa |
- {101:+}{15: 8│}{101: }{15: }{100:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{8: 9│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 9│}{7: }{8: }aaaaaa |
- {7: }{8:10│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8:10│}{7: }{8: }aaaaaa |
- |
- ]])
- -- v:relnum is the same value on wrapped lines
- command([[set stc=%C%=\ %{v:relnum}│%s\ ]])
- screen:expect([[
- {7: }{8: 4│>>}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 4│}{7: }{8: }aaaaaaa |
- {7: }{8: 3│}{1:>!}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 3│}{7: }{8: }aaaaaaa |
- {7: }{8: 2│}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 2│}{7: }{8: }aaaaaaa |
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 1│}{7: }{8: }aaaaaaa |
- {101:+}{15: 0│}{101: }{15: }{100:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 1│}{7: }{8: }aaaaaaa |
- {7: }{8: 2│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: 2│}{7: }{8: }aaaaaaa |
- |
- ]])
- command([[set stc=%C%=\ %{v:virtnum?'':v:relnum}│%s\ ]])
- screen:expect([[
- {7: }{8: 4│>>}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaa |
- {7: }{8: 3│}{1:>!}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaa |
- {7: }{8: 2│}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaa |
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaa |
- {101:+}{15: 0│}{101: }{15: }{100:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaa |
- {7: }{8: 2│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaa |
- |
- ]])
- -- Up to 9 signs in a line
- command('set signcolumn=auto:9 foldcolumn=auto')
- command('sign place 5 line=6 name=piet1 buffer=1')
- command('sign place 6 line=6 name=piet2 buffer=1')
- command('sign place 7 line=6 name=piet1 buffer=1')
- command('sign place 8 line=6 name=piet2 buffer=1')
- command('sign place 9 line=6 name=piet1 buffer=1')
- command('sign place 10 line=6 name=piet2 buffer=1')
- command('sign place 11 line=6 name=piet1 buffer=1')
- screen:expect([[
- {7: }{8: 4│>>}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 3│}{1:>!}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 2│>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaaaaaaaaaaaaaaaa |
- {101:+}{15: 0│}{101: }{15: }{100:^+-- 1 line: aaaaaaaaaaaaaaaa}|
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 2│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }{8: │}{7: }{8: }aaaaaaaaaaaaaaaaaaaaa |
- |
- ]])
- -- Also test fold and sign column when 'cpoptions' includes "n"
- command('set cpoptions+=n')
- feed('Hgjg0')
- screen:expect([[
- {101: }{15: 0│>>}{101: }{15: }{19:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{19:^aaaaaaaaaaaaaaaaaaaaa }|
- {7: }{8: 3│}{1:>!}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 2│>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- {7:+}{8: 4│}{7: }{8: }{13:+-- 1 line: aaaaaaaaaaaaaaaa}|
- {7: }{8: 1│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 2│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- |
- ]])
- command('set breakindent')
- command('sign unplace 2')
- feed('J2gjg0')
- screen:expect([[
- {101: }{15: 0│>>}{101: }{15: }{19:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: } {19:aaaaaaaaaaaaaaaaaaaaa aaaaaaa}|
- {7: } {19:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: } {19:^aaaaaaaaaaaaaa }|
- {7: }{8: 1│>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: } aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 2│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: } aaaaaaaaaaaaaaaaaaaaa |
- {7:+}{8: 3│}{7: }{8: }{13:+-- 1 line: aaaaaaaaaaaaaaaa}|
- {7: }{8: 4│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: } aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 5│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: } aaaaaaaaaaaaaaaaaaaaa |
- |
- ]])
- command('set nobreakindent')
- feed('$g0')
- screen:expect([[
- {101: }{15: 0│>>}{101: }{15: }{19:aaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{19:aaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa}|
- {7: }{19:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {7: }{19:^aaaa }|
- {7: }{8: 1│>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>>}{1:>!}{8:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 2│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- {7:+}{8: 3│}{7: }{8: }{13:+-- 1 line: aaaaaaaaaaaaaaaa}|
- {7: }{8: 4│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- {7: }{8: 5│}{7: }{8: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {7: }aaaaaaaaaaaaaaaaaaaaa |
- |
- ]])
- command('silent undo')
- feed('8gg')
- command('set cpoptions-=n')
- -- Status column is re-evaluated for virt_lines, buffer line, and wrapped line
- exec_lua([[
- vim.api.nvim_buf_set_extmark(0, ns, 5, 0, {
- virt_lines_above = true, virt_lines = {{{"virt_line above", ""}}} })
- vim.api.nvim_buf_set_extmark(0, ns, 4, 0, { virt_lines = {{{"virt_line", ""}}} })
- ]])
- command('set foldcolumn=0 signcolumn=number stc=%l')
- screen:expect([[
- {8:>>}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8: 5}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8: }virt_line |
- {8: }virt_line above |
- {8:>>}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8: 7}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {15: 8}{100:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {8: 9}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8:10}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8:11}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8:12}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8:13}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- {8:14}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
- |
- ]])
- command(
- [[set stc=%{v:virtnum<0?'virtual':(!v:virtnum?'buffer':'wrapped')}%=%{'\ '.v:virtnum.'\ '.v:lnum}]]
- )
- screen:expect([[
- {8:buffer 0 4}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 4}aaaaaaaa |
- {8:buffer 0 5}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 5}aaaaaaaa |
- {8:virtual-2 5}virt_line |
- {8:virtual-1 5}virt_line above |
- {8:buffer 0 6}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 6}aaaaaaaa |
- {8:buffer 0 7}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 7}aaaaaaaa |
- {15:buffer 0 8}{100:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {8:buffer 0 9}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 9}aaaaaaaa |
- |
- ]])
- -- Also test virt_lines at the end of buffer
- exec_lua([[
- vim.api.nvim_buf_set_extmark(0, ns, 15, 0, { virt_lines = {{{"END", ""}}} })
- ]])
- feed('GkJzz')
- screen:expect([[
- {8:buffer 0 12}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 12}aaaaaaaaa |
- {8:buffer 0 13}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 13}aaaaaaaaa |
- {8:buffer 0 14}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 14}aaaaaaaaa |
- {15:buffer 0 15}{19:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {15:wrapped 1 15}{19:aaaaaaaaa^ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {15:wrapped 2 15}{19:aaaaaaaaaaaaaaaaaaa }|
- {8:virtual-1 15}END |
- {1:~ }|*3
- |
- ]])
- -- Also test virt_lines when 'cpoptions' includes "n"
- exec_lua([[
- vim.opt.cpoptions:append("n")
- vim.api.nvim_buf_set_extmark(0, ns, 14, 0, { virt_lines = {{{"virt_line1", ""}}} })
- vim.api.nvim_buf_set_extmark(0, ns, 14, 0, { virt_lines = {{{"virt_line2", ""}}} })
- ]])
- screen:expect([[
- {8:buffer 0 12}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- aaaaaaaaa |
- {8:buffer 0 13}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- aaaaaaaaa |
- {8:buffer 0 14}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- aaaaaaaaa |
- {15:buffer 0 15}{19:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {19:aaaaaaaaa^ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
- {19:aaaaaaa }|
- {8:virtual-3 15}virt_line1 |
- {8:virtual-2 15}virt_line2 |
- {8:virtual-1 15}END |
- {1:~ }|
- |
- ]])
- -- Also test "col_rows" code path for 'relativenumber' cursor movement
- command([[
- set cpoptions-=n nocursorline relativenumber
- set stc=%{v:virtnum<0?'virtual':(!v:virtnum?'buffer':'wrapped')}%=%{'\ '.v:virtnum.'\ '.v:lnum.'\ '.v:relnum}
- ]])
- screen:expect([[
- {8:buffer 0 12 3}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 12 3}aaaaaaaaaaa |
- {8:buffer 0 13 2}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 13 2}aaaaaaaaaaa |
- {8:buffer 0 14 1}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 14 1}aaaaaaaaaaa |
- {8:buffer 0 15 0}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 15 0}aaaaaaaaaaa^ aaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 2 15 0}aaaaaaaaaaaaaaaaaaaaaaa |
- {8:virtual-3 15 0}virt_line1 |
- {8:virtual-2 15 0}virt_line2 |
- {8:virtual-1 15 0}END |
- {1:~ }|
- |
- ]])
- feed('kk')
- screen:expect([[
- {8:buffer 0 12 1}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 12 1}aaaaaaaaaaa |
- {8:buffer 0 13 0}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 13 0}aaaaaaaaaa^a |
- {8:buffer 0 14 1}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 14 1}aaaaaaaaaaa |
- {8:buffer 0 15 2}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 1 15 2}aaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaa|
- {8:wrapped 2 15 2}aaaaaaaaaaaaaaaaaaaaaaa |
- {8:virtual-3 15 2}virt_line1 |
- {8:virtual-2 15 2}virt_line2 |
- {8:virtual-1 15 2}END |
- {1:~ }|
- |
- ]])
- end)
- it('does not corrupt the screen with minwid sign item', function()
- screen:try_resize(screen._width, 3)
- command([[set stc=%6s\ %l]])
- exec_lua('vim.api.nvim_buf_set_extmark(0, ns, 7, 0, {sign_text = "𒀀"})')
- screen:expect([[
- {8: 𒀀 8}^aaaaa |
- {8: }{7: }{8: 9}aaaaa |
- |
- ]])
- end)
- for _, model in ipairs(mousemodels) do
- describe('with mousemodel=' .. model, function()
- before_each(function()
- command('set mousemodel=' .. model)
- exec([[
- function! MyClickFunc(minwid, clicks, button, mods)
- let g:testvar = printf("%d %d %s %d", a:minwid, a:clicks, a:button, getmousepos().line)
- if a:mods !=# ' '
- let g:testvar ..= '(' .. a:mods .. ')'
- endif
- endfunction
- let g:testvar = ''
- ]])
- end)
- it('clicks work with mousemodel=' .. model, function()
- api.nvim_set_option_value('statuscolumn', '%0@MyClickFunc@%=%l%T', {})
- api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
- eq('0 1 l 4', eval('g:testvar'))
- api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
- eq('0 2 l 4', eval('g:testvar'))
- api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
- eq('0 3 l 4', eval('g:testvar'))
- api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
- eq('0 4 l 4', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 3, 0)
- eq('0 1 r 7', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 3, 0)
- eq('0 2 r 7', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 3, 0)
- eq('0 3 r 7', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 3, 0)
- eq('0 4 r 7', eval('g:testvar'))
- command('rightbelow vsplit')
- api.nvim_input_mouse('left', 'press', '', 0, 0, 27)
- eq('0 1 l 4', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 3, 27)
- eq('0 1 r 7', eval('g:testvar'))
- command('setlocal rightleft')
- api.nvim_input_mouse('left', 'press', '', 0, 0, 52)
- eq('0 1 l 4', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 3, 52)
- eq('0 1 r 7', eval('g:testvar'))
- command('wincmd H')
- api.nvim_input_mouse('left', 'press', '', 0, 0, 25)
- eq('0 1 l 4', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 3, 25)
- eq('0 1 r 7', eval('g:testvar'))
- command('close')
- command('set laststatus=2 winbar=%f')
- command('let g:testvar = ""')
- -- Check that winbar click doesn't register as statuscolumn click
- api.nvim_input_mouse('right', 'press', '', 0, 0, 0)
- eq('', eval('g:testvar'))
- -- Check that statusline click doesn't register as statuscolumn click
- api.nvim_input_mouse('right', 'press', '', 0, 12, 0)
- eq('', eval('g:testvar'))
- end)
- it('clicks and highlights work with control characters', function()
- api.nvim_set_option_value('statuscolumn', '\t%#NonText#\1%0@MyClickFunc@\t\1%T\t%##\1', {})
- screen:expect {
- grid = [[
- {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |*4
- {1:^I}{0:^A^I^A^I}{1:^A}^aaaaa |
- {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |*8
- |
- ]],
- attr_ids = {
- [0] = { foreground = Screen.colors.Blue, bold = true }, -- NonText
- [1] = { foreground = Screen.colors.Brown }, -- LineNr
- },
- }
- api.nvim_input_mouse('right', 'press', '', 0, 4, 3)
- eq('', eval('g:testvar'))
- api.nvim_input_mouse('left', 'press', '', 0, 5, 8)
- eq('', eval('g:testvar'))
- api.nvim_input_mouse('right', 'press', '', 0, 6, 4)
- eq('0 1 r 10', eval('g:testvar'))
- api.nvim_input_mouse('left', 'press', '', 0, 7, 7)
- eq('0 1 l 11', eval('g:testvar'))
- end)
- it('popupmenu callback does not drag mouse on close', function()
- screen:try_resize(screen._width, 2)
- api.nvim_set_option_value('statuscolumn', '%0@MyClickFunc@%l%T', {})
- exec([[
- function! MyClickFunc(minwid, clicks, button, mods)
- let g:testvar = printf("%d %d %s %d", a:minwid, a:clicks, a:button, getmousepos().line)
- menu PopupStc.Echo <cmd>echo g:testvar<CR>
- popup PopupStc
- endfunction
- ]])
- -- clicking an item does not drag mouse
- api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
- screen:expect([[
- {8: 8}^aaaaa |
- {4: Echo } |
- ]])
- api.nvim_input_mouse('left', 'press', '', 0, 1, 5)
- api.nvim_input_mouse('left', 'release', '', 0, 1, 5)
- screen:expect([[
- {8: 8}^aaaaa |
- 0 1 l 8 |
- ]])
- command('echo')
- -- clicking outside to close the menu does not drag mouse
- api.nvim_input_mouse('left', 'press', '', 0, 0, 0)
- screen:expect([[
- {8: 8}^aaaaa |
- {4: Echo } |
- ]])
- api.nvim_input_mouse('left', 'press', '', 0, 0, 10)
- api.nvim_input_mouse('left', 'release', '', 0, 0, 10)
- screen:expect([[
- {8: 8}^aaaaa |
- |
- ]])
- end)
- end)
- end
- it('click labels do not leak memory #21878', function()
- exec([[
- set laststatus=2
- setlocal statuscolumn=%0@MyClickFunc@abcd%T
- 4vsplit
- setlocal statusline=abcd
- redrawstatus
- setlocal statusline=
- only
- redraw
- ]])
- end)
- it('click labels do not crash when initial width is 0 #24428', function()
- exec([[
- set nonumber
- bwipe!
- setlocal statuscolumn=abcd
- redraw
- setlocal statuscolumn=%0@MyClickFunc@abcd%T
- redraw
- ]])
- assert_alive()
- end)
- it('works with foldcolumn', function()
- -- Fits maximum multibyte foldcolumn #21759
- command([[set stc=%C%=%l\ fdc=9 fillchars=foldsep:𒀀]])
- for _ = 0, 8 do
- command('norm zfjzo')
- end
- -- 'statuscolumn' is not drawn for `virt_lines_leftcol` lines
- exec_lua([[
- vim.api.nvim_buf_set_extmark(0, ns, 6, 0, {
- virt_lines_leftcol = true, virt_lines = {{{"virt", ""}}} })
- vim.api.nvim_buf_set_extmark(0, ns, 7, 0, {
- virt_lines_leftcol = true, virt_lines = {{{"virt", ""}}} })
- ]])
- screen:expect([[
- {7: }{8: 4 }aaaaa |
- {7: }{8: 5 }aaaaa |
- {7: }{8: 6 }aaaaa |
- {7: }{8: 7 }aaaaa |
- virt |
- {7:---------}{8: 8 }^aaaaa |
- virt |
- {7:𒀀𒀀𒀀𒀀𒀀𒀀𒀀𒀀𒀀}{8: 9 }aaaaa |
- {7: }{8:10 }aaaaa |
- {7: }{8:11 }aaaaa |
- {7: }{8:12 }aaaaa |
- {7: }{8:13 }aaaaa |
- {7: }{8:14 }aaaaa |
- |
- ]])
- command('set stc=') -- also for the default fold column
- screen:expect_unchanged()
- -- 'statuscolumn' is not too wide with custom (bogus) fold column
- command([[set stc=%{foldlevel(v:lnum)>0?repeat('-',foldlevel(v:lnum)):''}%=%l\ ]])
- feed('Gd10Ggg<C-l>')
- screen:expect([[
- {8: 1 }^aaaaa |
- {8: 2 }aaaaa |
- {8: 3 }aaaaa |
- {8: 4 }aaaaa |
- {8: 5 }aaaaa |
- {8: 6 }aaaaa |
- {8: 7 }aaaaa |
- virt |
- {8:---------8 }aaaaa |
- virt |
- {8:---------9 }aaaaa |
- {1:~ }|*2
- |
- ]])
- end)
- it('works with cmdwin', function()
- feed(':set stc=%l<CR>q:k$')
- screen:expect([[
- {8: 7}aaaaa |
- {8: 8}aaaaa |
- {8: 9}aaaaa |
- {8:10}aaaaa |
- {2:[No Name] [+] }|
- {1::}{8:1}set stc=%^l |
- {1::}{8:2} |
- {1:~ }|*5
- {3:[Command Line] }|
- : |
- ]])
- end)
- it("has correct width when toggling '(relative)number'", function()
- screen:try_resize(screen._width, 6)
- command('call setline(1, repeat(["aaaaa"], 100))')
- command('set relativenumber')
- command([[set stc=%{!&nu&&!&rnu?'':&rnu?v:relnum?v:relnum:&nu?v:lnum:'0':v:lnum}]])
- screen:expect([[
- {8:1 }aaaaa |
- {8:8 }^aaaaa |
- {8:1 }aaaaa |
- {8:2 }aaaaa |
- {8:3 }aaaaa |
- |
- ]])
- -- width correctly estimated with "w_nrwidth_line_count" when setting 'stc'
- command([[set stc=%{!&nu&&!&rnu?'':&rnu?v:relnum?v:relnum:&nu?v:lnum:'0':v:lnum}]])
- screen:expect_unchanged()
- -- zero width when disabling 'number'
- command('set norelativenumber nonumber')
- screen:expect([[
- aaaaa |
- ^aaaaa |
- aaaaa |*3
- |
- ]])
- -- width correctly estimated with "w_nrwidth_line_count" when setting 'nu'
- command('set number')
- screen:expect([[
- {8:7 }aaaaa |
- {8:8 }^aaaaa |
- {8:9 }aaaaa |
- {8:10 }aaaaa |
- {8:11 }aaaaa |
- |
- ]])
- end)
- it('has correct width with custom sign column when (un)placing signs', function()
- screen:try_resize(screen._width, 3)
- exec_lua([[
- vim.cmd.norm('gg')
- vim.o.signcolumn = 'no'
- vim.fn.sign_define('sign', { text = 'ss' })
- _G.StatusCol = function()
- local s = vim.fn.sign_getplaced(1)[1].signs
- local es = vim.api.nvim_buf_get_extmarks(0, ns, 0, -1, {type = "sign"})
- local sign = ''
- local signs = #s + #es
- if signs > 0 then
- sign = (vim.v.lnum == 2 and 'ss' or ' '):rep(signs)
- end
- return vim.v.lnum .. '%=' .. sign
- end
- vim.o.number = true
- vim.o.numberwidth = 2
- vim.o.statuscolumn = "%!v:lua.StatusCol()"
- ]])
- command('sign place 1 line=2 name=sign')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 ss}aaaaa |
- |
- ]])
- command('sign place 2 line=2 name=sign')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 ssss}aaaaa |
- |
- ]])
- command('sign unplace 2')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 ss}aaaaa |
- |
- ]])
- command('sign unplace 1')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 }aaaaa |
- |
- ]])
- -- Also for extmark signs
- exec_lua('id1 = vim.api.nvim_buf_set_extmark(0, ns, 1, 0, {sign_text = "ss"})')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 ss}aaaaa |
- |
- ]])
- exec_lua('id2 = vim.api.nvim_buf_set_extmark(0, ns, 1, 0, {sign_text = "ss"})')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 ssss}aaaaa |
- |
- ]])
- exec_lua('vim.api.nvim_buf_del_extmark(0, ns, id1)')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 ss}aaaaa |
- |
- ]])
- exec_lua('vim.api.nvim_buf_del_extmark(0, ns, id2)')
- screen:expect([[
- {8:1 }^aaaaa |
- {8:2 }aaaaa |
- |
- ]])
- -- In all windows
- command('wincmd v | set ls=0')
- command('sign place 1 line=2 name=sign')
- screen:expect([[
- {8:1 }^aaaaa │{8:1 }aaaaa |
- {8:2 ss}aaaaa │{8:2 ss}aaaaa |
- |
- ]])
- end)
- it('is only evaluated twice, once to estimate and once to draw', function()
- command([[
- let g:stcnr = 0
- func! Stc()
- let g:stcnr += 1
- return '12345'
- endfunc
- set stc=%!Stc()
- norm ggdG
- ]])
- eq(2, eval('g:stcnr'))
- end)
- it('does not wrap multibyte characters at the end of a line', function()
- screen:try_resize(33, 4)
- screen:add_extra_attr_ids {
- [100] = { undercurl = true, special = Screen.colors.Red },
- }
- command([[set spell stc=%l\ ]])
- command('call setline(8, "This is a line that contains ᶏ multibyte character.")')
- screen:expect([[
- {8: 8 }^This is a line that contains {100:ᶏ}|
- {8: } {100:multibyte} character. |
- {8: 9 }{100:aaaaa} |
- |
- ]])
- end)
- it('line increase properly redraws buffer text with relativenumber #27709', function()
- screen:try_resize(33, 4)
- command([[set rnu nuw=3 stc=%{v:lnum}\ ]])
- command('call setline(1, range(1, 99))')
- feed('Gyyp')
- screen:expect([[
- {8:98 }98 |
- {8:99 }99 |
- {8:100 }^99 |
- |
- ]])
- end)
- it('forces a rebuild with nvim__redraw', function()
- screen:try_resize(40, 4)
- -- Current window
- command([[
- let g:insert = v:false
- set nonu stc=%{g:insert?'insert':''}
- vsplit
- au InsertEnter * let g:insert = v:true | call nvim__redraw(#{statuscolumn:1, win:0})
- au InsertLeave * let g:insert = v:false | call nvim__redraw(#{statuscolumn:1, win:0})
- ]])
- feed('i')
- screen:expect({
- grid = [[
- {8:insert}^aaaaa │aaaaa |
- {8:insert}aaaaa │aaaaa |
- {3:[No Name] [+] }{2:[No Name] [+] }|
- {5:-- INSERT --} |
- ]],
- })
- feed('<esc>')
- screen:expect({
- grid = [[
- ^aaaaa │aaaaa |
- aaaaa │aaaaa |
- {3:[No Name] [+] }{2:[No Name] [+] }|
- |
- ]],
- })
- -- All windows
- command([[
- au! InsertEnter * let g:insert = v:true | call nvim__redraw(#{statuscolumn:1})
- au! InsertLeave * let g:insert = v:false | call nvim__redraw(#{statuscolumn:1})
- ]])
- feed('i')
- screen:expect({
- grid = [[
- {8:insert}^aaaaa │{8:insert}aaaaa |
- {8:insert}aaaaa │{8:insert}aaaaa |
- {3:[No Name] [+] }{2:[No Name] [+] }|
- {5:-- INSERT --} |
- ]],
- })
- feed('<esc>')
- screen:expect({
- grid = [[
- ^aaaaa │aaaaa |
- aaaaa │aaaaa |
- {3:[No Name] [+] }{2:[No Name] [+] }|
- |
- ]],
- })
- end)
- end)
|