diff options
author | luukvbaal <31730729+luukvbaal@users.noreply.github.com> | 2023-04-10 02:39:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-10 08:39:27 +0800 |
commit | 3c724fe1f3efae0d00b43e381523ea2ec7229328 (patch) | |
tree | c80e59393401e1b809dc7d4db5b275c8d73966e8 | |
parent | d52cc668c736ef6ca7ee3655a7eb7fe6475afadc (diff) | |
download | rneovim-3c724fe1f3efae0d00b43e381523ea2ec7229328.tar.gz rneovim-3c724fe1f3efae0d00b43e381523ea2ec7229328.tar.bz2 rneovim-3c724fe1f3efae0d00b43e381523ea2ec7229328.zip |
fix(column): 'statuscolumn' not drawn after virt_lines with "n" in 'cpo' (#22967)
Problem: The 'statuscolumn' is not drawn and the line itself is drawn
at an offset to the rest of the buffer after virt_lines if
'cpoptions' includes "n".
Solution: Make sure 'statuscolumn' is drawn.
-rw-r--r-- | src/nvim/drawline.c | 15 | ||||
-rw-r--r-- | test/functional/ui/statuscolumn_spec.lua | 23 |
2 files changed, 31 insertions, 7 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c index a05fb4e08e..fcac837993 100644 --- a/src/nvim/drawline.c +++ b/src/nvim/drawline.c @@ -2967,16 +2967,17 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange, wlv.need_showbreak = true; } if (statuscol.draw) { - if (wlv.row == startrow + wlv.filler_lines + 1 - || wlv.row == startrow + wlv.filler_lines) { - // Re-evaluate 'statuscolumn' for the first wrapped row and non filler line - statuscol.textp = NULL; - } else if (statuscol.textp) { + if (wlv.row == startrow + wlv.filler_lines) { + statuscol.textp = NULL; // re-evaluate for first non-filler line + } else if (vim_strchr(p_cpo, CPO_NUMCOL) && wlv.row > startrow + wlv.filler_lines) { + statuscol.draw = false; // don't draw status column if "n" is in 'cpo' + } else if (wlv.row == startrow + wlv.filler_lines + 1) { + statuscol.textp = NULL; // re-evaluate for first wrapped line + } else { // Draw the already built 'statuscolumn' on the next wrapped or filler line statuscol.textp = statuscol.text; statuscol.hlrecp = statuscol.hlrec; - } // Fall back to default columns if the 'n' flag isn't in 'cpo' - statuscol.draw = vim_strchr(p_cpo, CPO_NUMCOL) == NULL; + } } wlv.filler_todo--; virt_line_offset = -1; diff --git a/test/functional/ui/statuscolumn_spec.lua b/test/functional/ui/statuscolumn_spec.lua index 0a253455ad..83c49e56a0 100644 --- a/test/functional/ui/statuscolumn_spec.lua +++ b/test/functional/ui/statuscolumn_spec.lua @@ -397,6 +397,29 @@ describe('statuscolumn', function() {0:~ }| | ]]) + -- Also test virt_lines when 'cpoptions' includes "n" + exec_lua([[ + vim.opt.cpoptions:append("n") + local ns = vim.api.nvim_create_namespace("ns") + 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([[ + {1:buffer 0 13}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| + aaaaaaaaa | + {1:buffer 0 14}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| + aaaaaaaaa | + {1:buffer 0 15}aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| + aaaaaaaaa | + {1:virtual-2 15}virt_line1 | + {1:virtual-2 15}virt_line2 | + {1:buffer 0 16}{5:^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa}| + {5:aaaaaaaaa }| + {1:virtual-1 16}END | + {0:~ }| + {0:~ }| + | + ]]) end) it("works with 'statuscolumn' clicks", function() |