From c4b533e1e93151658cb170c6796d327a8c0f8612 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 6 Apr 2018 22:26:25 +0200 Subject: patch 8.0.1668: terminal debugger: can't re-open source code window Problem: Terminal debugger: can't re-open source code window. Solution: Add the :Source command. Also create the window if needed when gdb stops at a source line. --- .../pack/dist/opt/termdebug/plugin/termdebug.vim | 66 +++++++++++++--------- 1 file changed, 39 insertions(+), 27 deletions(-) (limited to 'runtime/pack/dist/opt') diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim index 086a8f1ecf..256f7ef60c 100644 --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -246,6 +246,7 @@ func s:InstallCommands() command -range -nargs=* Evaluate call s:Evaluate(, ) command Gdb call win_gotoid(s:gdbwin) command Program call win_gotoid(s:ptywin) + command Source call s:GotoStartwinOrCreateIt() command Winbar call s:InstallWinbar() " TODO: can the K mapping be restored? @@ -269,13 +270,15 @@ let s:winbar_winids = [] " Install the window toolbar in the current window. func s:InstallWinbar() - nnoremenu WinBar.Step :Step - nnoremenu WinBar.Next :Over - nnoremenu WinBar.Finish :Finish - nnoremenu WinBar.Cont :Continue - nnoremenu WinBar.Stop :Stop - nnoremenu WinBar.Eval :Evaluate - call add(s:winbar_winids, win_getid(winnr())) + if has('menu') && &mouse != '' + nnoremenu WinBar.Step :Step + nnoremenu WinBar.Next :Over + nnoremenu WinBar.Finish :Finish + nnoremenu WinBar.Cont :Continue + nnoremenu WinBar.Stop :Stop + nnoremenu WinBar.Eval :Evaluate + call add(s:winbar_winids, win_getid(winnr())) + endif endfunc " Delete installed debugger commands in the current window. @@ -450,6 +453,14 @@ func s:HandleError(msg) echoerr substitute(a:msg, '.*msg="\(.*\)"', '\1', '') endfunc +func s:GotoStartwinOrCreateIt() + if !win_gotoid(s:startwin) + new + let s:startwin = win_getid(winnr()) + call s:InstallWinbar() + endif +endfunc + " Handle stopping and running message from gdb. " Will update the sign that shows the current position. func s:HandleCursor(msg) @@ -461,31 +472,32 @@ func s:HandleCursor(msg) let s:stopped = 0 endif - if win_gotoid(s:startwin) - let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') - if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname) - let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') - if lnum =~ '^[0-9]*$' - if expand('%:p') != fnamemodify(fname, ':p') - if &modified - " TODO: find existing window - exe 'split ' . fnameescape(fname) - let s:startwin = win_getid(winnr()) - else - exe 'edit ' . fnameescape(fname) - endif + call s:GotoStartwinOrCreateIt() + + let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') + if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname) + let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') + if lnum =~ '^[0-9]*$' + if expand('%:p') != fnamemodify(fname, ':p') + if &modified + " TODO: find existing window + exe 'split ' . fnameescape(fname) + let s:startwin = win_getid(winnr()) + call s:InstallWinbar() + else + exe 'edit ' . fnameescape(fname) endif - exe lnum - exe 'sign unplace ' . s:pc_id - exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname - setlocal signcolumn=yes endif - else + exe lnum exe 'sign unplace ' . s:pc_id + exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname + setlocal signcolumn=yes endif - - call win_gotoid(wid) + else + exe 'sign unplace ' . s:pc_id endif + + call win_gotoid(wid) endfunc " Handle setting a breakpoint -- cgit v1.2.3