mirror of
https://github.com/neovim/neovim.git
synced 2026-04-30 11:14:10 +00:00
fix(lua): on_yank error with blockwise multibyte region #20162
Prevent out of range error when calling `str_byteindex`. Use `vim.str_byteindex(bufline, #bufline)` to cacluate utf length of `bufline`. fix #20161
This commit is contained in:
@@ -416,11 +416,16 @@ function vim.region(bufnr, pos1, pos2, regtype, inclusive)
|
||||
c2 = c1 + regtype:sub(2)
|
||||
-- and adjust for non-ASCII characters
|
||||
bufline = vim.api.nvim_buf_get_lines(bufnr, l, l + 1, true)[1]
|
||||
if c1 < #bufline then
|
||||
local utflen = vim.str_utfindex(bufline, #bufline)
|
||||
if c1 <= utflen then
|
||||
c1 = vim.str_byteindex(bufline, c1)
|
||||
else
|
||||
c1 = #bufline + 1
|
||||
end
|
||||
if c2 < #bufline then
|
||||
if c2 <= utflen then
|
||||
c2 = vim.str_byteindex(bufline, c2)
|
||||
else
|
||||
c2 = #bufline + 1
|
||||
end
|
||||
else
|
||||
c1 = (l == pos1[1]) and pos1[2] or 0
|
||||
|
||||
@@ -2227,13 +2227,19 @@ describe('lua stdlib', function()
|
||||
eq(true, exec_lua[[return vim.g.test]])
|
||||
end)
|
||||
|
||||
it('vim.region', function()
|
||||
insert(helpers.dedent( [[
|
||||
text tααt tααt text
|
||||
text tαxt txtα tex
|
||||
text tαxt tαxt
|
||||
]]))
|
||||
eq({5,15}, exec_lua[[ return vim.region(0,{1,5},{1,14},'v',true)[1] ]])
|
||||
describe('vim.region', function()
|
||||
it('charwise', function()
|
||||
insert(helpers.dedent( [[
|
||||
text tααt tααt text
|
||||
text tαxt txtα tex
|
||||
text tαxt tαxt
|
||||
]]))
|
||||
eq({5,15}, exec_lua[[ return vim.region(0,{1,5},{1,14},'v',true)[1] ]])
|
||||
end)
|
||||
it('blockwise', function()
|
||||
insert([[αα]])
|
||||
eq({0,5}, exec_lua[[ return vim.region(0,{0,0},{0,4},'3',true)[0] ]])
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('vim.on_key', function()
|
||||
|
||||
Reference in New Issue
Block a user