From ec972710d39307ef10fa59545a088e6f2c93ef9d Mon Sep 17 00:00:00 2001 From: hrsh7th Date: Sat, 15 Jan 2022 22:48:24 +0900 Subject: [PATCH] Solve expression manually --- lua/cmp/utils/keymap.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lua/cmp/utils/keymap.lua b/lua/cmp/utils/keymap.lua index ab25ae4..b88c992 100644 --- a/lua/cmp/utils/keymap.lua +++ b/lua/cmp/utils/keymap.lua @@ -186,6 +186,8 @@ keymap.feed_map = function(map) rhs = keymap.t(map.rhs) end + rhs = keymap.expression(rhs) + if map.noremap then vim.api.nvim_feedkeys(rhs, 'itn', true) else @@ -225,4 +227,27 @@ misc.set(_G, { 'cmp', 'utils', 'keymap', 'set_map' }, function(id) return keymap.set_map.callbacks[id]() or '' end) +---Resolve expression. +---@param expr string +---@return string +keymap.expression = function(expr) + local spans = {} + local f = 0 + for i = 1, #expr do + local c = string.sub(expr, i, i) + if f == 0 and c == keymap.t('') then + f = i + end + if f ~= 0 and c == keymap.t('') then + table.insert(spans, { s = f, e = i }) + f = 0 + end + end + for i = #spans, 1, -1 do + local s, e = spans[i].s, spans[i].e + expr = string.sub(expr, 1, s - 1) .. keymap.expression(vim.api.nvim_eval(string.sub(expr, s + 2, e - 1))) .. string.sub(expr, e + 1) + end + return expr +end + return keymap