From f2f6dce0cc708ebea904ed471849e1d62a19cf96 Mon Sep 17 00:00:00 2001
From: hrsh7th <hrsh7th@gmail.com>
Date: Tue, 11 Jan 2022 02:13:43 +0900
Subject: [PATCH] Use manual key conversion logic

---
 lua/cmp/utils/keymap.lua      | 4 +++-
 lua/cmp/utils/keymap_spec.lua | 6 ++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/lua/cmp/utils/keymap.lua b/lua/cmp/utils/keymap.lua
index d1088702a..daf9b0db8 100644
--- a/lua/cmp/utils/keymap.lua
+++ b/lua/cmp/utils/keymap.lua
@@ -7,7 +7,9 @@ local keymap = {}
 ---@param keys string
 ---@return string
 keymap.t = function(keys)
-  return vim.api.nvim_replace_termcodes(keys, true, true, true)
+  return (string.gsub(keys, '(<[A-Za-z0-9_%-%[%]%^@]->)', function(match)
+    return vim.api.nvim_eval(string.format([["\%s"]], match))
+  end))
 end
 
 ---Normalize key sequence.
diff --git a/lua/cmp/utils/keymap_spec.lua b/lua/cmp/utils/keymap_spec.lua
index 2c6acbfac..fc91c3e76 100644
--- a/lua/cmp/utils/keymap_spec.lua
+++ b/lua/cmp/utils/keymap_spec.lua
@@ -6,6 +6,12 @@ local keymap = require('cmp.utils.keymap')
 describe('keymap', function()
   before_each(spec.before)
 
+  it('t', function()
+    assert.are.equal(keymap.t('<Tab>'), vim.api.nvim_replace_termcodes('<Tab>', true, true, true))
+    assert.are.equal(keymap.t('<C-g>u'), vim.api.nvim_replace_termcodes('<C-g>u', true, true, true))
+    assert.are.equal(keymap.t('<Cmd>aiueo<CR>'), vim.api.nvim_replace_termcodes('<Cmd>aiueo<CR>', true, true, true))
+  end)
+
   it('to_keymap', function()
     assert.are.equal(keymap.to_keymap('\n'), '<CR>')
     assert.are.equal(keymap.to_keymap('<CR>'), '<CR>')