Fix #89
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
local misc = require('cmp.utils.misc')
|
local misc = require('cmp.utils.misc')
|
||||||
|
local str = require('cmp.utils.str')
|
||||||
local cache = require('cmp.utils.cache')
|
local cache = require('cmp.utils.cache')
|
||||||
|
|
||||||
local keymap = {}
|
local keymap = {}
|
||||||
@@ -130,7 +131,7 @@ keymap.listen = setmetatable({
|
|||||||
existing = existing,
|
existing = existing,
|
||||||
callback = callback,
|
callback = callback,
|
||||||
})
|
})
|
||||||
vim.api.nvim_buf_set_keymap(0, mode, keys, ('v:lua.cmp.utils.keymap.expr("%s", "%s")'):format(mode, keymap.escape(keys)), {
|
vim.api.nvim_buf_set_keymap(0, mode, keys, ('v:lua.cmp.utils.keymap.expr("%s", "%s")'):format(mode, str.escape(keymap.escape(keys), { '"' })), {
|
||||||
expr = true,
|
expr = true,
|
||||||
nowait = true,
|
nowait = true,
|
||||||
noremap = true,
|
noremap = true,
|
||||||
|
|||||||
@@ -156,6 +156,26 @@ str.oneline = function(text)
|
|||||||
return text
|
return text
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---Escape special chars
|
||||||
|
---@param text string
|
||||||
|
---@param chars string[]
|
||||||
|
---@return string
|
||||||
|
str.escape = function(text, chars)
|
||||||
|
table.insert(chars, '\\')
|
||||||
|
local escaped = {}
|
||||||
|
local i = 1
|
||||||
|
while i <= #text do
|
||||||
|
local c = string.sub(text, i, i)
|
||||||
|
if vim.tbl_contains(chars, c) then
|
||||||
|
table.insert(escaped, '\\')
|
||||||
|
table.insert(escaped, c)
|
||||||
|
else
|
||||||
|
table.insert(escaped, c)
|
||||||
|
end
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
return table.concat(escaped, '')
|
||||||
|
end
|
||||||
|
|
||||||
return str
|
return str
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,13 @@ describe('utils.str', function()
|
|||||||
assert.are.equal(str.remove_suffix('log()${0:placeholder}', '${0}'), 'log()${0:placeholder}')
|
assert.are.equal(str.remove_suffix('log()${0:placeholder}', '${0}'), 'log()${0:placeholder}')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('escape', function()
|
||||||
|
assert.are.equal(str.escape('plain', {}), 'plain')
|
||||||
|
assert.are.equal(str.escape('plain\\', {}), 'plain\\\\')
|
||||||
|
assert.are.equal(str.escape('plain\\"', {}), 'plain\\\\"')
|
||||||
|
assert.are.equal(str.escape('pla"in', { '"' }), 'pla\\"in')
|
||||||
|
end)
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user