statuscolumn_spec.lua 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875
  1. local helpers = require('test.functional.helpers')(after_each)
  2. local Screen = require('test.functional.ui.screen')
  3. local clear = helpers.clear
  4. local command = helpers.command
  5. local eq = helpers.eq
  6. local exec = helpers.exec
  7. local eval = helpers.eval
  8. local exec_lua = helpers.exec_lua
  9. local feed = helpers.feed
  10. local meths = helpers.meths
  11. local pcall_err = helpers.pcall_err
  12. local assert_alive = helpers.assert_alive
  13. local mousemodels = { "extend", "popup", "popup_setpos" }
  14. describe('statuscolumn', function()
  15. local screen
  16. before_each(function()
  17. clear('--cmd', 'set number nuw=1 | call setline(1, repeat(["aaaaa"], 16)) | norm GM')
  18. screen = Screen.new()
  19. screen:attach()
  20. exec_lua('ns = vim.api.nvim_create_namespace("")')
  21. end)
  22. it("fails with invalid 'statuscolumn'", function()
  23. command([[set stc=%{v:relnum?v:relnum:(v:lnum==5?invalid:v:lnum)}\ ]])
  24. screen:expect([[
  25. 4 aaaaa |
  26. 3 aaaaa |
  27. 2 aaaaa |
  28. 1 aaaaa |
  29. 8 ^aaaaa |
  30. 1 aaaaa |
  31. 2 aaaaa |
  32. 3 aaaaa |
  33. 4 aaaaa |
  34. 5 aaaaa |
  35. 6 aaaaa |
  36. 7 aaaaa |
  37. 8 aaaaa |
  38. |
  39. ]])
  40. command('norm 5G')
  41. eq('Vim(redraw):E121: Undefined variable: invalid', pcall_err(command, 'redraw!'))
  42. eq('', eval('&statuscolumn'))
  43. end)
  44. it("widens with irregular 'statuscolumn' width", function()
  45. command([[set stc=%{v:relnum?v:relnum:(v:lnum==5?'bbbbb':v:lnum)}]])
  46. command('norm 5G | redraw!')
  47. screen:expect([[
  48. 1 aaaaa |
  49. bbbbba^eaaa |
  50. 1 aaaaa |
  51. 2 aaaaa |
  52. 3 aaaaa |
  53. 4 aaaaa |
  54. 5 aaaaa |
  55. 6 aaaaa |
  56. 7 aaaaa |
  57. 8 aaaaa |
  58. 9 aaaaa |
  59. 10 aaaaa |
  60. 11 aaaaa |
  61. |
  62. ]])
  63. end)
  64. it("works with 'number' and 'relativenumber'", function()
  65. command([[set stc=%{&nu?v:lnum:''}%=%{&rnu?'\ '.v:relnum:''}│]])
  66. screen:expect([[
  67. 4 │aaaaa |
  68. 5 │aaaaa |
  69. 6 │aaaaa |
  70. 7 │aaaaa |
  71. 8 │^aaaaa |
  72. 9 │aaaaa |
  73. 10│aaaaa |
  74. 11│aaaaa |
  75. 12│aaaaa |
  76. 13│aaaaa |
  77. 14│aaaaa |
  78. 15│aaaaa |
  79. 16│aaaaa |
  80. |
  81. ]])
  82. command([[set stc=%l%=%{&rnu?'\ ':''}%r│]])
  83. screen:expect_unchanged()
  84. command([[set stc=%{&nu?v:lnum:''}%=%{&rnu?'\ '.v:relnum:''}│]])
  85. command('set relativenumber')
  86. screen:expect([[
  87. 4 4│aaaaa |
  88. 5 3│aaaaa |
  89. 6 2│aaaaa |
  90. 7 1│aaaaa |
  91. 8 0│^aaaaa |
  92. 9 1│aaaaa |
  93. 10 2│aaaaa |
  94. 11 3│aaaaa |
  95. 12 4│aaaaa |
  96. 13 5│aaaaa |
  97. 14 6│aaaaa |
  98. 15 7│aaaaa |
  99. 16 8│aaaaa |
  100. |
  101. ]])
  102. command([[set stc=%l%=%{&rnu?'\ ':''}%r│]])
  103. screen:expect_unchanged()
  104. command([[set stc=%{&nu?v:lnum:''}%=%{&rnu?'\ '.v:relnum:''}│]])
  105. command('norm 12GH')
  106. screen:expect([[
  107. 4 0│^aaaaa |
  108. 5 1│aaaaa |
  109. 6 2│aaaaa |
  110. 7 3│aaaaa |
  111. 8 4│aaaaa |
  112. 9 5│aaaaa |
  113. 10 6│aaaaa |
  114. 11 7│aaaaa |
  115. 12 8│aaaaa |
  116. 13 9│aaaaa |
  117. 14 10│aaaaa |
  118. 15 11│aaaaa |
  119. 16 12│aaaaa |
  120. |
  121. ]])
  122. command([[set stc=%l%=%{&rnu?'\ ':''}%r│]])
  123. screen:expect_unchanged()
  124. command([[set stc=%{&nu?v:lnum:''}%=%{&rnu?'\ '.v:relnum:''}│]])
  125. end)
  126. it("works with highlighted 'statuscolumn'", function()
  127. command([[set stc=%#NonText#%{&nu?v:lnum:''}]] ..
  128. [[%=%{&rnu&&(v:lnum%2)?'\ '.v:relnum:''}]] ..
  129. [[%#LineNr#%{&rnu&&!(v:lnum%2)?'\ '.v:relnum:''}│]])
  130. screen:set_default_attr_ids({
  131. [0] = {bold = true, foreground = Screen.colors.Blue},
  132. [1] = {foreground = Screen.colors.Brown},
  133. })
  134. screen:expect([[
  135. {0:4 }{1:│}aaaaa |
  136. {0:5 }{1:│}aaaaa |
  137. {0:6 }{1:│}aaaaa |
  138. {0:7 }{1:│}aaaaa |
  139. {0:8 }{1:│}^aaaaa |
  140. {0:9 }{1:│}aaaaa |
  141. {0:10}{1:│}aaaaa |
  142. {0:11}{1:│}aaaaa |
  143. {0:12}{1:│}aaaaa |
  144. {0:13}{1:│}aaaaa |
  145. {0:14}{1:│}aaaaa |
  146. {0:15}{1:│}aaaaa |
  147. {0:16}{1:│}aaaaa |
  148. |
  149. ]])
  150. command('set relativenumber')
  151. screen:expect([[
  152. {0:4 }{1: 4│}aaaaa |
  153. {0:5 3}{1:│}aaaaa |
  154. {0:6 }{1: 2│}aaaaa |
  155. {0:7 1}{1:│}aaaaa |
  156. {0:8 }{1: 0│}^aaaaa |
  157. {0:9 1}{1:│}aaaaa |
  158. {0:10}{1: 2│}aaaaa |
  159. {0:11 3}{1:│}aaaaa |
  160. {0:12}{1: 4│}aaaaa |
  161. {0:13 5}{1:│}aaaaa |
  162. {0:14}{1: 6│}aaaaa |
  163. {0:15 7}{1:│}aaaaa |
  164. {0:16}{1: 8│}aaaaa |
  165. |
  166. ]])
  167. command('set nonumber')
  168. screen:expect([[
  169. {1:4│}aaaaa |
  170. {0:3}{1:│}aaaaa |
  171. {1:2│}aaaaa |
  172. {0:1}{1:│}aaaaa |
  173. {1:0│}^aaaaa |
  174. {0:1}{1:│}aaaaa |
  175. {1:2│}aaaaa |
  176. {0:3}{1:│}aaaaa |
  177. {1:4│}aaaaa |
  178. {0:5}{1:│}aaaaa |
  179. {1:6│}aaaaa |
  180. {0:7}{1:│}aaaaa |
  181. {1:8│}aaaaa |
  182. |
  183. ]])
  184. end)
  185. it('works with wrapped lines, signs and folds', function()
  186. command([[set stc=%C%s%=%{v:virtnum?'':v:lnum}│\ ]])
  187. command("call setline(1,repeat([repeat('aaaaa',10)],16))")
  188. screen:set_default_attr_ids({
  189. [0] = {bold = true, foreground = Screen.colors.Blue},
  190. [1] = {foreground = Screen.colors.Brown},
  191. [2] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.WebGrey},
  192. [3] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.LightGrey},
  193. [4] = {bold = true, foreground = Screen.colors.Brown},
  194. [5] = {background = Screen.colors.Grey90},
  195. })
  196. screen:expect([[
  197. {1: 4│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  198. {1: │ }a |
  199. {1: 5│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  200. {1: │ }a |
  201. {1: 6│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  202. {1: │ }a |
  203. {1: 7│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  204. {1: │ }a |
  205. {1: 8│ }^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  206. {1: │ }a |
  207. {1: 9│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  208. {1: │ }a |
  209. {1:10│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{0:@@@}|
  210. |
  211. ]])
  212. command("set stc=%C%s%=%l│\\ ")
  213. screen:expect_unchanged()
  214. command('set signcolumn=auto:2 foldcolumn=auto')
  215. command('sign define piet1 text=>> texthl=LineNr')
  216. command('sign define piet2 text=>! texthl=NonText')
  217. command('sign place 1 line=4 name=piet1 buffer=1')
  218. command('sign place 2 line=5 name=piet2 buffer=1')
  219. command('sign place 3 line=6 name=piet1 buffer=1')
  220. command('sign place 4 line=6 name=piet2 buffer=1')
  221. screen:expect([[
  222. {1:>>}{2: }{1: 4│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  223. {2: }{1: │ }aaaaa |
  224. {0:>!}{2: }{1: 5│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  225. {2: }{1: │ }aaaaa |
  226. {1:>>}{0:>!}{1: 6│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  227. {2: }{1: │ }aaaaa |
  228. {2: }{1: 7│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  229. {2: }{1: │ }aaaaa |
  230. {2: }{1: 8│ }^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  231. {2: }{1: │ }aaaaa |
  232. {2: }{1: 9│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  233. {2: }{1: │ }aaaaa |
  234. {2: }{1:10│ }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa{0:@@@}|
  235. |
  236. ]])
  237. command('norm zf$')
  238. -- Check that alignment works properly with signs after %=
  239. command([[set stc=%C%=%{v:virtnum?'':v:lnum}│%s\ ]])
  240. screen:expect([[
  241. {2: }{1: 4│>>}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  242. {2: }{1: │}{2: }{1: }aaaaaa |
  243. {2: }{1: 5│}{0:>!}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  244. {2: }{1: │}{2: }{1: }aaaaaa |
  245. {2: }{1: 6│>>}{0:>!}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  246. {2: }{1: │}{2: }{1: }aaaaaa |
  247. {2: }{1: 7│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  248. {2: }{1: │}{2: }{1: }aaaaaa |
  249. {2:+}{1: 8│}{2: }{1: }{3:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  250. {2: }{1: 9│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  251. {2: }{1: │}{2: }{1: }aaaaaa |
  252. {2: }{1:10│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  253. {2: }{1: │}{2: }{1: }aaaaaa |
  254. |
  255. ]])
  256. command('set cursorline')
  257. screen:expect([[
  258. {2: }{1: 4│>>}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  259. {2: }{1: │}{2: }{1: }aaaaaa |
  260. {2: }{1: 5│}{0:>!}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  261. {2: }{1: │}{2: }{1: }aaaaaa |
  262. {2: }{1: 6│>>}{0:>!}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  263. {2: }{1: │}{2: }{1: }aaaaaa |
  264. {2: }{1: 7│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  265. {2: }{1: │}{2: }{1: }aaaaaa |
  266. {2:+}{4: 8│}{2: }{4: }{5:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  267. {2: }{1: 9│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  268. {2: }{1: │}{2: }{1: }aaaaaa |
  269. {2: }{1:10│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  270. {2: }{1: │}{2: }{1: }aaaaaa |
  271. |
  272. ]])
  273. -- v:lnum is the same value on wrapped lines
  274. command([[set stc=%C%=%{v:lnum}│%s\ ]])
  275. screen:expect([[
  276. {2: }{1: 4│>>}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  277. {2: }{1: 4│}{2: }{1: }aaaaaa |
  278. {2: }{1: 5│}{0:>!}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  279. {2: }{1: 5│}{2: }{1: }aaaaaa |
  280. {2: }{1: 6│>>}{0:>!}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  281. {2: }{1: 6│}{2: }{1: }aaaaaa |
  282. {2: }{1: 7│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  283. {2: }{1: 7│}{2: }{1: }aaaaaa |
  284. {2:+}{4: 8│}{2: }{4: }{5:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  285. {2: }{1: 9│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  286. {2: }{1: 9│}{2: }{1: }aaaaaa |
  287. {2: }{1:10│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  288. {2: }{1:10│}{2: }{1: }aaaaaa |
  289. |
  290. ]])
  291. -- v:relnum is the same value on wrapped lines
  292. command([[set stc=%C%=\ %{v:relnum}│%s\ ]])
  293. screen:expect([[
  294. {2: }{1: 4│>>}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  295. {2: }{1: 4│}{2: }{1: }aaaaaa |
  296. {2: }{1: 3│}{0:>!}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  297. {2: }{1: 3│}{2: }{1: }aaaaaa |
  298. {2: }{1: 2│>>}{0:>!}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  299. {2: }{1: 2│}{2: }{1: }aaaaaa |
  300. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  301. {2: }{1: 1│}{2: }{1: }aaaaaa |
  302. {2:+}{4: 0│}{2: }{4: }{5:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  303. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  304. {2: }{1: 1│}{2: }{1: }aaaaaa |
  305. {2: }{1: 2│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  306. {2: }{1: 2│}{2: }{1: }aaaaaa |
  307. |
  308. ]])
  309. command([[set stc=%C%=\ %{v:virtnum?'':v:relnum}│%s\ ]])
  310. screen:expect([[
  311. {2: }{1: 4│>>}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  312. {2: }{1: │}{2: }{1: }aaaaaa |
  313. {2: }{1: 3│}{0:>!}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  314. {2: }{1: │}{2: }{1: }aaaaaa |
  315. {2: }{1: 2│>>}{0:>!}{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  316. {2: }{1: │}{2: }{1: }aaaaaa |
  317. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  318. {2: }{1: │}{2: }{1: }aaaaaa |
  319. {2:+}{4: 0│}{2: }{4: }{5:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  320. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  321. {2: }{1: │}{2: }{1: }aaaaaa |
  322. {2: }{1: 2│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  323. {2: }{1: │}{2: }{1: }aaaaaa |
  324. |
  325. ]])
  326. -- Up to 9 signs in a line
  327. command('set signcolumn=auto:9 foldcolumn=auto')
  328. command('sign place 5 line=6 name=piet1 buffer=1')
  329. command('sign place 6 line=6 name=piet2 buffer=1')
  330. command('sign place 7 line=6 name=piet1 buffer=1')
  331. command('sign place 8 line=6 name=piet2 buffer=1')
  332. command('sign place 9 line=6 name=piet1 buffer=1')
  333. command('sign place 10 line=6 name=piet2 buffer=1')
  334. command('sign place 11 line=6 name=piet1 buffer=1')
  335. screen:expect([[
  336. {2: }{1: 4│>>}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  337. {2: }{1: │}{2: }{1: }aaaaaaaaaaaaaaaaaaaa |
  338. {2: }{1: 3│}{0:>!}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  339. {2: }{1: │}{2: }{1: }aaaaaaaaaaaaaaaaaaaa |
  340. {2: }{1: 2│>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  341. {2: }{1: │}{2: }{1: }aaaaaaaaaaaaaaaaaaaa |
  342. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  343. {2: }{1: │}{2: }{1: }aaaaaaaaaaaaaaaaaaaa |
  344. {2:+}{4: 0│}{2: }{4: }{5:^+-- 1 line: aaaaaaaaaaaaaaaaa}|
  345. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  346. {2: }{1: │}{2: }{1: }aaaaaaaaaaaaaaaaaaaa |
  347. {2: }{1: 2│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  348. {2: }{1: │}{2: }{1: }aaaaaaaaaaaaaaaaaaaa |
  349. |
  350. ]])
  351. -- Also test fold and sign column when 'cpoptions' includes "n"
  352. command('set cpoptions+=n')
  353. feed('Hgjg0')
  354. screen:expect([[
  355. {2: }{4: 0│}{1:>>}{2: }{4: }{5:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  356. {2: }{5:^aaaaaaaaaaaaaaaaaaaa }|
  357. {2: }{1: 3│}{0:>!}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  358. {2: }aaaaaaaaaaaaaaaaaaaa |
  359. {2: }{1: 2│>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  360. {2: }aaaaaaaaaaaaaaaaaaaa |
  361. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  362. {2: }aaaaaaaaaaaaaaaaaaaa |
  363. {2:+}{1: 4│}{2: }{1: }{3:+-- 1 line: aaaaaaaaaaaaaaaaa}|
  364. {2: }{1: 1│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  365. {2: }aaaaaaaaaaaaaaaaaaaa |
  366. {2: }{1: 2│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  367. {2: }aaaaaaaaaaaaaaaaaaaa |
  368. |
  369. ]])
  370. command('set breakindent')
  371. feed('J2gjg0')
  372. screen:expect([[
  373. {2: }{4: 0│}{1:>>}{2: }{4: }{5:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  374. {2: } {5:aaaaaaaaaaaaaaaaaaaa aaaaaaaaa}|
  375. {2: } {5:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  376. {2: } {5:^aaaaaaaaaaa }|
  377. {2: }{1: 1│>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  378. {2: } aaaaaaaaaaaaaaaaaaaa |
  379. {2: }{1: 2│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  380. {2: } aaaaaaaaaaaaaaaaaaaa |
  381. {2:+}{1: 3│}{2: }{1: }{3:+-- 1 line: aaaaaaaaaaaaaaaaa}|
  382. {2: }{1: 4│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  383. {2: } aaaaaaaaaaaaaaaaaaaa |
  384. {2: }{1: 5│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  385. {2: } aaaaaaaaaaaaaaaaaaaa |
  386. |
  387. ]])
  388. command('set nobreakindent')
  389. feed('$g0')
  390. screen:expect([[
  391. {2: }{4: 0│}{1:>>}{2: }{4: }{5:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  392. {2: }{5:aaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaa}|
  393. {2: }{5:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  394. {2: }{5:^aaa }|
  395. {2: }{1: 1│>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>>}{0:>!}{1:>> }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  396. {2: }aaaaaaaaaaaaaaaaaaaa |
  397. {2: }{1: 2│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  398. {2: }aaaaaaaaaaaaaaaaaaaa |
  399. {2:+}{1: 3│}{2: }{1: }{3:+-- 1 line: aaaaaaaaaaaaaaaaa}|
  400. {2: }{1: 4│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  401. {2: }aaaaaaaaaaaaaaaaaaaa |
  402. {2: }{1: 5│}{2: }{1: }aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  403. {2: }aaaaaaaaaaaaaaaaaaaa |
  404. |
  405. ]])
  406. command('silent undo')
  407. feed('8gg')
  408. command('set cpoptions-=n')
  409. -- Status column is re-evaluated for virt_lines, buffer line, and wrapped line
  410. exec_lua([[
  411. vim.api.nvim_buf_set_extmark(0, ns, 5, 0, {
  412. virt_lines_above = true, virt_lines = {{{"virt_line above", ""}}} })
  413. vim.api.nvim_buf_set_extmark(0, ns, 4, 0, { virt_lines = {{{"virt_line", ""}}} })
  414. ]])
  415. command('set foldcolumn=0 signcolumn=no')
  416. command([[set stc=%{v:virtnum<0?'virtual':(!v:virtnum?'buffer':'wrapped')}%=%{'\ '.v:virtnum.'\ '.v:lnum}]])
  417. screen:expect([[
  418. {1:buffer 0 4}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  419. {1:wrapped 1 4}aaaaaaaa |
  420. {1:buffer 0 5}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  421. {1:wrapped 1 5}aaaaaaaa |
  422. {1:virtual-2 5}virt_line |
  423. {1:virtual-2 5}virt_line above |
  424. {1:buffer 0 6}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  425. {1:wrapped 1 6}aaaaaaaa |
  426. {1:buffer 0 7}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  427. {1:wrapped 1 7}aaaaaaaa |
  428. {4:buffer 0 8}{5:^+-- 1 line: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  429. {1:buffer 0 9}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  430. {1:wrapped 1 9}aaaaaaaa |
  431. |
  432. ]])
  433. -- Also test virt_lines at the end of buffer
  434. exec_lua([[
  435. vim.api.nvim_buf_set_extmark(0, ns, 15, 0, { virt_lines = {{{"END", ""}}} })
  436. ]])
  437. feed('Gzz')
  438. screen:expect([[
  439. {1:buffer 0 13}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  440. {1:wrapped 1 13}aaaaaaaaa |
  441. {1:buffer 0 14}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  442. {1:wrapped 1 14}aaaaaaaaa |
  443. {1:buffer 0 15}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  444. {1:wrapped 1 15}aaaaaaaaa |
  445. {4:buffer 0 16}{5:^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  446. {4:wrapped 1 16}{5:aaaaaaaaa }|
  447. {1:virtual-1 16}END |
  448. {0:~ }|
  449. {0:~ }|
  450. {0:~ }|
  451. {0:~ }|
  452. |
  453. ]])
  454. -- Also test virt_lines when 'cpoptions' includes "n"
  455. exec_lua([[
  456. vim.opt.cpoptions:append("n")
  457. vim.api.nvim_buf_set_extmark(0, ns, 14, 0, { virt_lines = {{{"virt_line1", ""}}} })
  458. vim.api.nvim_buf_set_extmark(0, ns, 14, 0, { virt_lines = {{{"virt_line2", ""}}} })
  459. ]])
  460. screen:expect([[
  461. {1:buffer 0 13}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  462. aaaaaaaaa |
  463. {1:buffer 0 14}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  464. aaaaaaaaa |
  465. {1:buffer 0 15}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa|
  466. aaaaaaaaa |
  467. {1:virtual-2 15}virt_line1 |
  468. {1:virtual-2 15}virt_line2 |
  469. {4:buffer 0 16}{5:^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}|
  470. {5:aaaaaaaaa }|
  471. {1:virtual-1 16}END |
  472. {0:~ }|
  473. {0:~ }|
  474. |
  475. ]])
  476. end)
  477. it('does not corrupt the screen with minwid sign item', function()
  478. screen:try_resize(screen._width, 3)
  479. screen:set_default_attr_ids({
  480. [0] = {foreground = Screen.colors.Brown},
  481. [1] = {foreground = Screen.colors.Blue4, background = Screen.colors.Gray},
  482. })
  483. command([[set stc=%6s\ %l]])
  484. exec_lua('vim.api.nvim_buf_set_extmark(0, ns, 7, 0, {sign_text = "𒀀"})')
  485. screen:expect([[
  486. {0: 𒀀 8}^aaaaa |
  487. {0: }{1: }{0: 9}aaaaa |
  488. |
  489. ]])
  490. end)
  491. for _, model in ipairs(mousemodels) do
  492. describe('with mousemodel=' .. model, function()
  493. before_each(function()
  494. command('set mousemodel=' .. model)
  495. exec([[
  496. function! MyClickFunc(minwid, clicks, button, mods)
  497. let g:testvar = printf("%d %d %s %d", a:minwid, a:clicks, a:button, getmousepos().line)
  498. if a:mods !=# ' '
  499. let g:testvar ..= '(' .. a:mods .. ')'
  500. endif
  501. endfunction
  502. let g:testvar = ''
  503. ]])
  504. end)
  505. it('clicks work with mousemodel=' .. model, function()
  506. meths.set_option_value('statuscolumn', '%0@MyClickFunc@%=%l%T', {})
  507. meths.input_mouse('left', 'press', '', 0, 0, 0)
  508. eq('0 1 l 4', eval("g:testvar"))
  509. meths.input_mouse('left', 'press', '', 0, 0, 0)
  510. eq('0 2 l 4', eval("g:testvar"))
  511. meths.input_mouse('left', 'press', '', 0, 0, 0)
  512. eq('0 3 l 4', eval("g:testvar"))
  513. meths.input_mouse('left', 'press', '', 0, 0, 0)
  514. eq('0 4 l 4', eval("g:testvar"))
  515. meths.input_mouse('right', 'press', '', 0, 3, 0)
  516. eq('0 1 r 7', eval("g:testvar"))
  517. meths.input_mouse('right', 'press', '', 0, 3, 0)
  518. eq('0 2 r 7', eval("g:testvar"))
  519. meths.input_mouse('right', 'press', '', 0, 3, 0)
  520. eq('0 3 r 7', eval("g:testvar"))
  521. meths.input_mouse('right', 'press', '', 0, 3, 0)
  522. eq('0 4 r 7', eval("g:testvar"))
  523. command('rightbelow vsplit')
  524. meths.input_mouse('left', 'press', '', 0, 0, 27)
  525. eq('0 1 l 4', eval("g:testvar"))
  526. meths.input_mouse('right', 'press', '', 0, 3, 27)
  527. eq('0 1 r 7', eval("g:testvar"))
  528. command('setlocal rightleft')
  529. meths.input_mouse('left', 'press', '', 0, 0, 52)
  530. eq('0 1 l 4', eval("g:testvar"))
  531. meths.input_mouse('right', 'press', '', 0, 3, 52)
  532. eq('0 1 r 7', eval("g:testvar"))
  533. command('wincmd H')
  534. meths.input_mouse('left', 'press', '', 0, 0, 25)
  535. eq('0 1 l 4', eval("g:testvar"))
  536. meths.input_mouse('right', 'press', '', 0, 3, 25)
  537. eq('0 1 r 7', eval("g:testvar"))
  538. command('close')
  539. command('set laststatus=2 winbar=%f')
  540. command('let g:testvar = ""')
  541. -- Check that winbar click doesn't register as statuscolumn click
  542. meths.input_mouse('right', 'press', '', 0, 0, 0)
  543. eq('', eval("g:testvar"))
  544. -- Check that statusline click doesn't register as statuscolumn click
  545. meths.input_mouse('right', 'press', '', 0, 12, 0)
  546. eq('', eval("g:testvar"))
  547. -- Check that cmdline click doesn't register as statuscolumn click
  548. meths.input_mouse('right', 'press', '', 0, 13, 0)
  549. eq('', eval("g:testvar"))
  550. end)
  551. it('clicks and highlights work with control characters', function()
  552. meths.set_option_value('statuscolumn', '\t%#NonText#\1%0@MyClickFunc@\t\1%T\t%##\1', {})
  553. screen:expect{grid=[[
  554. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  555. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  556. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  557. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  558. {1:^I}{0:^A^I^A^I}{1:^A}^aaaaa |
  559. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  560. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  561. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  562. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  563. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  564. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  565. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  566. {1:^I}{0:^A^I^A^I}{1:^A}aaaaa |
  567. |
  568. ]], attr_ids={
  569. [0] = {foreground = Screen.colors.Blue, bold = true}; -- NonText
  570. [1] = {foreground = Screen.colors.Brown}; -- LineNr
  571. }}
  572. meths.input_mouse('right', 'press', '', 0, 4, 3)
  573. eq('', eval("g:testvar"))
  574. meths.input_mouse('left', 'press', '', 0, 5, 8)
  575. eq('', eval("g:testvar"))
  576. meths.input_mouse('right', 'press', '', 0, 6, 4)
  577. eq('0 1 r 10', eval("g:testvar"))
  578. meths.input_mouse('left', 'press', '', 0, 7, 7)
  579. eq('0 1 l 11', eval("g:testvar"))
  580. end)
  581. it('popupmenu callback does not drag mouse on close', function()
  582. screen:try_resize(screen._width, 2)
  583. screen:set_default_attr_ids({
  584. [0] = {foreground = Screen.colors.Brown},
  585. [1] = {background = Screen.colors.Plum1},
  586. })
  587. meths.set_option_value('statuscolumn', '%0@MyClickFunc@%l%T', {})
  588. exec([[
  589. function! MyClickFunc(minwid, clicks, button, mods)
  590. let g:testvar = printf("%d %d %s %d", a:minwid, a:clicks, a:button, getmousepos().line)
  591. menu PopupStc.Echo <cmd>echo g:testvar<CR>
  592. popup PopupStc
  593. endfunction
  594. ]])
  595. -- clicking an item does not drag mouse
  596. meths.input_mouse('left', 'press', '', 0, 0, 0)
  597. screen:expect([[
  598. {0:8 }^aaaaa |
  599. {1: Echo } |
  600. ]])
  601. meths.input_mouse('left', 'press', '', 0, 1, 5)
  602. meths.input_mouse('left', 'release', '', 0, 1, 5)
  603. screen:expect([[
  604. {0:8 }^aaaaa |
  605. 0 1 l 8 |
  606. ]])
  607. command('echo')
  608. -- clicking outside to close the menu does not drag mouse
  609. meths.input_mouse('left', 'press', '', 0, 0, 0)
  610. screen:expect([[
  611. {0:8 }^aaaaa |
  612. {1: Echo } |
  613. ]])
  614. meths.input_mouse('left', 'press', '', 0, 0, 10)
  615. meths.input_mouse('left', 'release', '', 0, 0, 10)
  616. screen:expect([[
  617. {0:8 }^aaaaa |
  618. |
  619. ]])
  620. end)
  621. end)
  622. end
  623. it('click labels do not leak memory #21878', function()
  624. exec([[
  625. set laststatus=2
  626. setlocal statuscolumn=%0@MyClickFunc@abcd%T
  627. 4vsplit
  628. setlocal statusline=abcd
  629. redrawstatus
  630. setlocal statusline=
  631. only
  632. redraw
  633. ]])
  634. end)
  635. it('click labels do not crash when initial width is 0 #24428', function()
  636. exec([[
  637. set nonumber
  638. bwipe!
  639. setlocal statuscolumn=abcd
  640. redraw
  641. setlocal statuscolumn=%0@MyClickFunc@abcd%T
  642. redraw
  643. ]])
  644. assert_alive()
  645. end)
  646. it('works with foldcolumn', function()
  647. -- Fits maximum multibyte foldcolumn #21759
  648. command([[set stc=%C%=%l\ fdc=9 fillchars=foldsep:𒀀]])
  649. for _ = 0,8 do command('norm zfjzo') end
  650. -- 'statuscolumn' is not drawn for `virt_lines_leftcol` lines
  651. exec_lua([[
  652. vim.api.nvim_buf_set_extmark(0, ns, 6, 0, {
  653. virt_lines_leftcol = true, virt_lines = {{{"virt", ""}}} })
  654. vim.api.nvim_buf_set_extmark(0, ns, 7, 0, {
  655. virt_lines_leftcol = true, virt_lines = {{{"virt", ""}}} })
  656. ]])
  657. screen:expect([[
  658. 4 aaaaa |
  659. 5 aaaaa |
  660. 6 aaaaa |
  661. 7 aaaaa |
  662. virt |
  663. --------- 8 ^aaaaa |
  664. virt |
  665. 𒀀𒀀𒀀𒀀𒀀𒀀𒀀𒀀𒀀 9 aaaaa |
  666. 10 aaaaa |
  667. 11 aaaaa |
  668. 12 aaaaa |
  669. 13 aaaaa |
  670. 14 aaaaa |
  671. |
  672. ]])
  673. command('set stc=') -- also for the default fold column
  674. screen:expect_unchanged()
  675. -- 'statuscolumn' is not too wide with custom (bogus) fold column
  676. command([[set stc=%{foldlevel(v:lnum)>0?repeat('-',foldlevel(v:lnum)):''}%=%l\ ]])
  677. feed('Gd10Ggg<C-l>')
  678. screen:expect([[
  679. 1 ^aaaaa |
  680. 2 aaaaa |
  681. 3 aaaaa |
  682. 4 aaaaa |
  683. 5 aaaaa |
  684. 6 aaaaa |
  685. 7 aaaaa |
  686. virt |
  687. ---------8 aaaaa |
  688. virt |
  689. ---------9 aaaaa |
  690. ~ |
  691. ~ |
  692. |
  693. ]])
  694. end)
  695. it('works with cmdwin', function()
  696. feed(':set stc=%l<CR>q:k$')
  697. screen:expect([[
  698. 7 aaaaa |
  699. 8 aaaaa |
  700. 9 aaaaa |
  701. 10aaaaa |
  702. [No Name] [+] |
  703. :1set stc=%^l |
  704. :2 |
  705. ~ |
  706. ~ |
  707. ~ |
  708. ~ |
  709. ~ |
  710. [Command Line] |
  711. : |
  712. ]])
  713. end)
  714. it("has correct width when toggling '(relative)number'", function()
  715. screen:try_resize(screen._width, 6)
  716. command('call setline(1, repeat(["aaaaa"], 100))')
  717. command('set relativenumber')
  718. command([[set stc=%{!&nu&&!&rnu?'':&rnu?v:relnum?v:relnum:&nu?v:lnum:'0':v:lnum}]])
  719. screen:expect([[
  720. 1 aaaaa |
  721. 8 ^aaaaa |
  722. 1 aaaaa |
  723. 2 aaaaa |
  724. 3 aaaaa |
  725. |
  726. ]])
  727. -- width correctly estimated with "w_nrwidth_line_count" when setting 'stc'
  728. command([[set stc=%{!&nu&&!&rnu?'':&rnu?v:relnum?v:relnum:&nu?v:lnum:'0':v:lnum}]])
  729. screen:expect_unchanged()
  730. -- zero width when disabling 'number'
  731. command('set norelativenumber nonumber')
  732. screen:expect([[
  733. aaaaa |
  734. ^aaaaa |
  735. aaaaa |
  736. aaaaa |
  737. aaaaa |
  738. |
  739. ]])
  740. -- width correctly estimated with "w_nrwidth_line_count" when setting 'nu'
  741. command('set number')
  742. screen:expect([[
  743. 7 aaaaa |
  744. 8 ^aaaaa |
  745. 9 aaaaa |
  746. 10 aaaaa |
  747. 11 aaaaa |
  748. |
  749. ]])
  750. end)
  751. it("has correct width with custom sign column when (un)placing signs", function()
  752. screen:try_resize(screen._width, 3)
  753. exec_lua([[
  754. vim.cmd.norm('gg')
  755. vim.o.signcolumn = 'no'
  756. vim.fn.sign_define('sign', { text = 'ss' })
  757. _G.StatusCol = function()
  758. local s = vim.fn.sign_getplaced(1)[1].signs
  759. local es = vim.api.nvim_buf_get_extmarks(0, ns, 0, -1, {type = "sign"})
  760. local sign = ''
  761. local signs = #s + #es
  762. if signs > 0 then
  763. sign = (vim.v.lnum == 2 and 'ss' or ' '):rep(signs)
  764. end
  765. return vim.v.lnum .. '%=' .. sign
  766. end
  767. vim.o.number = true
  768. vim.o.numberwidth = 2
  769. vim.o.statuscolumn = "%!v:lua.StatusCol()"
  770. ]])
  771. command('sign place 1 line=2 name=sign')
  772. screen:expect([[
  773. 1 ^aaaaa |
  774. 2 ssaaaaa |
  775. |
  776. ]])
  777. command('sign place 2 line=2 name=sign')
  778. screen:expect([[
  779. 1 ^aaaaa |
  780. 2 ssssaaaaa |
  781. |
  782. ]])
  783. command('sign unplace 2')
  784. screen:expect([[
  785. 1 ^aaaaa |
  786. 2 ssaaaaa |
  787. |
  788. ]])
  789. command('sign unplace 1')
  790. screen:expect([[
  791. 1 ^aaaaa |
  792. 2 aaaaa |
  793. |
  794. ]])
  795. -- Also for extmark signs
  796. exec_lua('id1 = vim.api.nvim_buf_set_extmark(0, ns, 1, 0, {sign_text = "ss"})')
  797. screen:expect([[
  798. 1 ^aaaaa |
  799. 2 ssaaaaa |
  800. |
  801. ]])
  802. exec_lua('id2 = vim.api.nvim_buf_set_extmark(0, ns, 1, 0, {sign_text = "ss"})')
  803. screen:expect([[
  804. 1 ^aaaaa |
  805. 2 ssssaaaaa |
  806. |
  807. ]])
  808. exec_lua("vim.api.nvim_buf_del_extmark(0, ns, id1)")
  809. screen:expect([[
  810. 1 ^aaaaa |
  811. 2 ssaaaaa |
  812. |
  813. ]])
  814. exec_lua("vim.api.nvim_buf_del_extmark(0, ns, id2)")
  815. screen:expect([[
  816. 1 ^aaaaa |
  817. 2 aaaaa |
  818. |
  819. ]])
  820. -- In all windows
  821. command('wincmd v | set ls=0')
  822. command('sign place 1 line=2 name=sign')
  823. screen:expect([[
  824. 1 ^aaaaa │1 aaaaa |
  825. 2 ssaaaaa │2 ssaaaaa |
  826. |
  827. ]])
  828. end)
  829. it("is only evaluated twice, once to estimate and once to draw", function()
  830. command([[
  831. let g:stcnr = 0
  832. func! Stc()
  833. let g:stcnr += 1
  834. return '12345'
  835. endfunc
  836. set stc=%!Stc()
  837. norm ggdG
  838. ]])
  839. eq(2, eval('g:stcnr'))
  840. end)
  841. it('does not wrap multibyte characters at the end of a line', function()
  842. screen:try_resize(33, 4)
  843. command([[set spell stc=%l\ ]])
  844. command('call setline(8, "This is a line that contains ᶏ multibyte character.")')
  845. screen:expect([[
  846. 8 ^This is a line that contains ᶏ|
  847. multibyte character. |
  848. 9 aaaaa |
  849. |
  850. ]])
  851. end)
  852. end)