winbar_spec.lua 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  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 insert = helpers.insert
  6. local meths = helpers.meths
  7. local eq = helpers.eq
  8. local poke_eventloop = helpers.poke_eventloop
  9. local feed = helpers.feed
  10. local funcs = helpers.funcs
  11. local curwin = helpers.curwin
  12. local pcall_err = helpers.pcall_err
  13. describe('winbar', function()
  14. local screen
  15. before_each(function()
  16. clear()
  17. screen = Screen.new(60, 13)
  18. screen:attach()
  19. screen:set_default_attr_ids({
  20. [1] = {bold = true},
  21. [2] = {reverse = true},
  22. [3] = {bold = true, foreground = Screen.colors.Blue},
  23. [4] = {bold = true, reverse = true},
  24. [5] = {bold = true, foreground = Screen.colors.Red},
  25. [6] = {foreground = Screen.colors.Blue},
  26. [7] = {background = Screen.colors.LightGrey},
  27. [8] = {background = Screen.colors.LightMagenta},
  28. [9] = {bold = true, foreground = Screen.colors.Blue, background = Screen.colors.LightMagenta},
  29. [10] = {background = Screen.colors.LightGrey, underline = true},
  30. [11] = {background = Screen.colors.LightGrey, underline = true, bold = true, foreground = Screen.colors.Magenta},
  31. })
  32. meths.set_option('winbar', 'Set Up The Bars')
  33. end)
  34. it('works', function()
  35. screen:expect([[
  36. {1:Set Up The Bars }|
  37. ^ |
  38. {3:~ }|
  39. {3:~ }|
  40. {3:~ }|
  41. {3:~ }|
  42. {3:~ }|
  43. {3:~ }|
  44. {3:~ }|
  45. {3:~ }|
  46. {3:~ }|
  47. {3:~ }|
  48. |
  49. ]])
  50. -- winbar is excluded from the heights returned by winheight() and getwininfo()
  51. eq(11, funcs.winheight(0))
  52. local win_info = funcs.getwininfo(curwin().id)[1]
  53. eq(11, win_info.height)
  54. eq(1, win_info.winbar)
  55. end)
  56. it('works with custom \'fillchars\' value', function()
  57. command('set fillchars=wbr:+')
  58. screen:expect([[
  59. {1:Set Up The Bars+++++++++++++++++++++++++++++++++++++++++++++}|
  60. ^ |
  61. {3:~ }|
  62. {3:~ }|
  63. {3:~ }|
  64. {3:~ }|
  65. {3:~ }|
  66. {3:~ }|
  67. {3:~ }|
  68. {3:~ }|
  69. {3:~ }|
  70. {3:~ }|
  71. |
  72. ]])
  73. end)
  74. it('works with custom highlight', function()
  75. command('hi WinBar guifg=red')
  76. screen:expect([[
  77. {5:Set Up The Bars }|
  78. ^ |
  79. {3:~ }|
  80. {3:~ }|
  81. {3:~ }|
  82. {3:~ }|
  83. {3:~ }|
  84. {3:~ }|
  85. {3:~ }|
  86. {3:~ }|
  87. {3:~ }|
  88. {3:~ }|
  89. |
  90. ]])
  91. end)
  92. it('works with splits', function()
  93. command('hi WinBar guifg=red')
  94. command('hi WinBarNC guifg=blue')
  95. command('belowright vsplit | split | split')
  96. screen:expect([[
  97. {6:Set Up The Bars }│{5:Set Up The Bars }|
  98. │^ |
  99. {3:~ }│{3:~ }|
  100. {3:~ }│{4:[No Name] }|
  101. {3:~ }│{6:Set Up The Bars }|
  102. {3:~ }│ |
  103. {3:~ }│{3:~ }|
  104. {3:~ }│{2:[No Name] }|
  105. {3:~ }│{6:Set Up The Bars }|
  106. {3:~ }│ |
  107. {3:~ }│{3:~ }|
  108. {2:[No Name] [No Name] }|
  109. |
  110. ]])
  111. -- 'showcmdloc' "statusline" should not interfere with winbar redrawing #23030
  112. command('set showcmd showcmdloc=statusline')
  113. feed('<C-W>w')
  114. feed('<C-W>')
  115. screen:expect([[
  116. {6:Set Up The Bars }│{6:Set Up The Bars }|
  117. │ |
  118. {3:~ }│{3:~ }|
  119. {3:~ }│{2:[No Name] }|
  120. {3:~ }│{5:Set Up The Bars }|
  121. {3:~ }│^ |
  122. {3:~ }│{3:~ }|
  123. {3:~ }│{4:[No Name] ^W }|
  124. {3:~ }│{6:Set Up The Bars }|
  125. {3:~ }│ |
  126. {3:~ }│{3:~ }|
  127. {2:[No Name] [No Name] }|
  128. |
  129. ]])
  130. feed('w<C-W>W')
  131. screen:expect([[
  132. {6:Set Up The Bars }│{6:Set Up The Bars }|
  133. │ |
  134. {3:~ }│{3:~ }|
  135. {3:~ }│{2:[No Name] }|
  136. {3:~ }│{5:Set Up The Bars }|
  137. {3:~ }│^ |
  138. {3:~ }│{3:~ }|
  139. {3:~ }│{4:[No Name] }|
  140. {3:~ }│{6:Set Up The Bars }|
  141. {3:~ }│ |
  142. {3:~ }│{3:~ }|
  143. {2:[No Name] [No Name] }|
  144. |
  145. ]])
  146. end)
  147. it('works when switching value of \'winbar\'', function()
  148. command('belowright vsplit | split | split | set winbar=')
  149. screen:expect([[
  150. │^ |
  151. {3:~ }│{3:~ }|
  152. {3:~ }│{3:~ }|
  153. {3:~ }│{4:[No Name] }|
  154. {3:~ }│ |
  155. {3:~ }│{3:~ }|
  156. {3:~ }│{3:~ }|
  157. {3:~ }│{2:[No Name] }|
  158. {3:~ }│ |
  159. {3:~ }│{3:~ }|
  160. {3:~ }│{3:~ }|
  161. {2:[No Name] [No Name] }|
  162. |
  163. ]])
  164. command('set winbar=All\\ Your\\ Bar\\ Are\\ Belong\\ To\\ Us')
  165. screen:expect([[
  166. {1:All Your Bar Are Belong To Us}│{1:All Your Bar Are Belong To Us }|
  167. │^ |
  168. {3:~ }│{3:~ }|
  169. {3:~ }│{4:[No Name] }|
  170. {3:~ }│{1:All Your Bar Are Belong To Us }|
  171. {3:~ }│ |
  172. {3:~ }│{3:~ }|
  173. {3:~ }│{2:[No Name] }|
  174. {3:~ }│{1:All Your Bar Are Belong To Us }|
  175. {3:~ }│ |
  176. {3:~ }│{3:~ }|
  177. {2:[No Name] [No Name] }|
  178. |
  179. ]])
  180. command('set winbar=Changed\\ winbar')
  181. screen:expect([[
  182. {1:Changed winbar }│{1:Changed winbar }|
  183. │^ |
  184. {3:~ }│{3:~ }|
  185. {3:~ }│{4:[No Name] }|
  186. {3:~ }│{1:Changed winbar }|
  187. {3:~ }│ |
  188. {3:~ }│{3:~ }|
  189. {3:~ }│{2:[No Name] }|
  190. {3:~ }│{1:Changed winbar }|
  191. {3:~ }│ |
  192. {3:~ }│{3:~ }|
  193. {2:[No Name] [No Name] }|
  194. |
  195. ]])
  196. end)
  197. it('can be ruler', function()
  198. insert [[
  199. just some
  200. random text]]
  201. meths.set_option('winbar', 'Hello, I am a ruler: %l,%c')
  202. screen:expect{grid=[[
  203. {1:Hello, I am a ruler: 2,11 }|
  204. just some |
  205. random tex^t |
  206. {3:~ }|
  207. {3:~ }|
  208. {3:~ }|
  209. {3:~ }|
  210. {3:~ }|
  211. {3:~ }|
  212. {3:~ }|
  213. {3:~ }|
  214. {3:~ }|
  215. |
  216. ]]}
  217. feed 'b'
  218. screen:expect{grid=[[
  219. {1:Hello, I am a ruler: 2,8 }|
  220. just some |
  221. random ^text |
  222. {3:~ }|
  223. {3:~ }|
  224. {3:~ }|
  225. {3:~ }|
  226. {3:~ }|
  227. {3:~ }|
  228. {3:~ }|
  229. {3:~ }|
  230. {3:~ }|
  231. |
  232. ]]}
  233. feed 'k'
  234. screen:expect{grid=[[
  235. {1:Hello, I am a ruler: 1,8 }|
  236. just so^me |
  237. random text |
  238. {3:~ }|
  239. {3:~ }|
  240. {3:~ }|
  241. {3:~ }|
  242. {3:~ }|
  243. {3:~ }|
  244. {3:~ }|
  245. {3:~ }|
  246. {3:~ }|
  247. |
  248. ]]}
  249. end)
  250. it('works with laststatus=3', function()
  251. command('set laststatus=3')
  252. screen:expect([[
  253. {1:Set Up The Bars }|
  254. ^ |
  255. {3:~ }|
  256. {3:~ }|
  257. {3:~ }|
  258. {3:~ }|
  259. {3:~ }|
  260. {3:~ }|
  261. {3:~ }|
  262. {3:~ }|
  263. {3:~ }|
  264. {4:[No Name] }|
  265. |
  266. ]])
  267. command('belowright vsplit | split | split')
  268. screen:expect([[
  269. {1:Set Up The Bars }│{1:Set Up The Bars }|
  270. │^ |
  271. {3:~ }│{3:~ }|
  272. {3:~ }├──────────────────────────────|
  273. {3:~ }│{1:Set Up The Bars }|
  274. {3:~ }│ |
  275. {3:~ }│{3:~ }|
  276. {3:~ }├──────────────────────────────|
  277. {3:~ }│{1:Set Up The Bars }|
  278. {3:~ }│ |
  279. {3:~ }│{3:~ }|
  280. {4:[No Name] }|
  281. |
  282. ]])
  283. -- Test for issue #18791
  284. command('tabnew')
  285. screen:expect([[
  286. {10: }{11:4}{10: [No Name] }{1: [No Name] }{2: }{10:X}|
  287. {1:Set Up The Bars }|
  288. ^ |
  289. {3:~ }|
  290. {3:~ }|
  291. {3:~ }|
  292. {3:~ }|
  293. {3:~ }|
  294. {3:~ }|
  295. {3:~ }|
  296. {3:~ }|
  297. {4:[No Name] }|
  298. |
  299. ]])
  300. end)
  301. it('mouse click and drag work correctly in buffer', function()
  302. insert([[
  303. line 1
  304. line 2
  305. line 3
  306. line 4
  307. line -42
  308. line i
  309. line sin(theta)
  310. line 8]])
  311. meths.input_mouse('left', 'press', '', 0, 5, 1)
  312. screen:expect([[
  313. {1:Set Up The Bars }|
  314. line 1 |
  315. line 2 |
  316. line 3 |
  317. line 4 |
  318. l^ine -42 |
  319. line i |
  320. line sin(theta) |
  321. line 8 |
  322. {3:~ }|
  323. {3:~ }|
  324. {3:~ }|
  325. |
  326. ]])
  327. eq({5, 1}, meths.win_get_cursor(0))
  328. meths.input_mouse('left', 'drag', '', 0, 6, 2)
  329. screen:expect([[
  330. {1:Set Up The Bars }|
  331. line 1 |
  332. line 2 |
  333. line 3 |
  334. line 4 |
  335. l{7:ine -42} |
  336. {7:li}^ne i |
  337. line sin(theta) |
  338. line 8 |
  339. {3:~ }|
  340. {3:~ }|
  341. {3:~ }|
  342. {1:-- VISUAL --} |
  343. ]])
  344. eq({6, 2}, meths.win_get_cursor(0))
  345. meths.input_mouse('left', 'drag', '', 0, 1, 2)
  346. screen:expect([[
  347. {1:Set Up The Bars }|
  348. li^n{7:e 1} |
  349. {7:line 2} |
  350. {7:line 3} |
  351. {7:line 4} |
  352. {7:li}ne -42 |
  353. line i |
  354. line sin(theta) |
  355. line 8 |
  356. {3:~ }|
  357. {3:~ }|
  358. {3:~ }|
  359. {1:-- VISUAL --} |
  360. ]])
  361. eq({1, 2}, meths.win_get_cursor(0))
  362. meths.input_mouse('left', 'drag', '', 0, 0, 2)
  363. screen:expect_unchanged()
  364. eq({1, 2}, meths.win_get_cursor(0))
  365. end)
  366. it('dragging statusline with mouse works correctly', function()
  367. command('split')
  368. screen:expect([[
  369. {1:Set Up The Bars }|
  370. ^ |
  371. {3:~ }|
  372. {3:~ }|
  373. {3:~ }|
  374. {4:[No Name] }|
  375. {1:Set Up The Bars }|
  376. |
  377. {3:~ }|
  378. {3:~ }|
  379. {3:~ }|
  380. {2:[No Name] }|
  381. |
  382. ]])
  383. meths.input_mouse('left', 'press', '', 1, 5, 10)
  384. poke_eventloop()
  385. meths.input_mouse('left', 'drag', '', 1, 6, 10)
  386. screen:expect([[
  387. {1:Set Up The Bars }|
  388. ^ |
  389. {3:~ }|
  390. {3:~ }|
  391. {3:~ }|
  392. {3:~ }|
  393. {4:[No Name] }|
  394. {1:Set Up The Bars }|
  395. |
  396. {3:~ }|
  397. {3:~ }|
  398. {2:[No Name] }|
  399. |
  400. ]])
  401. meths.input_mouse('left', 'drag', '', 1, 4, 10)
  402. screen:expect([[
  403. {1:Set Up The Bars }|
  404. ^ |
  405. {3:~ }|
  406. {3:~ }|
  407. {4:[No Name] }|
  408. {1:Set Up The Bars }|
  409. |
  410. {3:~ }|
  411. {3:~ }|
  412. {3:~ }|
  413. {3:~ }|
  414. {2:[No Name] }|
  415. |
  416. ]])
  417. meths.input_mouse('left', 'press', '', 1, 11, 10)
  418. poke_eventloop()
  419. meths.input_mouse('left', 'drag', '', 1, 9, 10)
  420. screen:expect([[
  421. {1:Set Up The Bars }|
  422. ^ |
  423. {3:~ }|
  424. {3:~ }|
  425. {4:[No Name] }|
  426. {1:Set Up The Bars }|
  427. |
  428. {3:~ }|
  429. {3:~ }|
  430. {2:[No Name] }|
  431. |
  432. |
  433. |
  434. ]])
  435. eq(3, meths.get_option('cmdheight'))
  436. meths.input_mouse('left', 'drag', '', 1, 11, 10)
  437. screen:expect([[
  438. {1:Set Up The Bars }|
  439. ^ |
  440. {3:~ }|
  441. {3:~ }|
  442. {4:[No Name] }|
  443. {1:Set Up The Bars }|
  444. |
  445. {3:~ }|
  446. {3:~ }|
  447. {3:~ }|
  448. {3:~ }|
  449. {2:[No Name] }|
  450. |
  451. ]])
  452. eq(1, meths.get_option('cmdheight'))
  453. end)
  454. it('properly equalizes window height for window-local value', function()
  455. command('set equalalways | set winbar= | setlocal winbar=a | split')
  456. command('setlocal winbar= | split')
  457. command('setlocal winbar=b | split')
  458. screen:expect([[
  459. {1:b }|
  460. ^ |
  461. {4:[No Name] }|
  462. {1:b }|
  463. |
  464. {2:[No Name] }|
  465. |
  466. {3:~ }|
  467. {2:[No Name] }|
  468. {1:a }|
  469. |
  470. {2:[No Name] }|
  471. |
  472. ]])
  473. end)
  474. it('requires window-local value for floating windows', function()
  475. local win = meths.open_win(0, false, { relative = 'editor', row = 2, col = 10, height = 7,
  476. width = 30 })
  477. meths.set_option_value('winbar', 'bar', {})
  478. screen:expect{grid=[[
  479. {1:bar }|
  480. ^ |
  481. {3:~ }{8: }{3: }|
  482. {3:~ }{9:~ }{3: }|
  483. {3:~ }{9:~ }{3: }|
  484. {3:~ }{9:~ }{3: }|
  485. {3:~ }{9:~ }{3: }|
  486. {3:~ }{9:~ }{3: }|
  487. {3:~ }{9:~ }{3: }|
  488. {3:~ }|
  489. {3:~ }|
  490. {3:~ }|
  491. |
  492. ]]}
  493. meths.set_option_value('winbar', 'floaty bar', { scope = 'local', win = win.id })
  494. screen:expect{grid=[[
  495. {1:bar }|
  496. ^ |
  497. {3:~ }{1:floaty bar }{3: }|
  498. {3:~ }{8: }{3: }|
  499. {3:~ }{9:~ }{3: }|
  500. {3:~ }{9:~ }{3: }|
  501. {3:~ }{9:~ }{3: }|
  502. {3:~ }{9:~ }{3: }|
  503. {3:~ }{9:~ }{3: }|
  504. {3:~ }|
  505. {3:~ }|
  506. {3:~ }|
  507. |
  508. ]]}
  509. end)
  510. it('works correctly when moving a split', function()
  511. screen:try_resize(45, 6)
  512. command('set winbar=')
  513. command('vsplit')
  514. command('setlocal winbar=foo')
  515. screen:expect([[
  516. {1:foo }│ |
  517. ^ │{3:~ }|
  518. {3:~ }│{3:~ }|
  519. {3:~ }│{3:~ }|
  520. {4:[No Name] }{2:[No Name] }|
  521. |
  522. ]])
  523. command('wincmd L')
  524. screen:expect([[
  525. │{1:foo }|
  526. {3:~ }│^ |
  527. {3:~ }│{3:~ }|
  528. {3:~ }│{3:~ }|
  529. {2:[No Name] }{4:[No Name] }|
  530. |
  531. ]])
  532. command('wincmd w')
  533. command('wincmd L')
  534. screen:expect([[
  535. {1:foo }│^ |
  536. │{3:~ }|
  537. {3:~ }│{3:~ }|
  538. {3:~ }│{3:~ }|
  539. {2:[No Name] }{4:[No Name] }|
  540. |
  541. ]])
  542. end)
  543. it('properly resizes window when there is no space in it', function()
  544. command('set winbar= | 1split')
  545. screen:expect([[
  546. ^ |
  547. {4:[No Name] }|
  548. |
  549. {3:~ }|
  550. {3:~ }|
  551. {3:~ }|
  552. {3:~ }|
  553. {3:~ }|
  554. {3:~ }|
  555. {3:~ }|
  556. {3:~ }|
  557. {2:[No Name] }|
  558. |
  559. ]])
  560. command('set winbar=a')
  561. screen:expect([[
  562. {1:a }|
  563. ^ |
  564. {4:[No Name] }|
  565. {1:a }|
  566. |
  567. {3:~ }|
  568. {3:~ }|
  569. {3:~ }|
  570. {3:~ }|
  571. {3:~ }|
  572. {3:~ }|
  573. {2:[No Name] }|
  574. |
  575. ]])
  576. end)
  577. it('cannot be added unless there is room', function()
  578. command('set winbar= | split | split | split | split | split')
  579. screen:expect([[
  580. ^ |
  581. {4:[No Name] }|
  582. |
  583. {2:[No Name] }|
  584. |
  585. {2:[No Name] }|
  586. |
  587. {2:[No Name] }|
  588. |
  589. {2:[No Name] }|
  590. |
  591. {2:[No Name] }|
  592. |
  593. ]])
  594. eq('Vim(set):E36: Not enough room', pcall_err(command, 'set winbar=test'))
  595. end)
  596. end)
  597. describe('local winbar with tabs', function()
  598. local screen
  599. before_each(function()
  600. clear()
  601. screen = Screen.new(60, 10)
  602. screen:attach()
  603. screen:set_default_attr_ids({
  604. [1] = {bold = true},
  605. [2] = {reverse = true},
  606. [3] = {bold = true, foreground = Screen.colors.Blue},
  607. [4] = {underline = true, background = Screen.colors.LightGray}
  608. })
  609. meths.set_option_value('winbar', 'foo', { scope = 'local', win = 0 })
  610. end)
  611. it('works', function()
  612. command('tabnew')
  613. screen:expect([[
  614. {4: [No Name] }{1: [No Name] }{2: }{4:X}|
  615. ^ |
  616. {3:~ }|
  617. {3:~ }|
  618. {3:~ }|
  619. {3:~ }|
  620. {3:~ }|
  621. {3:~ }|
  622. {3:~ }|
  623. |
  624. ]])
  625. command('tabnext')
  626. screen:expect{grid=[[
  627. {1: [No Name] }{4: [No Name] }{2: }{4:X}|
  628. {1:foo }|
  629. ^ |
  630. {3:~ }|
  631. {3:~ }|
  632. {3:~ }|
  633. {3:~ }|
  634. {3:~ }|
  635. {3:~ }|
  636. |
  637. ]]}
  638. end)
  639. it('can edit new empty buffer #19458', function()
  640. insert [[
  641. some
  642. goofy
  643. text]]
  644. screen:expect{grid=[[
  645. {1:foo }|
  646. some |
  647. goofy |
  648. tex^t |
  649. {3:~ }|
  650. {3:~ }|
  651. {3:~ }|
  652. {3:~ }|
  653. {3:~ }|
  654. |
  655. ]]}
  656. -- this used to throw an E315 ml_get error
  657. command 'tabedit'
  658. screen:expect{grid=[[
  659. {4: + [No Name] }{1: [No Name] }{2: }{4:X}|
  660. ^ |
  661. {3:~ }|
  662. {3:~ }|
  663. {3:~ }|
  664. {3:~ }|
  665. {3:~ }|
  666. {3:~ }|
  667. {3:~ }|
  668. |
  669. ]]}
  670. command 'tabprev'
  671. screen:expect{grid=[[
  672. {1: + [No Name] }{4: [No Name] }{2: }{4:X}|
  673. {1:foo }|
  674. some |
  675. goofy |
  676. tex^t |
  677. {3:~ }|
  678. {3:~ }|
  679. {3:~ }|
  680. {3:~ }|
  681. |
  682. ]]}
  683. end)
  684. end)
  685. it('winbar works properly when redrawing is postponed #23534', function()
  686. clear({args = {
  687. '-c', 'set laststatus=2 lazyredraw',
  688. '-c', 'setlocal statusline=(statusline) winbar=(winbar)',
  689. '-c', 'call nvim_input(":<Esc>")',
  690. }})
  691. local screen = Screen.new(60, 6)
  692. screen:attach()
  693. screen:set_default_attr_ids({
  694. [0] = {foreground = Screen.colors.Blue, bold = true},
  695. [1] = {bold = true},
  696. [2] = {bold = true, reverse = true},
  697. })
  698. screen:expect([[
  699. {1:(winbar) }|
  700. ^ |
  701. {0:~ }|
  702. {0:~ }|
  703. {2:(statusline) }|
  704. |
  705. ]])
  706. end)