From 9f6f878fb7d3d612bfe0b0038704c66e549e9225 Mon Sep 17 00:00:00 2001 From: sudacode Date: Sun, 16 Feb 2025 20:11:07 -0800 Subject: [PATCH] update --- lazy-lock.json | 3 +- lua/core/keymaps.lua | 132 ++++++++++++++++++-------------- lua/core/lsp-notifications.lua | 24 +++--- lua/extensions/telescope.lua | 1 + lua/plugins/telescope.lua | 11 +++ lua/util/open-docs-in-split.lua | 44 +++++++++++ 6 files changed, 148 insertions(+), 67 deletions(-) create mode 100644 lua/util/open-docs-in-split.lua diff --git a/lazy-lock.json b/lazy-lock.json index 5c4187b..c425466 100644 --- a/lazy-lock.json +++ b/lazy-lock.json @@ -10,7 +10,7 @@ "cmp-nvim-lsp-document-symbol": { "branch": "main", "commit": "f94f7ba948e32cd302caba1c2ca3f7c697fb4fcf" }, "cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "031e6ba70b0ad5eee49fd2120ff7a2e325b17fa7" }, "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, - "codecompanion.nvim": { "branch": "main", "commit": "0a28b6147d77cac6029da8f751454ce6a65473b2" }, + "codecompanion.nvim": { "branch": "main", "commit": "1d6a26b1bb9e3b194d602c1ca7b9582e9f4b0b21" }, "copilot-cmp": { "branch": "master", "commit": "15fc12af3d0109fa76b60b5cffa1373697e261d1" }, "copilot-lualine": { "branch": "main", "commit": "dc4b8ed0f75bc2557b3158c526624bf04ad233ea" }, "copilot.lua": { "branch": "master", "commit": "30321e33b03cb924fdcd6a806a0dc6fa0b0eafb9" }, @@ -50,6 +50,7 @@ "telescope-file-browser.nvim": { "branch": "master", "commit": "626998e5c1b71c130d8bc6cf7abb6709b98287bb" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "2a5ceff981501cff8f46871d5402cd3378a8ab6a" }, "telescope-glyph.nvim": { "branch": "master", "commit": "f63f01e129e71cc25b79637610674bbf0be5ce9d" }, + "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, "telescope.nvim": { "branch": "master", "commit": "78857db9e8d819d3cc1a9a7bdc1d39d127a36495" }, "toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" }, "vim-commentary": { "branch": "master", "commit": "64a654ef4a20db1727938338310209b6a63f60c9" }, diff --git a/lua/core/keymaps.lua b/lua/core/keymaps.lua index 611dd9e..0b2e817 100644 --- a/lua/core/keymaps.lua +++ b/lua/core/keymaps.lua @@ -1,35 +1,36 @@ local map = vim.keymap.set local Terminal = require("toggleterm.terminal").Terminal local notify = require("notify") +local dsplit = require("util.open-docs-in-split") local function term_factory(cfg) - cfg["on_stderr"] = function(_, job, data, name) - notify(name .. " encountered an error on job: " .. job .. "\nData: " .. data) - end - cfg["on_stdout"] = function(_, job, data, name) - notify(name .. " output for job" .. job .. "\nData: " .. data) - end - return Terminal:new(cfg) + cfg["on_stderr"] = function(_, job, data, name) + notify(name .. " encountered an error on job: " .. job .. "\nData: " .. data, "error") + end + cfg["on_stdout"] = function(_, job, data, name) + notify(name .. " output for job" .. job .. "\nData: " .. data, "info") + end + return Terminal:new(cfg) end local function term_toggle(term) - term:toggle() + term:toggle() end local opts = { silent = true, noremap = true } local notsilent = { silent = false, noremap = true } local function ReloadConfig() - dofile(vim.fn.stdpath("config") .. "/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/keymaps.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/autocmds.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/options.lua") - dofile(vim.fn.stdpath("config") .. "/lua/core/plugins.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/toggleterm.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/ai/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/lsp/init.lua") - dofile(vim.fn.stdpath("config") .. "/lua/plugins/colorscheme/init.lua") + dofile(vim.fn.stdpath("config") .. "/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/keymaps.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/autocmds.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/options.lua") + dofile(vim.fn.stdpath("config") .. "/lua/core/plugins.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/ui/toggleterm.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/ai/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/lsp/init.lua") + dofile(vim.fn.stdpath("config") .. "/lua/plugins/colorscheme/init.lua") end -- Leader key @@ -47,8 +48,8 @@ vim.api.nvim_create_user_command("Keymaps", "edit ~/.config/nvim/lua/core/keymap map("n", "", "zz", opts) map("n", "n", "nzzzv", opts) map("n", "N", "Nzzzv", opts) -map("x", "p", '"_dP', opts) -- paste without yanking -map("v", "<", "p", '"_dP', opts) -- paste without yanking +map("v", "<", "", ">gv", opts) map("v", "J", ":m '>+1gv=gv", opts) -- move lines map("v", "K", ":m '<-2gv=gv", opts) @@ -66,18 +67,18 @@ map("n", "bp", ":bprev", opts) --{{{ Terminal mappings local programs_map = { - gg = { cmd = "lazygit", display_name = "lazygit", direction = "tab", hidden = true }, - op = { cmd = "ipython", display_name = "ipython", direction = "vertical", hidden = true }, - oP = { cmd = "ipython", display_name = "ipython-full", direction = "tab", hidden = true }, - on = { cmd = "ncmpcpp", display_name = "ncmpcpp", direction = "tab", hidden = true }, - ob = { cmd = "btop", display_name = "btop", direction = "tab", hidden = true }, - od = { cmd = "lazydocker", display_name = "lazydocker", direction = "tab", hidden = true }, + gg = { cmd = "lazygit", display_name = "lazygit", direction = "tab", hidden = true }, + op = { cmd = "ipython", display_name = "ipython", direction = "vertical", hidden = true }, + oP = { cmd = "ipython", display_name = "ipython-full", direction = "tab", hidden = true }, + on = { cmd = "ncmpcpp", display_name = "ncmpcpp", direction = "tab", hidden = true }, + ob = { cmd = "btop", display_name = "btop", direction = "tab", hidden = true }, + od = { cmd = "lazydocker", display_name = "lazydocker", direction = "tab", hidden = true }, } for key, value in pairs(programs_map) do - map("n", "" .. key, function() - term_toggle(term_factory(value)) - end, opts) + map("n", "" .. key, function() + term_toggle(term_factory(value)) + end, opts) end map("v", "op", ":ToggleTerm name=ipython") @@ -98,10 +99,10 @@ map("n", "-", ":ToggleTerm direction='horizontal'", opts) map("n", "|", ":ToggleTerm direction='vertical'", opts) function _G.set_terminal_keymaps() - local opts = { buffer = 0 } - map("t", "", [[]], opts) - map("t", "", [[]], opts) - -- map("t", "", "", { buffer = 0, silent = true }) -- fix space in terminal + local opts = { buffer = 0 } + map("t", "", [[]], opts) + map("t", "", [[]], opts) + -- map("t", "", "", { buffer = 0, silent = true }) -- fix space in terminal end -- if you only want these mappings for toggle term use term://*toggleterm#* instead @@ -122,6 +123,7 @@ map("n", "gl", vim.lsp.codelens.run, opts) map("n", "gr", ":Telescope lsp_references", opts) map("n", "gs", vim.lsp.buf.signature_help, opts) map("n", "K", vim.lsp.buf.hover, opts) +map("n", "kv", dsplit, opts) map("n", "cd", ":Telescope lsp_definitions") map("n", "ca", vim.lsp.buf.code_action) map("n", "cci", ":Telescope lsp_incoming_calls") @@ -133,11 +135,12 @@ map("n", "cR", ":lua vim.lsp.buf.rename()") map("n", "cs", ":Telescope lsp_document_symbols") map("n", "ct", ":Telescope lsp_type_definitions") map("n", "cw", ":Telescope lsp_dynamic_workspace_symbols") -map("n", "cd", ":Telescope diagnostics") -map("n", "cDs", ":Telescope diagnostics") +map("n", "cd", ":Telescope diagnostics theme=dropdown layout_config={width=0.8}") +map("n", "cDs", ":Telescope diagnostics theme=dropdown layout_config={width=0.8}") map("n", "cDn", ":lua vim.diagnostic.goto_next()") map("n", "cDp", ":lua vim.diagnostic.goto_prev()") map("n", "cl", ":lua vim.diagnostic.setloclist()") +map("n", "cH", open_doc_in_vsplit, opts) --}}} --{{{ Code Companion and Copilot @@ -157,30 +160,43 @@ map("v", "Ct", ":CodeCompanion /tests", notsilent) --{{{ Telescope mappings -- {{{ Telescope Finders -map("n", "//", ":Telescope current_buffer_fuzzy_find", opts) -map("n", "??", ":Telescope lsp_document_symbols", opts) +map("n", "//", ":Telescope current_buffer_fuzzy_find previewer=false", opts) +map("n", "??", ":Telescope lsp_document_symbols theme=dropdown layout_config={width=0.5}", opts) map( - "n", - "fc", - ':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical', - opts + "n", + "fc", + ':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical', + opts ) --- map('n', 'ob', ':Telescope file_browser') map( - "n", - "ff", - ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍", - opts + "n", + "Tc", + ':Telescope color_names theme=dropdown layout_config={width=0.45,height=25,prompt_position="bottom"} layout_strategy=vertical', + opts +) +map("n", "Tn", ":Telescope notify theme=dropdown layout_config={width=0.75}", opts) + +map( + "n", + "ff", + ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍", + opts ) map("n", "fg", ":Telescope live_grep", opts) map( - "n", - "fG", - ':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical', - opts + "n", + "Tg", + ':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical', + opts +) +map( + "n", + "fG", + ':Telescope glyph theme=dropdown layout_config={width=0.45,height=35,prompt_position="bottom"} layout_strategy=vertical', + opts ) map("n", "fb", ":Telescope file_browser", opts) -map("n", "fr", ":Telescope oldfiles", opts) +map("n", "fr", ":Telescope oldfiles theme=dropdown layout_config={width=0.5}", opts) -- }}} --{{{ Telescope Help @@ -188,15 +204,15 @@ map("n", "hc", ":Telescope commands") map("n", "hv", ":Telescope vim_options") map("n", "hk", ":Telescope keymaps") map("n", "hs", ":Telescope spell_suggest") -map("n", "hm", ":Telescope man_pages") +map("n", "hm", ":Telescope man_pages theme=dropdown layout_config={width=0.75}") --}}} --{{{ Telescope Search map( - "n", - "sf", - ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍", - opts + "n", + "sf", + ":Telescope find_files find_command=rg,--ignore,--follow,--hidden,--files prompt_prefix=🔍", + opts ) map("n", "sF", ":Telescope fidget") map("n", "sg", ":Telescope live_grep") @@ -210,6 +226,8 @@ map("n", "gc", ":Telescope git_commits", opts) map("n", "gf", ":Telescope git_files", opts) --}}} +map("n", "Tr", ":Telescope reloader", opts) + map("n", "Q", ":Telescope cmdline", opts) map("n", "", ":Telescope cmdline", opts) --}}} @@ -236,6 +254,6 @@ map("n", "gpi", ':lua require("goto-preview").goto_preview_implementation()' map("n", "wa", vim.lsp.buf.add_workspace_folder, opts) map("n", "wr", vim.lsp.buf.remove_workspace_folder, opts) map("n", "wl", function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) --}}} diff --git a/lua/core/lsp-notifications.lua b/lua/core/lsp-notifications.lua index f59158c..926fa1c 100644 --- a/lua/core/lsp-notifications.lua +++ b/lua/core/lsp-notifications.lua @@ -86,13 +86,19 @@ vim.lsp.handlers["$/progress"] = function(_, result, ctx) end end --- table from lsp severity to vim severity. -local severity = { - "error", - "warn", - "info", - "info", -- map both hint and info to info? -} -vim.lsp.handlers["window/showMessage"] = function(err, method, params, client_id) - vim.notify(method.message, severity[params.type]) +vim.lsp.handlers["window/showMessage"] = function(err, result, ctx) + local client = vim.lsp.get_client_by_id(ctx.client_id) + local lvl = ({ + "ERROR", + "WARN", + "INFO", + "DEBUG", + })[result.type] + vim.notify("LSP Message: " .. result.message, lvl, { + title = "LSP | " .. client.name, + timeout = 5000, + keep = function() + return lvl == "ERROR" or lvl == "WARN" + end, + }) end diff --git a/lua/extensions/telescope.lua b/lua/extensions/telescope.lua index 3c84504..a683a40 100644 --- a/lua/extensions/telescope.lua +++ b/lua/extensions/telescope.lua @@ -6,3 +6,4 @@ ts.load_extension("color_names") ts.load_extension("cmdline") ts.load_extension("file_browser") ts.load_extension("codecompanion") +ts.load_extension("ui-select") diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua index 1fc0fdc..a9daa73 100644 --- a/lua/plugins/telescope.lua +++ b/lua/plugins/telescope.lua @@ -6,6 +6,7 @@ return { "nat-418/telescope-color-names.nvim", "nvim-telescope/telescope-file-browser.nvim", "ghassan0/telescope-glyph.nvim", + "nvim-telescope/telescope-ui-select.nvim", { "nvim-telescope/telescope-fzf-native.nvim", build = "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release", @@ -40,6 +41,7 @@ return { -- actions.which_key shows the mappings for your picker, -- e.g. git_{create, delete, ...}_branch for the git_branches picker [""] = "which_key", + ["") + if word == "" then + vim.notify("No word under cursor", vim.log.levels.INFO) + return + end + + -- Try to get LSP hover documentation + local params = vim.lsp.util.make_position_params() + local results = vim.lsp.buf_request_sync(0, "textDocument/hover", params, 1000) or {} + local doc_lines = nil + + for _, res in pairs(results) do + local contents = res.result and res.result.contents + if contents then + doc_lines = vim.lsp.util.convert_input_to_markdown_lines(contents) + doc_lines = vim.lsp.util.trim_empty_lines(doc_lines) + if #doc_lines > 0 then + break + end + end + end + + if doc_lines and #doc_lines > 0 then + -- Open a new vertical split for LSP hover documentation + vim.cmd("vnew") + local bufnr = vim.api.nvim_get_current_buf() + -- Set the buffer to unmodifiable scratch buffer + vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, doc_lines) + vim.bo[bufnr].modifiable = false + vim.bo[bufnr].bufhidden = "wipe" + vim.bo[bufnr].filetype = "markdown" + return + end + + -- Fallback to vim help command + local help_cmd = "vertical help " .. word + local ok, _ = pcall(vim.cmd, help_cmd) + if not ok then + vim.notify("No documentation available for '" .. word .. "'", vim.log.levels.INFO) + end +end + +return open_doc_in_vsplit