Skip to content

Commit 3dc38f1

Browse files
committed
feat: fully configurable keymaps (#164) (#159)
1 parent c9f3a7b commit 3dc38f1

29 files changed

Lines changed: 646 additions & 292 deletions

File tree

doc/dap-view.txt

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,22 @@ You don't have to copy and paste these options. Use them as a reference.
146146
hide = {},
147147
},
148148
},
149-
-- WIP: some keymaps are not overrideable yet!
150149
keymaps = {
150+
scopes = {
151+
toggle = { "<CR>", "<2-LeftMouse>" },
152+
jump_to_parent = "[[",
153+
set_value = "s",
154+
},
155+
watches = {
156+
toggle = { "<CR>", "<2-LeftMouse>" },
157+
jump_to_parent = "[[",
158+
set_value = "s",
159+
copy_value = "c",
160+
delete_expression = "d",
161+
append_expression = "a",
162+
insert_expression = "i",
163+
edit_expression = "e",
164+
},
151165
hover = {
152166
quit = "q",
153167
toggle = { "<CR>", "<2-LeftMouse>" },
@@ -161,6 +175,24 @@ You don't have to copy and paste these options. Use them as a reference.
161175
next_session = "]s",
162176
prev_session = "[s",
163177
},
178+
threads = {
179+
toggle_subtle_frames = "t",
180+
filter = "f",
181+
invert_filter = "o",
182+
jump_to_frame = { "<CR>", "<2-LeftMouse>" },
183+
force_jump = "<C-w><CR>",
184+
},
185+
exceptions = {
186+
toggle_filter = { "<CR>", "<2-LeftMouse>" },
187+
},
188+
sessions = {
189+
switch_session = { "<CR>", "<2-LeftMouse>" },
190+
},
191+
breakpoints = {
192+
delete_breakpoint = "d",
193+
jump_to_breakpoint = { "<CR>", "<2-LeftMouse>" },
194+
force_jump = "<C-w><CR>",
195+
},
164196
base = {
165197
next_view = "]v",
166198
prev_view = "[v",

docs/src/routes/configuration/+page.md

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,22 @@ return {
6767
hide = {},
6868
},
6969
},
70-
-- WIP: some keymaps are not overrideable yet!
7170
keymaps = {
71+
scopes = {
72+
toggle = { "<CR>", "<2-LeftMouse>" },
73+
jump_to_parent = "[[",
74+
set_value = "s",
75+
},
76+
watches = {
77+
toggle = { "<CR>", "<2-LeftMouse>" },
78+
jump_to_parent = "[[",
79+
set_value = "s",
80+
copy_value = "c",
81+
delete_expression = "d",
82+
append_expression = "a",
83+
insert_expression = "i",
84+
edit_expression = "e",
85+
},
7286
hover = {
7387
quit = "q",
7488
toggle = { "<CR>", "<2-LeftMouse>" },
@@ -82,6 +96,24 @@ return {
8296
next_session = "]s",
8397
prev_session = "[s",
8498
},
99+
threads = {
100+
toggle_subtle_frames = "t",
101+
filter = "f",
102+
invert_filter = "o",
103+
jump_to_frame = { "<CR>", "<2-LeftMouse>" },
104+
force_jump = "<C-w><CR>",
105+
},
106+
exceptions = {
107+
toggle_filter = { "<CR>", "<2-LeftMouse>" },
108+
},
109+
sessions = {
110+
switch_session = { "<CR>", "<2-LeftMouse>" },
111+
},
112+
breakpoints = {
113+
delete_breakpoint = "d",
114+
jump_to_breakpoint = { "<CR>", "<2-LeftMouse>" },
115+
force_jump = "<C-w><CR>",
116+
},
85117
base = {
86118
next_view = "]v",
87119
prev_view = "[v",

docs/src/routes/keymaps/+page.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ There are also some default keybindings for navigating to other views.
88

99
The help window itself has only 1 mapping: it can be closed with `q`.
1010

11-
**Some keymaps are overridable**. Check the [config](configuration) for details.
11+
Keymaps are configurable. Check the [config](configuration) page for details.
1212

1313
| Key | Action |
1414
| ------ | -------------------------------------------- |

lua/dap-view/actions.lua

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,8 @@ M.open = function(hide_terminal)
174174
require("dap-view.views.options").set_options()
175175
require("dap-view.views.keymaps").set_keymaps()
176176

177-
state.current_section = state.current_section or setup.config.winbar.default_section
178-
179177
winbar.set_action_keymaps()
180-
winbar.show_content(state.current_section)
178+
winbar.wrapped_action(state.current_section, true)
181179

182180
-- Clean up states dap-view buffer is wiped out
183181
autocmd.quit_buf_autocmd(state.bufnr, function()
@@ -256,7 +254,7 @@ M.add_expr = function(expr, default_expanded)
256254
local expr_ = expr or require("dap-view.util.exprs").get_current_expr()
257255
coroutine.wrap(function()
258256
if require("dap-view.watches.actions").add_watch_expr(expr_, default_expanded) then
259-
require("dap-view.views").switch_to_view("watches")
257+
winbar.wrapped_action("watches")
260258
end
261259
end)()
262260
end
@@ -269,7 +267,7 @@ M.jump_to_view = function(view)
269267
end
270268
if util.is_buf_valid(state.bufnr) and util.is_win_valid(state.winnr) then
271269
api.nvim_set_current_win(state.winnr)
272-
winbar.show_content(view)
270+
winbar.wrapped_action(view)
273271
else
274272
vim.notify("Can't jump to view: couldn't find the window")
275273
end
@@ -284,7 +282,7 @@ M.show_view = function(view)
284282
if state.current_section == view then
285283
M.jump_to_view(view)
286284
elseif util.is_buf_valid(state.bufnr) and util.is_win_valid(state.winnr) then
287-
winbar.show_content(view)
285+
winbar.wrapped_action(view)
288286
else
289287
vim.notify("Can't show view: couldn't find the window")
290288
end
@@ -343,7 +341,7 @@ M.navigate = function(opts)
343341
---@cast array dapview.Section[]
344342
local new_view = array[sorted_keys[new_idx]]
345343

346-
winbar.show_content(new_view)
344+
winbar.wrapped_action(new_view)
347345
end
348346
end
349347

lua/dap-view/autocmds.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ api.nvim_create_autocmd("TabEnter", {
8585
state.term_winnr = term_winnr
8686

8787
if winnr ~= nil then
88-
winbar.show_content(state.current_section)
88+
winbar.wrapped_action(state.current_section)
8989
end
9090
end,
9191
})
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
local trigger = require("dap-view.util.trigger")
2+
3+
---@type {[string]: {action: fun():(nil), desc: string}}
4+
return {
5+
delete_breakpoint = {
6+
action = function()
7+
trigger.at_cursor(require("dap-view.breakpoints.actions").remove)
8+
9+
-- If a session is active, `setBreakpoints` will trigger anyway
10+
-- It's best avoid a redraw here
11+
if require("dap").session() == nil then
12+
require("dap-view.views").switch_to_view("breakpoints")
13+
end
14+
end,
15+
desc = "delete breakpoint",
16+
},
17+
jump_to_breakpoint = {
18+
action = function()
19+
trigger.at_cursor(require("dap-view.breakpoints.actions").jump)
20+
end,
21+
desc = "jump to breakpoint",
22+
},
23+
force_jump = {
24+
action = function()
25+
trigger.at_cursor(function(line)
26+
require("dap-view.views.windows").force_jump(line, require("dap-view.breakpoints.actions").jump)
27+
end)
28+
end,
29+
desc = "force jump",
30+
},
31+
}

lua/dap-view/config.lua

Lines changed: 73 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ local M = {}
1010

1111
---@alias dapview.Position 'right' | 'left' | 'above' | 'below'
1212

13-
---@alias dapview.VirtualTextPosition "eol"|"eol_right_align"|"inline"
13+
---@alias dapview.VirtualTextPosition "eol" | "eol_right_align" | "inline"
1414

1515
---@alias dapview.VirtualTextFormatter fun(position: dapview.VirtualTextPosition, node: TSNode, bufnr: integer, var_index: integer, num_var_line: integer): string?
1616

@@ -95,12 +95,6 @@ local M = {}
9595

9696
---@alias dapview.Keymap string|string[]
9797

98-
---@class dapview.HoverKeymapsConfig
99-
---@field quit dapview.Keymap
100-
---@field toggle dapview.Keymap
101-
---@field jump_to_parent dapview.Keymap
102-
---@field set_value dapview.Keymap
103-
10498
---@class dapview.HelpKeymapsConfig
10599
---@field quit dapview.Keymap
106100

@@ -115,10 +109,49 @@ local M = {}
115109
---@field jump_to_last dapview.Keymap
116110
---@field help dapview.Keymap
117111

112+
---@class dapview.ThreadsKeymapsConfig
113+
---@field toggle_subtle_frames dapview.Keymap
114+
---@field filter dapview.Keymap
115+
---@field invert_filter dapview.Keymap
116+
---@field jump_to_frame dapview.Keymap
117+
---@field force_jump dapview.Keymap
118+
119+
---@class dapview.ExceptionsKeymapsConfig
120+
---@field toggle_filter dapview.Keymap
121+
122+
---@class dapview.SessionsKeymapsConfig
123+
---@field switch_session dapview.Keymap
124+
125+
---@class dapview.BreakpointsKeymapsConfig
126+
---@field jump_to_breakpoint dapview.Keymap
127+
---@field delete_breakpoint dapview.Keymap
128+
---@field force_jump dapview.Keymap
129+
130+
---@class dapview.ScopesKeymapsConfig
131+
---@field toggle dapview.Keymap
132+
---@field jump_to_parent dapview.Keymap
133+
---@field set_value dapview.Keymap
134+
135+
---@class dapview.HoverKeymapsConfig : dapview.ScopesKeymapsConfig
136+
---@field quit dapview.Keymap
137+
138+
---@class dapview.WatchesKeymapsConfig : dapview.ScopesKeymapsConfig
139+
---@field copy_value dapview.Keymap
140+
---@field delete_expression dapview.Keymap
141+
---@field append_expression dapview.Keymap
142+
---@field insert_expression dapview.Keymap
143+
---@field edit_expression dapview.Keymap
144+
118145
---@class dapview.KeymapsConfig
146+
---@field scopes dapview.ScopesKeymapsConfig
147+
---@field watches dapview.WatchesKeymapsConfig
119148
---@field hover dapview.HoverKeymapsConfig
120149
---@field help dapview.HelpKeymapsConfig
121150
---@field console dapview.ConsoleKeymapsConfig
151+
---@field threads dapview.ThreadsKeymapsConfig
152+
---@field exceptions dapview.ExceptionsKeymapsConfig
153+
---@field sessions dapview.SessionsKeymapsConfig
154+
---@field breakpoints dapview.BreakpointsKeymapsConfig
122155
---@field base dapview.BaseKeymapsConfig
123156

124157
---@class dapview.VirtualTextConfig
@@ -185,6 +218,21 @@ M.config = {
185218
},
186219
},
187220
keymaps = {
221+
scopes = {
222+
toggle = { "<CR>", "<2-LeftMouse>" },
223+
jump_to_parent = "[[",
224+
set_value = "s",
225+
},
226+
watches = {
227+
toggle = { "<CR>", "<2-LeftMouse>" },
228+
jump_to_parent = "[[",
229+
set_value = "s",
230+
copy_value = "c",
231+
delete_expression = "d",
232+
append_expression = "a",
233+
insert_expression = "i",
234+
edit_expression = "e",
235+
},
188236
hover = {
189237
quit = "q",
190238
toggle = { "<CR>", "<2-LeftMouse>" },
@@ -198,6 +246,24 @@ M.config = {
198246
next_session = "]s",
199247
prev_session = "[s",
200248
},
249+
threads = {
250+
toggle_subtle_frames = "t",
251+
filter = "f",
252+
invert_filter = "o",
253+
jump_to_frame = { "<CR>", "<2-LeftMouse>" },
254+
force_jump = "<C-w><CR>",
255+
},
256+
exceptions = {
257+
toggle_filter = { "<CR>", "<2-LeftMouse>" },
258+
},
259+
sessions = {
260+
switch_session = { "<CR>", "<2-LeftMouse>" },
261+
},
262+
breakpoints = {
263+
delete_breakpoint = "d",
264+
jump_to_breakpoint = { "<CR>", "<2-LeftMouse>" },
265+
force_jump = "<C-w><CR>",
266+
},
201267
base = {
202268
next_view = "]v",
203269
prev_view = "[v",

lua/dap-view/console/view.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ M.setup_term_buf = function()
233233
end
234234

235235
require("dap-view.console.keymaps").set_keymaps(term_bufnr)
236+
require("dap-view.views.keymaps").set_keymaps(term_bufnr)
236237

237238
scroll.setup_autoscroll(term_bufnr)
238239
end

lua/dap-view/exceptions/actions.lua

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,20 @@ local util = require("dap-view.util")
55

66
local M = {}
77

8-
local api = vim.api
9-
10-
M.toggle_exception_filter = function()
11-
local cursor_line = api.nvim_win_get_cursor(state.winnr)[1]
12-
13-
local current_option = state.exceptions_options[state.current_adapter][cursor_line]
8+
---@param line integer
9+
M.toggle_exception_filter = function(line)
10+
local current_option = state.exceptions_options[state.current_adapter][line]
1411

1512
current_option.enabled = not current_option.enabled
1613

1714
local icon = current_option.enabled and setup.config.icons["enabled"] or setup.config.icons["disabled"]
1815

1916
local content = " " .. icon .. " " .. current_option.exception_filter.label
2017

21-
util.set_lines(state.bufnr, cursor_line - 1, cursor_line, false, { content })
18+
util.set_lines(state.bufnr, line - 1, line, false, { content })
2219

2320
local hl_type = current_option.enabled and "Enabled" or "Disabled"
24-
hl.hl_range("ExceptionFilter" .. hl_type, { cursor_line - 1, 0 }, { cursor_line - 1, 4 })
21+
hl.hl_range("ExceptionFilter" .. hl_type, { line - 1, 0 }, { line - 1, 4 })
2522

2623
require("dap-view.exceptions").update_exception_breakpoints_filters()
2724
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
local trigger = require("dap-view.util.trigger")
2+
3+
---@type {[string]: {action: fun():(nil), desc: string}}
4+
return {
5+
toggle_filter = {
6+
action = function()
7+
trigger.at_cursor(require("dap-view.exceptions.actions").toggle_exception_filter)
8+
end,
9+
desc = "toggle filter",
10+
},
11+
}

0 commit comments

Comments
 (0)