diff --git a/lua/custom/plugins/debug.lua b/lua/custom/plugins/debug.lua index af825f7b..941cc268 100644 --- a/lua/custom/plugins/debug.lua +++ b/lua/custom/plugins/debug.lua @@ -57,6 +57,7 @@ return { }, config = function() local dap = require 'dap' + local dapui = require 'dapui' local async = require 'plenary.async' -- Configure the LLDB DAP adapter for C/C++ @@ -73,7 +74,7 @@ return { type = 'lldb', request = 'launch', program = function() - return require('custom.utils').pick_executable(vim.fn.getcwd() .. '/build/debug') + return require('custom.utils').pick_executable(vim.fn.getcwd() .. '/build') end, cwd = '${workspaceFolder}', stopOnEntry = false, @@ -115,26 +116,39 @@ return { -- If you added 'leoluz/nvim-dap-go' as a dependency: -- require('dap-go').setup() -- Call its setup function - -- Your preferred DAP keybindings - vim.keymap.set('n', 'db', dap.toggle_breakpoint, { desc = 'DAP: Toggle [B]reakpoint' }) - vim.keymap.set('n', 'dc', dap.continue, { desc = 'DAP: [C]ontinue' }) - vim.keymap.set('n', 'dj', dap.step_into, { desc = 'DAP: Step [I]nto (j)' }) - vim.keymap.set('n', 'dk', dap.step_over, { desc = 'DAP: Step [O]ver (k)' }) - vim.keymap.set('n', 'do', dap.step_out, { desc = 'DAP: Step [O]ut' }) - vim.keymap.set('n', 'dr', dap.repl.open, { desc = 'DAP: Open [R]EPL' }) - vim.keymap.set('n', 'dl', dap.run_last, { desc = 'DAP: Run [L]ast' }) - vim.keymap.set('n', 'du', function() - require('dapui').toggle() - end, { desc = 'DAP: Toggle [U]I' }) - vim.keymap.set('n', 'dt', dap.terminate, { desc = 'DAP: [T]erminate' }) - - vim.keymap.set('n', '', function() + -- Launch and Control + vim.keymap.set('n', 'dc', function() async.run(function() dap.continue() + if not dapui.windows or vim.tbl_isempty(dapui.windows) then + dapui.open() + end end) - end, { desc = 'DAP Continue (async-safe)' }) - -- Kickstart's to toggle UI (can be added if you like it) - -- vim.keymap.set('n', '', function() require('dapui').toggle() end, { desc = 'Debug: Toggle UI' }) + end, { desc = 'DAP: [C]ontinue show UI (async-safe)' }) + vim.keymap.set('n', 'db', dap.toggle_breakpoint, { desc = 'DAP: Toggle [B]reakpoint' }) + vim.keymap.set('n', 'dl', dap.run_last, { desc = 'DAP: Run [L]ast' }) + + -- DAP: Stepping + vim.keymap.set('n', 'di', dap.step_into, { desc = 'DAP: Step [I]nto' }) + vim.keymap.set('n', 'dk', dap.step_over, { desc = 'DAP: Step [O]ver (k)' }) + vim.keymap.set('n', 'do', dap.step_out, { desc = 'DAP: Step [O]ut' }) + vim.keymap.set('n', 'dx', function() + async.run(function() + dap.run_to_cursor() + end) + end, { desc = 'DAP: Run to Cursor (x) (asyn-safe)' }) + + -- DAP: Termination + vim.keymap.set('n', 'dt', function() + async.run(function() + dap.terminate() + dapui.close() + end) + end, { desc = 'DAP: [T]erminate (async-safe)' }) + + -- DAP: UI + vim.keymap.set('n', 'dr', dap.repl.open, { desc = 'DAP: Open [R]EPL' }) + vim.keymap.set('n', 'du', dapui.toggle, { desc = 'DAP: Toggle [U]I' }) end, }, } diff --git a/lua/custom/utils.lua b/lua/custom/utils.lua index 30502fe2..9c62984a 100644 --- a/lua/custom/utils.lua +++ b/lua/custom/utils.lua @@ -30,8 +30,6 @@ end local function pick_executable(start_dir) return async.wrap(function(_start_dir, on_choice) - print('pick_executable() was triggered with start_dir=' .. _start_dir) - local executables = collect_executables(_start_dir) if #executables == 0 then