diff --git a/lua/LspUI/pos_abstract.lua b/lua/LspUI/pos_abstract.lua index 7909c1f..c0b5089 100644 --- a/lua/LspUI/pos_abstract.lua +++ b/lua/LspUI/pos_abstract.lua @@ -1,5 +1,6 @@ local api, fn, lsp = vim.api, vim.fn, vim.lsp local config = require("LspUI.config") +local lib_debug = require("LspUI.lib.debug") local lib_notify = require("LspUI.lib.notify") local lib_util = require("LspUI.lib.util") local lib_windows = require("LspUI.lib.windows") @@ -17,7 +18,8 @@ local main_namespace = api.nvim_create_namespace("LspUI_main") local seconday_namespace = api.nvim_create_namespace("LspUI_seconday") -local buffer_history = {} +-- key is buffer id, value is the map info +local buffer_keymap_history = {} -- function for push tagstack local push_tagstack = nil @@ -167,20 +169,36 @@ local secondary_clear_hl = function() end end ---- @param buffer_id integer? -local main_view_clear_keybind = function(buffer_id) - for _, lhs in pairs(config.options.pos_keybind.main) do - pcall( - vim.api.nvim_buf_del_keymap, - buffer_id or M.main_view_buffer(), - "n", - lhs - ) +local main_view_restore_keybind = function(map_infos, buffer_id) + for key, value in pairs(map_infos) do + -- pcall(fn.mapset, "n", 0, value) + if not vim.tbl_isempty(value) then + api.nvim_buf_del_keymap(buffer_id, "n", key) + fn.mapset("n", 0, value) + else + api.nvim_buf_del_keymap(buffer_id, "n", key) + -- pcall(vim.api.nvim_buf_del_keymap, buffer_id, "n", key) + end end end -- keybind for main view local main_view_keybind = function() + local back_map = + fn.maparg(config.options.pos_keybind.main.back, "n", false, true) + + local hide_map = fn.maparg( + config.options.pos_keybind.main.hide_secondary, + "n", + false, + true + ) + + buffer_keymap_history[M.main_view_buffer()] = { + [config.options.pos_keybind.main.back] = back_map, + [config.options.pos_keybind.main.hide_secondary] = hide_map, + } + -- back keybind api.nvim_buf_set_keymap( M.main_view_buffer(), @@ -195,6 +213,7 @@ local main_view_keybind = function() end, } ) + -- hide secondary view api.nvim_buf_set_keymap( M.main_view_buffer(), @@ -230,10 +249,12 @@ local main_view_autocmd = function() main_clear_hl() lib_windows.close_window(M.secondary_view_window()) pcall(api.nvim_del_autocmd, secondary_cmd.CursorMoved) - for _, value in pairs(buffer_history) do - main_view_clear_keybind(value) + for buffer_id, value in pairs(buffer_keymap_history) do + api.nvim_buf_call(buffer_id, function() + main_view_restore_keybind(value, buffer_id) + end) end - buffer_history = {} + buffer_keymap_history = {} end end, }) @@ -391,10 +412,12 @@ local secondary_view_autocmd = function() if not M.secondary_view_hide() then main_clear_hl() lib_windows.close_window(M.main_view_window()) - for _, value in pairs(buffer_history) do - main_view_clear_keybind(value) + for buffer_id, value in pairs(buffer_keymap_history) do + api.nvim_buf_call(buffer_id, function() + main_view_restore_keybind(value, buffer_id) + end) end - buffer_history = {} + buffer_keymap_history = {} end end, desc = lib_util.command_desc(" secondary view winclose"), @@ -936,7 +959,6 @@ local action_enter_main = function() win = M.main_view_window(), }) main_view_keybind() - table.insert(buffer_history, M.main_view_buffer()) end end @@ -974,17 +996,15 @@ end local action_back_secondary = function() if not M.secondary_view_hide() then + local map_infos = buffer_keymap_history[M.main_view_buffer()] + main_view_restore_keybind(map_infos, M.main_view_buffer()) + buffer_keymap_history[M.main_view_buffer()] = nil + api.nvim_set_current_win(M.secondary_view_window()) -- remove background api.nvim_set_option_value("winhighlight", "Normal:Normal", { win = M.secondary_view_window(), }) - main_view_clear_keybind() - for key, value in pairs(buffer_history) do - if value == M.main_view_buffer() then - buffer_history[key] = nil - end - end end end