A Neovim plugin enabling you to solve LeetCode problems.
feat: `open_buffer`
1 file changed, +16 -21
+16-21lua/leetcode-ui/question.lua
| @@ -34,7 +34,9 @@ function Question:set_lines(code) | ||
| 34 | 34 | if not vim.api.nvim_buf_is_valid(self.bufnr) then return end |
| 35 | 35 | |
| 36 | 36 | pcall(vim.cmd.undojoin) |
| 37 | - local s_i, e_i = self:range() | |
| 37 | + local s_i, e_i, lines = self:range() | |
| 38 | + s_i = s_i or 1 | |
| 39 | + e_i = e_i or #lines | |
| 38 | 40 | code = code and code or (self:snippet(true) or "") |
| 39 | 41 | vim.api.nvim_buf_set_lines(self.bufnr, s_i - 1, e_i, false, vim.split(code, "\n")) |
| 40 | 42 | end |
| @@ -51,7 +53,7 @@ function Question:reset_lines() | ||
| 51 | 53 | self:set_lines(new_lines) |
| 52 | 54 | end |
| 53 | 55 | |
| 54 | ----@return string path, boolean? existed | |
| 56 | +---@return string path, boolean existed | |
| 55 | 57 | function Question:path() |
| 56 | 58 | local lang = utils.get_lang(self.lang) |
| 57 | 59 | local alt = lang.alt and ("." .. lang.alt) or "" |
| @@ -85,6 +87,12 @@ function Question:create_buffer() | ||
| 85 | 87 | self.bufnr = vim.api.nvim_get_current_buf() |
| 86 | 88 | self.winid = vim.api.nvim_get_current_win() |
| 87 | 89 | |
| 90 | + self:open_buffer(existed, false) | |
| 91 | +end | |
| 92 | + | |
| 93 | +---@param existed boolean | |
| 94 | +---@param loaded boolean | |
| 95 | +function Question:open_buffer(existed, loaded) | |
| 88 | 96 | vim.api.nvim_set_option_value("buflisted", true, { buf = self.bufnr }) |
| 89 | 97 | |
| 90 | 98 | local i = self:fold_range() |
| @@ -95,6 +103,11 @@ function Question:create_buffer() | ||
| 95 | 103 | if existed then -- |
| 96 | 104 | self:reset_lines() |
| 97 | 105 | end |
| 106 | + | |
| 107 | + if not loaded then | |
| 108 | + utils.exec_hook("question_enter", self) | |
| 109 | + self:autocmds() | |
| 110 | + end | |
| 98 | 111 | end |
| 99 | 112 | |
| 100 | 113 | ---@param before boolean |
| @@ -180,14 +193,10 @@ function Question:handle_mount() | ||
| 180 | 193 | |
| 181 | 194 | table.insert(_Lc_questions, self) |
| 182 | 195 | |
| 183 | - self:autocmds() | |
| 184 | - | |
| 185 | 196 | self.description = Description(self):mount() |
| 186 | 197 | self.console = Console(self) |
| 187 | 198 | self.info = Info(self) |
| 188 | 199 | |
| 189 | - utils.exec_hook("question_enter", self) | |
| 190 | - | |
| 191 | 200 | return self |
| 192 | 201 | end |
| 193 | 202 | |
| @@ -275,22 +284,8 @@ Question.change_lang = vim.schedule_wrap(function(self, lang) | ||
| 275 | 284 | vim.api.nvim_win_set_buf(self.winid, self.bufnr) |
| 276 | 285 | |
| 277 | 286 | vim.api.nvim_set_option_value("buflisted", false, { buf = old_bufnr }) |
| 278 | - vim.api.nvim_set_option_value("buflisted", true, { buf = self.bufnr }) | |
| 279 | 287 | |
| 280 | - local i = self:fold_range() | |
| 281 | - if i then -- | |
| 282 | - pcall(vim.cmd, ("%d,%dfold"):format(1, i)) | |
| 283 | - end | |
| 284 | - | |
| 285 | - if existed then -- | |
| 286 | - self:reset_lines() | |
| 287 | - end | |
| 288 | - | |
| 289 | - if not loaded then -- | |
| 290 | - utils.exec_hook("question_enter", self) | |
| 291 | - end | |
| 292 | - | |
| 293 | - self:autocmds() | |
| 288 | + self:open_buffer(existed, loaded) | |
| 294 | 289 | end) |
| 295 | 290 | |
| 296 | 291 | if not ok then |