irongit

A Neovim plugin enabling you to solve LeetCode problems.

feat: customize keys

kawreauthored
parent 67252a8commit 1d5bc261f8bc0039001623aa0565d3aeb0566892Browse files

11 files changed, +40 -30

+2-10lua/leetcode-ui/group/tag/init.lua
@@ -49,16 +49,8 @@ function Tag.normalize(text)
4949 "\n*<p><strong[^>]*>(Constraints:?)%s*</strong></p>\n*",
5050 "\n\n<constraints> %1</constraints>\n\n"
5151 )
52- -- :gsub("\n*<(img[^>]*)/>\n*", "\n\n<%1>img</img>\n\n")
53- :gsub(
54- "\n*(<img[^>]*/?>)\n*",
55- "\n\n%1\n\n"
56- )
57- -- :gsub("<pre>\n*(.-)\n*</pre>", "<pre>\n%1</pre>")
58- :gsub(
59- "\n*<p>&nbsp;</p>\n*",
60- "&lcpad;"
61- )
52+ :gsub("\n*(<img[^>]*/?>)\n*", "\n\n%1\n\n")
53+ :gsub("\n*<p>&nbsp;</p>\n*", "&lcpad;")
6254 :gsub("\n", "&lcnl;")
6355 :gsub("\t", "&lctab;")
6456 :gsub("%s", "&nbsp;")
+5-4lua/leetcode-ui/layout/console.lua
@@ -5,6 +5,7 @@ local Layout = require("leetcode-ui.layout")
55 local Popup = require("leetcode-ui.popup")
66
77 local config = require("leetcode.config")
8+local keys = config.user.keys
89 local Runner = require("leetcode.runner")
910 local log = require("leetcode.logger")
1011
@@ -43,10 +44,10 @@ function ConsoleLayout:mount()
4344 ConsoleLayout.super.mount(self)
4445
4546 self:set_keymaps({
46- ["r"] = function() self.testcase:reset() end,
47- ["U"] = function() self:use_testcase() end,
48- ["H"] = function() self.testcase:focus() end,
49- ["L"] = function() self.result:focus() end,
47+ [keys.reset_testcases] = function() self.testcase:reset() end,
48+ [keys.use_testcase] = function() self:use_testcase() end,
49+ [keys.focus_testcases] = function() self.testcase:focus() end,
50+ [keys.focus_result] = function() self.result:focus() end,
5051 })
5152 end
5253
+4-2lua/leetcode-ui/popup/console/result.lua
@@ -34,12 +34,14 @@ end
3434
3535 ---@param parent lc.ui.Console
3636 function ResultPopup:init(parent)
37+ local keys = require("leetcode.config").user.keys
38+
3739 ResultPopup.super.init(self, parent, {
3840 border = {
3941 text = {
40- top = (" (L) %s "):format(t("Result")),
42+ top = (" (%s) %s "):format(keys.focus_result, t("Result")),
4143 top_align = "center",
42- bottom = (" (U) %s "):format(t("Use Testcase")),
44+ bottom = (" (%s) %s "):format(keys.use_testcase, t("Use Testcase")),
4345 bottom_align = "center",
4446 },
4547 },
+4-2lua/leetcode-ui/popup/console/testcase.lua
@@ -151,13 +151,15 @@ end
151151
152152 ---@param parent lc.ui.Console
153153 function Testcase:init(parent)
154+ local keys = require("leetcode.config").user.keys
155+
154156 Testcase.super.init(self, parent, {
155157 enter = true,
156158 border = {
157159 text = {
158- top = (" (H) %s "):format(t("Testcases")),
160+ top = (" (%s) %s "):format(keys.focus_testcases, t("Testcases")),
159161 top_align = "center",
160- bottom = (" (r) %s "):format(t("Reset")),
162+ bottom = (" (%s) %s "):format(keys.reset_testcases, t("Reset")),
161163 bottom_align = "center",
162164 },
163165 },
+2-1lua/leetcode-ui/popup/info.lua
@@ -7,6 +7,7 @@ local SimilarQuestions = require("leetcode-ui.group.similar-questions")
77 local Parser = require("leetcode.parser")
88
99 local config = require("leetcode.config")
10+local keys = config.user.keys
1011 local utils = require("leetcode.utils")
1112 local log = require("leetcode.logger")
1213
@@ -103,7 +104,7 @@ function Info:populate()
103104
104105 tree:render()
105106
106- self:map("n", { "<Tab>", "<CR>" }, function()
107+ self:map("n", keys.confirm, function()
107108 local node = tree:get_node()
108109 if not node then return end
109110
+2-1lua/leetcode-ui/popup/init.lua
@@ -1,6 +1,7 @@
11 local NuiPopup = require("nui.popup")
22 local Renderer = require("leetcode-ui.renderer")
33 local config = require("leetcode.config")
4+local keys = config.user.keys
45
56 local log = require("leetcode.logger")
67
@@ -63,7 +64,7 @@ function Popup:mount()
6364 self.visible = true
6465
6566 self:on({ "BufLeave", "WinLeave" }, function() self:handle_leave() end)
66- self:map("n", { "q", "<Esc>" }, function() self:hide() end)
67+ self:map("n", keys.toggle, function() self:hide() end)
6768 end
6869
6970 function Popup:hide()
+2-4lua/leetcode-ui/question.lua
@@ -56,10 +56,6 @@ function Question:handle_mount()
5656 self:create_file()
5757 vim.cmd("$tabe " .. self.file:absolute())
5858
59- utils.exec_hooks("LeetQuestionNew", {
60- lang = self.lang,
61- })
62-
6359 -- https://github.com/kawre/leetcode.nvim/issues/14
6460 if self.lang == "rust" then pcall(require("rust-tools.standalone").start_standalone_client) end
6561
@@ -76,6 +72,8 @@ function Question:handle_mount()
7672 self.console = Console(self)
7773 self.info = Info(self)
7874
75+ utils.exec_hooks("LeetQuestionNew", self)
76+
7977 return self
8078 end
8179
+3-3lua/leetcode-ui/renderer/init.lua
@@ -1,6 +1,6 @@
1-local Padding = require("leetcode-ui.lines.padding")
2-local Opts = require("leetcode-ui.opts")
31 local Group = require("leetcode-ui.group")
2+local config = require("leetcode.config")
3+local keys = config.user.keys
44
55 local log = require("leetcode.logger")
66
@@ -24,7 +24,7 @@ function Renderer:draw(component)
2424 self.bufnr = component.bufnr
2525 self.winid = component.winid
2626
27- self:map("n", "<CR>", function() self:handle_press() end)
27+ self:map("n", keys.confirm, function() self:handle_press() end)
2828
2929 self:clear_keymaps()
3030 self._.buttons = {}
+3-1lua/leetcode-ui/split/init.lua
@@ -1,5 +1,7 @@
11 local Renderer = require("leetcode-ui.renderer")
22 local NuiSplit = require("nui.split")
3+local config = require("leetcode.config")
4+local keys = config.user.keys
35
46 local log = require("leetcode.logger")
57
@@ -58,7 +60,7 @@ function Split:mount()
5860
5961 self.visible = true
6062
61- self:map("n", { "q", "<Esc>" }, function() self:toggle() end)
63+ self:map("n", keys.toggle, function() self:toggle() end)
6264 end
6365
6466 function Split:map(...) self.renderer:map(...) end
+2-1lua/leetcode/command/init.lua
@@ -2,6 +2,7 @@ local log = require("leetcode.logger")
22 local arguments = require("leetcode.command.arguments")
33 local config = require("leetcode.config")
44 local event = require("nui.utils.autocmd").event
5+local keys = config.user.keys
56
67 local t = require("leetcode.translator")
78
@@ -70,7 +71,7 @@ function cmd.cookie_prompt(cb)
7071
7172 input:mount()
7273
73- input:map("n", { "<Esc>", "q" }, function() input:unmount() end)
74+ input:map("n", keys.toggle, function() input:unmount() end)
7475 input:on(event.BufLeave, function() input:unmount() end)
7576 end
7677
+11-1lua/leetcode/config/template.lua
@@ -94,12 +94,22 @@ local M = {
9494 ---@type fun()[]
9595 LeetEnter = {},
9696
97- ---@type fun(question: { lang: string })[]
97+ ---@type fun(question: lc.ui.Question)[]
9898 LeetQuestionNew = {},
9999 },
100100
101101 ---@type boolean
102102 image_support = false, -- setting this to `true` will disable question description wrap
103+
104+ keys = {
105+ toggle = { "q", "<Esc>" }, ---@type string|string[]
106+ confirm = { "<CR>" }, ---@type string|string[]
107+
108+ reset_testcases = "r", ---@type string
109+ use_testcase = "U", ---@type string
110+ focus_testcases = "H", ---@type string
111+ focus_result = "L", ---@type string
112+ },
103113 }
104114
105115 return M