A Neovim plugin enabling you to solve LeetCode problems.
| 1 | local Renderer = require("leetcode-ui.renderer") |
| 2 | local NuiSplit = require("nui.split") |
| 3 | local config = require("leetcode.config") |
| 4 | local keys = config.user.keys |
| 5 | |
| 6 | local log = require("leetcode.logger") |
| 7 | |
| 8 | ---@class lc-ui.Split : NuiSplit |
| 9 | ---@field renderer lc.ui.Renderer |
| 10 | ---@field visible boolean |
| 11 | local Split = NuiSplit:extend("LeetSplit") |
| 12 | |
| 13 | |
| 14 | Split.super._open_window(self) |
| 15 | self:update_renderer() |
| 16 | end |
| 17 | |
| 18 | |
| 19 | Split.super._close_window(self) |
| 20 | self:update_renderer() |
| 21 | end |
| 22 | |
| 23 | |
| 24 | Split.super._buf_create(self) |
| 25 | self:update_renderer() |
| 26 | end |
| 27 | |
| 28 | |
| 29 | Split.super._buf_destory(self) |
| 30 | self:update_renderer() |
| 31 | end |
| 32 | |
| 33 | |
| 34 | if not self.visible then |
| 35 | self:show() |
| 36 | else |
| 37 | self:hide() |
| 38 | end |
| 39 | end |
| 40 | |
| 41 | |
| 42 | if not self._.mounted then |
| 43 | self:mount() |
| 44 | elseif not self.visible then |
| 45 | Split.super.show(self) |
| 46 | end |
| 47 | |
| 48 | self.visible = true |
| 49 | end |
| 50 | |
| 51 | |
| 52 | if not self.visible then |
| 53 | return |
| 54 | end |
| 55 | Split.super.hide(self) |
| 56 | |
| 57 | self.visible = false |
| 58 | end |
| 59 | |
| 60 | |
| 61 | Split.super.mount(self) |
| 62 | |
| 63 | self.visible = true |
| 64 | |
| 65 | self:map("n", keys.toggle, function() |
| 66 | self:toggle() |
| 67 | end) |
| 68 | end |
| 69 | |
| 70 | |
| 71 | self.renderer:map(...) |
| 72 | end |
| 73 | |
| 74 | |
| 75 | Split.super.unmount(self) |
| 76 | |
| 77 | self.visible = false |
| 78 | end |
| 79 | |
| 80 | |
| 81 | self.renderer:draw(self) |
| 82 | end |
| 83 | |
| 84 | |
| 85 | self.renderer:clear() |
| 86 | end |
| 87 | |
| 88 | |
| 89 | self.renderer.bufnr = self.bufnr |
| 90 | self.renderer.winid = self.winid |
| 91 | end |
| 92 | |
| 93 | -- |
| 94 | local options = vim.tbl_deep_extend("force", { |
| 95 | relative = "editor", |
| 96 | enter = false, |
| 97 | focusable = true, |
| 98 | }, opts or {}) |
| 99 | |
| 100 | self.renderer = self.renderer or Renderer() |
| 101 | self.visible = false |
| 102 | |
| 103 | Split.super.init(self, options) |
| 104 | end |
| 105 | |
| 106 | ---@type fun(opts?: nui_split_options): lc-ui.Split |
| 107 | local LeetSplit = Split |
| 108 | |
| 109 | return LeetSplit |