diff --git a/README.md b/README.md index b719a13..903fc3e 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,20 @@ local default_reference_config = { command_enable = true, } +--- @type LspUI_pos_keybind_config +local default_pos_keybind_config = { + main = { + back = "q", + hide_secondary = "h", + }, + secondary = { + jump = "o", + quit = "q", + hide_main = "h", + enter = "l", + }, +} + -- default config --- @type LspUI_config local default_config = { @@ -210,18 +224,7 @@ local default_config = { declaration = default_declaration_config, implemention = default_implemention_config, reference = default_reference_config, - pos_keybind = { - main = { - back = "q", - hide_secondary = "h", - }, - secondary = { - jump = "o", - quit = "q", - hide_main = "h", - enter = "l", - }, - }, + pos_keybind = default_pos_keybind_config, } ``` diff --git a/lua/LspUI/_meta.lua b/lua/LspUI/_meta.lua index 03ecefd..dc66f97 100644 --- a/lua/LspUI/_meta.lua +++ b/lua/LspUI/_meta.lua @@ -26,7 +26,7 @@ --- @field key_binding { prev: string?, next: string?, quit: string? }? keybind for `hover` -- this is just for some keybind like definition, type definition, declaration, reference, implemention ---- @alias pos_abstract_keybind { secondary: { jump: string?, quit:string?, hide_main:string?, enter: string? }?, main: { back: string?, hide_secondary: string? }? } +--- @alias LspUI_pos_keybind_config { secondary: { jump: string?, quit:string?, hide_main:string?, enter: string? }?, main: { back: string?, hide_secondary: string? }? } --- @class LspUI_definition_config --- @field enable boolean? whether enable `definition` module @@ -59,4 +59,4 @@ --- @field declaration LspUI_declaration_config? `declaration` module --- @field implemention LspUI_implemention_config? `implemention` module --- @field reference LspUI_reference_config? `reference` module ---- @field pos_keybind pos_abstract_keybind? keybind for `definition`, `type definition`, `declaration`, `reference`, implemention +--- @field pos_keybind LspUI_pos_keybind_config? keybind for `definition`, `type definition`, `declaration`, `reference`, implemention diff --git a/lua/LspUI/config.lua b/lua/LspUI/config.lua index 3ba9118..d3cf6ce 100644 --- a/lua/LspUI/config.lua +++ b/lua/LspUI/config.lua @@ -82,6 +82,20 @@ local default_reference_config = { command_enable = true, } +--- @type LspUI_pos_keybind_config +local default_pos_keybind_config = { + main = { + back = "q", + hide_secondary = "h", + }, + secondary = { + jump = "o", + quit = "q", + hide_main = "h", + enter = "l", + }, +} + -- default config --- @type LspUI_config local default_config = { @@ -95,18 +109,7 @@ local default_config = { declaration = default_declaration_config, implemention = default_implemention_config, reference = default_reference_config, - pos_keybind = { - main = { - back = "q", - hide_secondary = "h", - }, - secondary = { - jump = "o", - quit = "q", - hide_main = "h", - enter = "l", - }, - }, + pos_keybind = default_pos_keybind_config, } -- Prevent plugins from being initialized multiple times @@ -114,6 +117,8 @@ local is_already_init = false local M = {} +M.options = {} + -- LspUI plugin init function -- you need to pass a table --- @param config LspUI_config? @@ -133,16 +138,22 @@ end -- separate function for `rename` module --- @param rename_config LspUI_rename_config M.rename_setup = function(rename_config) - M.options.rename = - vim.tbl_deep_extend("force", default_rename_config, rename_config) + M.options.rename = vim.tbl_deep_extend( + "force", + M.options.rename or default_rename_config, + rename_config + ) end -- separate function for `lightbulb` module -- now this function can't use --- @param lightbulb_config LspUI_lightbulb_config M.lightbulb_setup = function(lightbulb_config) - M.options.lightbulb = - vim.tbl_deep_extend("force", default_lightbulb_config, lightbulb_config) + M.options.lightbulb = vim.tbl_deep_extend( + "force", + M.options.lightbulb or default_lightbulb_config, + lightbulb_config + ) vim.fn.sign_define( global.lightbulb.sign_name, { text = M.options.lightbulb.icon } @@ -154,7 +165,7 @@ end M.code_action_setup = function(code_action_config) M.options.code_action = vim.tbl_deep_extend( "force", - default_code_action_config, + M.options.code_action or default_code_action_config, code_action_config ) end @@ -164,7 +175,7 @@ end M.diagnostic_setup = function(diagnostic_config) M.options.diagnostic = vim.tbl_deep_extend( "force", - default_diagnostic_config, + M.options.diagnostic or default_diagnostic_config, diagnostic_config ) end @@ -172,8 +183,71 @@ end -- separate function for `hover` module --- @param hover_config LspUI_hover_config M.hover_setup = function(hover_config) - M.options.hover = - vim.tbl_deep_extend("force", default_hover_config, hover_config) + M.options.hover = vim.tbl_deep_extend( + "force", + M.options.hover or default_hover_config, + hover_config + ) +end + +-- separate function for `definition` module +--- @param definition_config LspUI_definition_config +M.definition = function(definition_config) + M.options.definition = vim.tbl_deep_extend( + "force", + M.options.definition or default_definition_config, + definition_config + ) +end + +-- separate function for `type_definition` module +--- @param type_definition_config LspUI_type_definition_config +M.type_definition = function(type_definition_config) + M.options.type_definition = vim.tbl_deep_extend( + "force", + M.options.type_definition or default_type_definition_config, + type_definition_config + ) +end + +-- separate function for `declaration` module +--- @param declaration_config LspUI_declaration_config +M.declaration = function(declaration_config) + M.options.declaration = vim.tbl_deep_extend( + "force", + M.options.declaration or default_declaration_config, + declaration_config + ) +end + +-- separate function for `reference` module +--- @param reference_config LspUI_reference_config +M.reference = function(reference_config) + M.options.reference = vim.tbl_deep_extend( + "force", + M.options.reference or default_reference_config, + reference_config + ) +end + +-- separate function for `implemention` module +--- @param implemention_config LspUI_implemention_config +M.implemention = function(implemention_config) + M.options.implemention = vim.tbl_deep_extend( + "force", + M.options.implemention or default_implemention_config, + implemention_config + ) +end + +-- separate function for `pos_keybind` module +--- @param pos_keybind_config LspUI_pos_keybind_config +M.pos_keybind = function(pos_keybind_config) + M.options.pos_keybind = vim.tbl_deep_extend( + "force", + M.options.pos_keybind or default_pos_keybind_config, + pos_keybind_config + ) end return M diff --git a/lua/LspUI/pos_abstract.lua b/lua/LspUI/pos_abstract.lua index 96d04fd..742a09d 100644 --- a/lua/LspUI/pos_abstract.lua +++ b/lua/LspUI/pos_abstract.lua @@ -153,7 +153,7 @@ local secondary_clear_hl = function() end local main_view_clear_keybind = function() - for lhs, _ in pairs(config.options.pos_keybind.main) do + for _, lhs in pairs(config.options.pos_keybind.main) do pcall(vim.api.nvim_buf_del_keymap, M.main_view_buffer(), "n", lhs) end end @@ -169,7 +169,7 @@ local main_view_keybind = function() callback = function() if M.secondary_view_hide() then lib_windows.close_window(M.main_view_window()) - main_view_clear_keybind() + -- main_view_clear_keybind() else api.nvim_set_current_win(M.secondary_view_window()) end @@ -270,7 +270,7 @@ local secondary_view_autocmd = function() -- when seconday view close, clear main view highlight main_clear_hl() --try to clear main buffer keybind - main_view_clear_keybind() + -- main_view_clear_keybind() end, }) api.nvim_create_autocmd("CursorMoved", { @@ -338,7 +338,7 @@ M.main_view_buffer = function(buffer_id) -- remove old highlight main_clear_hl() -- try clear keybind - main_view_clear_keybind() + -- main_view_clear_keybind() -- set new main view buffer main_view.buffer = buffer_id -- load main view buffer @@ -357,7 +357,7 @@ M.main_view_buffer = function(buffer_id) -- highlight new main_view_buffer main_set_hl(M.datas()[current_item.uri]) -- add keybind - main_view_keybind() + -- main_view_keybind() end return main_view.buffer end @@ -496,7 +496,7 @@ end --- @return integer width --- @return integer height local generate_secondary_view = function() - main_clear_hl() + secondary_clear_hl() if not api.nvim_buf_is_valid(M.secondary_view_buffer()) then M.secondary_view_buffer(api.nvim_create_buf(false, true)) end