diff --git a/init.lua b/init.lua index ae9de52..ce36ec5 100644 --- a/init.lua +++ b/init.lua @@ -120,9 +120,56 @@ require("lazy").setup({ { 'rmagatti/auto-session', lazy = false, - ---@module "auto-session" - ---@type AutoSession.Config opts = { + save_extra_data = function(_) + local ok, breakpoints = pcall(require, "dap.breakpoints") + if not ok or not breakpoints then + return + end + + local bps = {} + local breakpoints_by_buf = breakpoints.get() + for buf, buf_bps in pairs(breakpoints_by_buf) do + bps[vim.api.nvim_buf_get_name(buf)] = buf_bps + end + if vim.tbl_isempty(bps) then + return + end + local extra_data = { + breakpoints = bps, + } + return vim.fn.json_encode(extra_data) + end, + + restore_extra_data = function(_, extra_data) + local json = vim.fn.json_decode(extra_data) + + if json.breakpoints then + local ok, breakpoints = pcall(require, "dap.breakpoints") + + if not ok or not breakpoints then + return + end + vim.notify("restoring breakpoints") + for buf_name, buf_bps in pairs(json.breakpoints) do + for _, bp in pairs(buf_bps) do + local line = bp.line + local opts = { + condition = bp.condition, + log_message = bp.logMessage, + hit_condition = bp.hitCondition, + } + + local bufnr = vim.fn.bufnr(buf_name, true) + if vim.fn.bufloaded(bufnr) == 0 then + vim.api.nvim_buf_call(bufnr, vim.cmd.edit) + end + + breakpoints.set(opts, bufnr, line) + end + end + end + end, } }, { @@ -582,18 +629,18 @@ require("dapui").setup() vim.keymap.set('n', 'dd', require("dapui").toggle, {}) vim.keymap.set('n', 'db', require("dap").toggle_breakpoint, {}) vim.fn.sign_define('DapBreakpoint', { - text = 'ī˜Ž', + text = '🛑', texthl = 'DapBreakpoint', linehl = 'DapBreakpoint', numhl = 'DapBreakpoint' }) vim.fn.sign_define('DapBreakpointCondition', - { text = '', texthl = 'DapBreakpoint', linehl = 'DapBreakpoint', numhl = 'DapBreakpoint' }) + { text = '❓', texthl = 'DapBreakpoint', linehl = 'DapBreakpoint', numhl = 'DapBreakpoint' }) vim.fn.sign_define('DapBreakpointRejected', - { text = 'īĒ', texthl = 'DapBreakpoint', linehl = 'DapBreakpoint', numhl = 'DapBreakpoint' }) -vim.fn.sign_define('DapLogPoint', { text = '', texthl = 'DapLogPoint', linehl = 'DapLogPoint', numhl = 'DapLogPoint' }) -vim.fn.sign_define('DapStopped', { text = 'ī…„', texthl = 'DapStopped', linehl = 'DapStopped', numhl = 'DapStopped' }) + { text = '❗', texthl = 'DapBreakpoint', linehl = 'DapBreakpoint', numhl = 'DapBreakpoint' }) +vim.fn.sign_define('DapLogPoint', { text = 'â„šī¸', texthl = 'DapLogPoint', linehl = 'DapLogPoint', numhl = 'DapLogPoint' }) +vim.fn.sign_define('DapStopped', { text = 'â–ļī¸', texthl = 'DapStopped', linehl = 'DapStopped', numhl = 'DapStopped' }) vim.api.nvim_set_hl(0, 'DapBreakpoint', { ctermbg = 0, fg = '#993939', bg = '#31353f' }) vim.api.nvim_set_hl(0, 'DapLogPoint', { ctermbg = 0, fg = '#61afef', bg = '#31353f' }) vim.api.nvim_set_hl(0, 'DapStopped', { ctermbg = 0, fg = '#98c379', bg = '#31353f' })