Skip to content

Commit c4db035

Browse files
committed
Add vdebug:load_options() and vdebug:load_keymaps()
Provides option dictionary reloading after vdebug has been sourced.
1 parent 32672ab commit c4db035

File tree

3 files changed

+50
-14
lines changed

3 files changed

+50
-14
lines changed

plugin/python/vdebug/runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def open(self):
3434
self.ui.error("Modified buffers must be saved before debugging")
3535
return
3636
vdebug.opts.Options.set(vim.eval('g:vdebug_options'))
37-
37+
3838
if vdebug.opts.Options.isset('debug_file'):
3939
vdebug.log.Log.set_logger(vdebug.log.FileLogger(\
4040
vdebug.opts.Options.get('debug_file_level'),\

plugin/python/vdebug/util.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ class Keymapper:
1212
exclude = ["run","set_breakpoint","eval_visual"]
1313

1414
def __init__(self):
15-
self.keymaps = vim.eval("g:vdebug_keymap")
16-
self.leader = vim.eval("g:vdebug_leader_key")
15+
self._reload_keys()
1716
self.is_mapped = False
1817
self.existing = []
1918

@@ -27,6 +26,7 @@ def map(self):
2726
if self.is_mapped:
2827
return
2928
self._store_old_map()
29+
self._reload_keys()
3030
for func in self.keymaps:
3131
if func not in self.exclude:
3232
key = self.keymaps[func]
@@ -35,6 +35,10 @@ def map(self):
3535
vim.command(map_cmd)
3636
self.is_mapped = True
3737

38+
def _reload_keys(self):
39+
self.keymaps = vim.eval("g:vdebug_keymap")
40+
self.leader = vim.eval("g:vdebug_leader_key")
41+
3842
def _store_old_map(self):
3943
vim.command('let tempfile=tempname()')
4044
tempfile = vim.eval("tempfile")

plugin/vdebug.vim

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ if !exists("g:vdebug_features")
6464
let g:vdebug_features = {}
6565
endif
6666

67+
if !exists("g:vdebug_leader_key")
68+
let g:vdebug_leader_key = ""
69+
endif
70+
6771
let g:vdebug_keymap_defaults = {
6872
\ "run" : "<F5>",
6973
\ "run_to_cursor" : "<F9>",
@@ -103,20 +107,9 @@ if g:vdebug_force_ascii == 1
103107
let g:vdebug_options_defaults["marker_open_tree"] = '-'
104108
endif
105109

106-
let g:vdebug_options = extend(g:vdebug_options_defaults,g:vdebug_options)
107-
let g:vdebug_keymap = extend(g:vdebug_keymap_defaults,g:vdebug_keymap)
108-
let g:vdebug_leader_key = ""
109-
110110
" Create the top dog
111111
python debugger = DebuggerInterface()
112112

113-
" Mappings allowed in non-debug mode
114-
exe "noremap ".g:vdebug_keymap["run"]." :python debugger.run()<cr>"
115-
exe "noremap ".g:vdebug_keymap["set_breakpoint"]." :python debugger.set_breakpoint()<cr>"
116-
117-
" Exceptional case for visual evaluation
118-
exe "vnoremap ".g:vdebug_keymap["eval_visual"]." :python debugger.handle_visual_eval()<cr>"
119-
120113
" Commands
121114
command! -nargs=? Breakpoint python debugger.set_breakpoint(<q-args>)
122115
command! -nargs=? BreakpointRemove python debugger.remove_breakpoint(<q-args>)
@@ -127,11 +120,48 @@ command! -nargs=+ -complete=customlist,s:OptionNames VdebugOpt python debugger.h
127120
" Signs and highlighted lines for breakpoints, etc.
128121
sign define current text=-> texthl=DbgCurrentSign linehl=DbgCurrentLine
129122
sign define breakpt text=B> texthl=DbgBreakptSign linehl=DbgBreakptLine
123+
130124
hi default DbgCurrentLine term=reverse ctermfg=White ctermbg=Red guifg=#ffffff guibg=#ff0000
131125
hi default DbgCurrentSign term=reverse ctermfg=White ctermbg=Red guifg=#ffffff guibg=#ff0000
132126
hi default DbgBreakptLine term=reverse ctermfg=White ctermbg=Green guifg=#ffffff guibg=#00ff00
133127
hi default DbgBreakptSign term=reverse ctermfg=White ctermbg=Green guifg=#ffffff guibg=#00ff00
134128

129+
" Reload options dictionary, by merging with default options.
130+
"
131+
" This should be called if you want to update the options after vdebug has
132+
" been loaded.
133+
function! vdebug:load_options(options)
134+
" Merge options with defaults
135+
let g:vdebug_options = extend(g:vdebug_options_defaults, a:options)
136+
endfunction
137+
138+
" Assign keymappings, and merge with defaults.
139+
"
140+
" This should be called if you want to update the keymappings after vdebug has
141+
" been loaded.
142+
function! vdebug:load_keymaps(keymaps)
143+
" Unmap existing keys, if applicable
144+
if has_key(g:vdebug_keymap, "run")
145+
exe "silent! nunmap ".g:vdebug_keymap["run"]
146+
endif
147+
if has_key(g:vdebug_keymap, "set_breakpoint")
148+
exe "silent! nunmap ".g:vdebug_keymap["set_breakpoint"]
149+
endif
150+
if has_key(g:vdebug_keymap, "eval_visual")
151+
exe "silent! vunmap ".g:vdebug_keymap["eval_visual"]
152+
endif
153+
154+
" Merge keymaps with defaults
155+
let g:vdebug_keymap = extend(g:vdebug_keymap_defaults, a:keymaps)
156+
157+
" Mappings allowed in non-debug mode
158+
exe "noremap ".g:vdebug_keymap["run"]." :python debugger.run()<cr>"
159+
exe "noremap ".g:vdebug_keymap["set_breakpoint"]." :python debugger.set_breakpoint()<cr>"
160+
161+
" Exceptional case for visual evaluation
162+
exe "vnoremap ".g:vdebug_keymap["eval_visual"]." :python debugger.handle_visual_eval()<cr>"
163+
endfunction
164+
135165
function! s:OptionNames(A,L,P)
136166
let arg_to_cursor = strpart(a:L,10,a:P)
137167
let space_idx = stridx(arg_to_cursor,' ')
@@ -165,3 +195,5 @@ function! vdebug:edit(filename)
165195
endfunction
166196

167197
silent doautocmd User VdebugPost
198+
call vdebug:load_options(g:vdebug_options)
199+
call vdebug:load_keymaps(g:vdebug_keymap)

0 commit comments

Comments
 (0)