89 lines
2.7 KiB
Lua
89 lines
2.7 KiB
Lua
local map = core.misc.map
|
|
|
|
local keymap_restore = {}
|
|
--- make the default hover binding work for nvim-dap instead of lsp
|
|
local function set_hover_bind()
|
|
for _, buf in pairs(vim.api.nvim_list_bufs()) do
|
|
local keymaps = vim.api.nvim_buf_get_keymap(buf, 'n')
|
|
for _, keymap in pairs(keymaps) do
|
|
if keymap.lhs == "K" then
|
|
table.insert(keymap_restore, keymap)
|
|
vim.api.nvim_buf_del_keymap(buf, 'n', 'K')
|
|
end
|
|
end
|
|
end
|
|
vim.keymap.set('n', 'K', require("dap.ui.widgets").hover,
|
|
{ silent = true })
|
|
end
|
|
|
|
--- revert the hover bind back to whatever it was
|
|
local function unset_hover_bind()
|
|
for _, keymap in pairs(keymap_restore) do
|
|
if keymap.rhs then
|
|
vim.api.nvim_buf_set_keymap(keymap.buffer, keymap.mode, keymap.lhs,
|
|
keymap.rhs, { silent = keymap.silent == 1 })
|
|
elseif keymap.callback then
|
|
vim.keymap.set(keymap.mode, keymap.lhs, keymap.callback,
|
|
{ buffer = keymap.buffer, silent = keymap.silent == 1 })
|
|
end
|
|
end
|
|
keymap_restore = {}
|
|
end
|
|
|
|
return { "mfussenegger/nvim-dap",
|
|
requires = {
|
|
"mason-org/mason.nvim",
|
|
"nvim-telescope/telescope.nvim"
|
|
},
|
|
disable = not vim.fn.has("nvim-0.9.5"),
|
|
branch = "0.10.0",
|
|
function()
|
|
local dap = require("dap")
|
|
|
|
-- define codelldb
|
|
dap.adapters.codelldb = {
|
|
type = "executable",
|
|
command = "codelldb"
|
|
}
|
|
|
|
-- define the c configuration for codelldb
|
|
dap.configurations.c = {
|
|
{
|
|
name = "Launch file",
|
|
type = "codelldb",
|
|
request = "launch",
|
|
program = function()
|
|
return vim.fn.input('Path to executable: ', vim.fn.getcwd()..'/', 'file')
|
|
end,
|
|
|
|
cwd = "${workspaceFolder}",
|
|
stopOnEntry = false
|
|
}
|
|
}
|
|
|
|
-- and define them for cpp, zig, and rust
|
|
dap.configurations.cpp = dap.configurations.c
|
|
dap.configurations.zig = dap.configurations.c
|
|
dap.configurations.rust = dap.configurations.c
|
|
|
|
-- keybinds
|
|
map("n", "<leader>ec", dap.continue, { desc = "dap continue" })
|
|
map("n", "<leader>el", dap.run_last, { desc = "dap run last" })
|
|
map("n", "<leader>et", function()
|
|
dap.terminate()
|
|
unset_hover_bind()
|
|
end, { desc = "dap terminate " })
|
|
map("n", "<leader>eb", require("dap.breakpoints").toggle, {
|
|
desc = "dap toggle breakpoint"
|
|
})
|
|
map("n", "<leader>e]", dap.step_over, { desc = "dap step over" })
|
|
map("n", "<leader>e[", dap.step_back, { desc = "dap step back" })
|
|
map("n", "<leader>er", dap.repl.toggle, { desc = "dap repl toggle" })
|
|
map("n", "<leader>eR", dap.restart, { desc = "dap restart" })
|
|
|
|
-- events
|
|
dap.listeners.after['event_initialized']['me'] = set_hover_bind
|
|
dap.listeners.after['event_terminated']['me'] = unset_hover_bind
|
|
end
|
|
}
|