diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua index a4785b9..4ead68b 100644 --- a/nvim/lua/plugins/lsp.lua +++ b/nvim/lua/plugins/lsp.lua @@ -62,6 +62,31 @@ function M.setup() vim.diagnostic.config({ virtual_text = false }) + local function pause_diagnostic_float_until_move(bufnr) + vim.b[bufnr].pause_diagnostic_float = true + vim.api.nvim_create_autocmd({ "CursorMoved", "InsertEnter", "BufLeave" }, { + buffer = bufnr, + once = true, + callback = function() + vim.b[bufnr].pause_diagnostic_float = false + end, + }) + end + + local diag_float_group = vim.api.nvim_create_augroup("UserDiagnosticFloat", { clear = true }) + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + group = diag_float_group, + callback = function(ev) + if vim.b[ev.buf].pause_diagnostic_float then + return + end + vim.diagnostic.open_float(nil, { + focusable = false, + scope = "line", + }) + end, + }) + local function text_format(symbol) local fragments = {} @@ -118,7 +143,10 @@ function M.setup() end map("n", "gD", vim.lsp.buf.declaration, "LSP declaration") - map("n", "K", vim.lsp.buf.hover, "LSP hover") + map("n", "K", function() + pause_diagnostic_float_until_move(bufnr) + vim.lsp.buf.hover() + end, "LSP hover") map("n", "gi", vim.lsp.buf.implementation, "LSP implementation") map("n", "", vim.lsp.buf.signature_help, "LSP signature help") map("n", "wa", vim.lsp.buf.add_workspace_folder, "LSP add workspace folder") diff --git a/nvim/lua/settings/keymaps.lua b/nvim/lua/settings/keymaps.lua index 9ca8239..2156e48 100644 --- a/nvim/lua/settings/keymaps.lua +++ b/nvim/lua/settings/keymaps.lua @@ -3,12 +3,6 @@ vim.keymap.set("n", "E", "Ex", { desc = "Open netrw" }) vim.keymap.set("n", "ER", "bw", { desc = "Close buffer" }) vim.keymap.set("n", "sr", ":cd %:p:h", { desc = "Set cwd to file dir" }) --- split navigation -vim.keymap.set("n", "", "h") -vim.keymap.set("n", "", "j") -vim.keymap.set("n", "", "k") -vim.keymap.set("n", "", "l") - -- netrw duplicate helper (d) vim.api.nvim_create_autocmd("FileType", { pattern = "netrw", @@ -26,6 +20,12 @@ vim.api.nvim_create_autocmd("FileType", { end, }) +-- split navigation +vim.keymap.set("n", "", "h") +vim.keymap.set("n", "", "j") +vim.keymap.set("n", "", "k") +vim.keymap.set("n", "", "l") + -- buffer history (per-tab) local hist_by_tab = {} local navigating = false @@ -163,3 +163,13 @@ vim.keymap.set("n", "x", function() end end end, { desc = "Close floating windows" }) + +-- Map Ctrl + Left Click to open the link under the cursor +vim.keymap.set("n", "", function() + -- Get the word/URL under the mouse click + local cursor_pos = vim.fn.getmousepos() + vim.api.nvim_win_set_cursor(cursor_pos.winid, {cursor_pos.line, cursor_pos.column - 1}) + + -- Trigger the native open function + vim.ui.open(vim.fn.expand("")) +end, { desc = "Open link under cursor with Ctrl+Click" })