From defa06be83a1abd01762505aa73dde516646a923 Mon Sep 17 00:00:00 2001 From: blob42 Date: Mon, 21 Aug 2023 13:56:11 +0200 Subject: [PATCH] update dap utils/dap mode --- lua/spike/dap/dapmode.lua | 3 +-- lua/spike/dap/init.lua | 38 +++++++++++++++++++++++++++++++++++--- lua/spike/dap/utils.lua | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 5 deletions(-) diff --git a/lua/spike/dap/dapmode.lua b/lua/spike/dap/dapmode.lua index 57fb2d0..0c1c235 100644 --- a/lua/spike/dap/dapmode.lua +++ b/lua/spike/dap/dapmode.lua @@ -56,7 +56,7 @@ local config = { S = { rhs = function() daputils.disconnect_dap() - M.layer:exit() + -- M.layer:exit() -- already done in dap listener vim.cmd("redrawstatus") end, desc = '[dap] stop' @@ -153,6 +153,5 @@ end -- -- -- layer:enter() -- -M.disconnect_dap = disconnect_dap return M diff --git a/lua/spike/dap/init.lua b/lua/spike/dap/init.lua index 3b0e265..6821d2e 100644 --- a/lua/spike/dap/init.lua +++ b/lua/spike/dap/init.lua @@ -3,9 +3,11 @@ if not present then print("nvim-dap missing !") return end +local api = vim.api local dapmode = require("spike.dap.dapmode") local daputils = require('spike.dap.utils') local dapui = require("dapui") +local keymap_restore = {} local liblldb_path = vim.fn.stdpath("data") .. "/mason/packages/codelldb/extension/lldb/lib/liblldb.so" @@ -35,12 +37,12 @@ M.signs = { local function register_listeners() - dap.listeners.before['event_initialized']['spike-dap'] = function(_, _) + dap.listeners.before['event_initialized']['blob42-dap'] = function(_, _) dapmode.start() dapui.open() end - dap.listeners.after['event_terminated']['spike-dap'] = function(_, _) + dap.listeners.after['event_terminated']['blob42-dap'] = function(_, _) -- print("dap session ended") dapmode.stop() dapui.close() @@ -74,6 +76,36 @@ local function dap_setup() } } + -- Map K to hover while session is active https://github.com/mfussenegger/nvim-dap/wiki/Cookbook#map-k-to-hover-while-session-is-active + dap.listeners.after['event_initialized']['blob42-dap'] = function() -- takes session,body + for _, buf in pairs(api.nvim_list_bufs()) do + local keymaps = api.nvim_buf_get_keymap(buf, 'n') + for _, keymap in pairs(keymaps) do + if keymap.lhs == "K" then + table.insert(keymap_restore, keymap) + api.nvim_buf_del_keymap(buf, 'n', 'K') + end + end + end + api.nvim_set_keymap( + 'n', 'K', 'lua require("dap.ui.widgets").hover()', + {silent = true} + ) + end + + dap.listeners.after['event_terminated']['blob42-dap'] = function() + for _,keymap in pairs(keymap_restore) do + api.nvim_buf_set_keymap( + keymap.buffer, + keymap.mode, + keymap.lhs, + keymap.rhs, + { silent = keymap.silent == 1 } + ) + end + keymap_restore = {} + end + -- dap.adapters["codelldb-c"] = { -- type = 'server', -- host = "127.0.0.1", @@ -105,7 +137,7 @@ local function dap_setup() end, cwd = '${workspaceFolder}', stopOnEntry = false, - -- runInTerminal = true, + -- runInTerminal = true, -- use external terminal }, { diff --git a/lua/spike/dap/utils.lua b/lua/spike/dap/utils.lua index 24e0036..b955259 100644 --- a/lua/spike/dap/utils.lua +++ b/lua/spike/dap/utils.lua @@ -1,7 +1,11 @@ +---@diagnostic disable: redefined-local local ok, dap = pcall(require, 'dap') if not ok then vim.notify('dap module missing') end +local api = vim.api +local keymap_restore = {} + local M = {} M.disconnect_dap = function() @@ -47,4 +51,34 @@ M.load_launch_json = function() require("dap.ext.vscode").load_launchjs() end +M.register_keymaps = function() + for _, buf in pairs(api.nvim_list_bufs()) do + local keymaps = api.nvim_buf_get_keymap(buf, 'n') + for _, keymap in pairs(keymaps) do + if keymap.lhs == "K" then + table.insert(keymap_restore, keymap) + api.nvim_buf_del_keymap(buf, 'n', 'K') + end + end + end + api.nvim_set_keymap( + 'n', 'K', 'lua require("dap.ui.widgets").hover()', + {silent = true} + ) +end + +M.unregister_keymaps = function() + + for _,keymap in pairs(keymap_restore) do + api.nvim_buf_set_keymap( + keymap.buffer, + keymap.mode, + keymap.lhs, + keymap.rhs, + { silent = keymap.silent == 1 } + ) + end + keymap_restore = {} +end + return M