fix(api): consider multibyte characters in get_screen_cursor (cmdline) (#1352)
* fix(api): consider multibyte characters in get_screen_cursor (cmdline) * style: format with stylua * test: tell luacheck that it is intended unreachable code
This commit is contained in:
@@ -125,7 +125,7 @@ core.on_keymap = function(self, keys, fallback)
|
|||||||
}, function()
|
}, function()
|
||||||
local ctx = self:get_context()
|
local ctx = self:get_context()
|
||||||
local word = e:get_word()
|
local word = e:get_word()
|
||||||
if string.sub(ctx.cursor_before_line, - #word, ctx.cursor.col - 1) == word and is_printable then
|
if string.sub(ctx.cursor_before_line, -#word, ctx.cursor.col - 1) == word and is_printable then
|
||||||
fallback()
|
fallback()
|
||||||
else
|
else
|
||||||
self:reset()
|
self:reset()
|
||||||
@@ -381,7 +381,7 @@ core.confirm = function(self, e, option, callback)
|
|||||||
-- This logic must be used nvim_buf_set_text.
|
-- This logic must be used nvim_buf_set_text.
|
||||||
-- If not used, the snippet engine's placeholder wil be broken.
|
-- If not used, the snippet engine's placeholder wil be broken.
|
||||||
vim.api.nvim_buf_set_text(0, e.context.cursor.row - 1, e:get_offset() - 1, ctx.cursor.row - 1, ctx.cursor.col - 1, {
|
vim.api.nvim_buf_set_text(0, e.context.cursor.row - 1, e:get_offset() - 1, ctx.cursor.row - 1, ctx.cursor.col - 1, {
|
||||||
e.context.cursor_before_line:sub(e:get_offset())
|
e.context.cursor_before_line:sub(e:get_offset()),
|
||||||
})
|
})
|
||||||
vim.api.nvim_win_set_cursor(0, { e.context.cursor.row, e.context.cursor.col - 1 })
|
vim.api.nvim_win_set_cursor(0, { e.context.cursor.row, e.context.cursor.col - 1 })
|
||||||
end
|
end
|
||||||
@@ -444,7 +444,7 @@ core.confirm = function(self, e, option, callback)
|
|||||||
if api.is_insert_mode() then
|
if api.is_insert_mode() then
|
||||||
if false then
|
if false then
|
||||||
--To use complex expansion debug.
|
--To use complex expansion debug.
|
||||||
vim.pretty_print({
|
vim.pretty_print({ -- luacheck: ignore
|
||||||
diff_before = diff_before,
|
diff_before = diff_before,
|
||||||
diff_after = diff_after,
|
diff_after = diff_after,
|
||||||
new_text = new_text,
|
new_text = new_text,
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ end
|
|||||||
api.get_screen_cursor = function()
|
api.get_screen_cursor = function()
|
||||||
if api.is_cmdline_mode() then
|
if api.is_cmdline_mode() then
|
||||||
local cursor = api.get_cursor()
|
local cursor = api.get_cursor()
|
||||||
return { cursor[1], cursor[2] + 1 }
|
return { cursor[1], vim.fn.strdisplaywidth(string.sub(vim.fn.getcmdline(), 1, cursor[2] + 1)) }
|
||||||
end
|
end
|
||||||
local cursor = api.get_cursor()
|
local cursor = api.get_cursor()
|
||||||
local pos = vim.fn.screenpos(0, cursor[1], cursor[2] + 1)
|
local pos = vim.fn.screenpos(0, cursor[1], cursor[2] + 1)
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ local feedkeys = require('cmp.utils.feedkeys')
|
|||||||
local api = require('cmp.utils.api')
|
local api = require('cmp.utils.api')
|
||||||
|
|
||||||
describe('api', function()
|
describe('api', function()
|
||||||
|
before_each(spec.before)
|
||||||
describe('get_cursor', function()
|
describe('get_cursor', function()
|
||||||
before_each(spec.before)
|
|
||||||
it('insert-mode', function()
|
it('insert-mode', function()
|
||||||
local cursor
|
local cursor
|
||||||
feedkeys.call(keymap.t('i\t1234567890'), 'nx', function()
|
feedkeys.call(keymap.t('i\t1234567890'), 'nx', function()
|
||||||
@@ -24,8 +24,26 @@ describe('api', function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('get_screen_cursor', function()
|
||||||
|
it('insert-mode', function()
|
||||||
|
local screen_cursor
|
||||||
|
feedkeys.call(keymap.t('iあいうえお'), 'nx', function()
|
||||||
|
screen_cursor = api.get_screen_cursor()
|
||||||
|
end)
|
||||||
|
assert.are.equal(10, screen_cursor[2])
|
||||||
|
end)
|
||||||
|
it('cmdline-mode', function()
|
||||||
|
local screen_cursor
|
||||||
|
keymap.set_map(0, 'c', '<Plug>(cmp-spec-spy)', function()
|
||||||
|
screen_cursor = api.get_screen_cursor()
|
||||||
|
end, { expr = true, noremap = true })
|
||||||
|
feedkeys.call(keymap.t(':あいうえお'), 'n')
|
||||||
|
feedkeys.call(keymap.t('<Plug>(cmp-spec-spy)'), 'x')
|
||||||
|
assert.are.equal(10, screen_cursor[2])
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
describe('get_cursor_before_line', function()
|
describe('get_cursor_before_line', function()
|
||||||
before_each(spec.before)
|
|
||||||
it('insert-mode', function()
|
it('insert-mode', function()
|
||||||
local cursor_before_line
|
local cursor_before_line
|
||||||
feedkeys.call(keymap.t('i\t1234567890<Left><Left>'), 'nx', function()
|
feedkeys.call(keymap.t('i\t1234567890<Left><Left>'), 'nx', function()
|
||||||
|
|||||||
@@ -57,4 +57,3 @@ vim.api.nvim_create_user_command('CmpStatus', function()
|
|||||||
end, { desc = 'Check status of cmp sources' })
|
end, { desc = 'Check status of cmp sources' })
|
||||||
|
|
||||||
vim.cmd([[doautocmd <nomodeline> User CmpReady]])
|
vim.cmd([[doautocmd <nomodeline> User CmpReady]])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user