diff --git a/lua/core/mappings.lua b/lua/core/mappings.lua index b7c10ed..bc804fa 100644 --- a/lua/core/mappings.lua +++ b/lua/core/mappings.lua @@ -147,7 +147,7 @@ M.lspconfig = { ["ra"] = { function() - vim.lsp.buf.rename() + vim.lsp.buf.rename.float() end, " lsp rename", }, diff --git a/lua/plugins/configs/others.lua b/lua/plugins/configs/others.lua index ee76225..3447d53 100644 --- a/lua/plugins/configs/others.lua +++ b/lua/plugins/configs/others.lua @@ -196,6 +196,63 @@ M.lsp_handlers = function() vim.api.nvim_echo({ { msg } }, true, {}) end end + + -- credits to @Malace : https://www.reddit.com/r/neovim/comments/ql4iuj/rename_hover_including_window_title_and/ + -- This is modified version of the above snippet + vim.lsp.buf.rename = { + float = function() + local currName = vim.fn.expand "" + + local win = require("plenary.popup").create(" ", { + title = currName, + style = "minimal", + borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, + relative = "cursor", + borderhighlight = "RenamerBorder", + titlehighlight = "RenamerTitle", + focusable = true, + width = 25, + height = 1, + line = "cursor+2", + col = "cursor-1", + }) + + local map_opts = { noremap = true, silent = true } + + vim.cmd "startinsert" + + vim.api.nvim_buf_set_keymap(0, "i", "", "stopinsert | q!", map_opts) + vim.api.nvim_buf_set_keymap(0, "n", "", "stopinsert | q!", map_opts) + + vim.api.nvim_buf_set_keymap( + 0, + "i", + "", + "stopinsert | lua vim.lsp.buf.rename.apply(" .. currName .. "," .. win .. ")", + map_opts + ) + + vim.api.nvim_buf_set_keymap( + 0, + "n", + "", + "stopinsert | lua vim.lsp.buf.rename.apply(" .. currName .. "," .. win .. ")", + map_opts + ) + end, + + apply = function(curr, win) + local newName = vim.trim(vim.fn.getline ".") + vim.api.nvim_win_close(win, true) + + if #newName > 0 and newName ~= curr then + local params = vim.lsp.util.make_position_params() + params.newName = newName + + vim.lsp.buf_request(0, "textDocument/rename", params) + end + end, + } end M.gitsigns = function()