Permalink
Browse files

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.
  • Loading branch information...
brammool committed Apr 6, 2018
1 parent 3680bab commit c4b533e1e93151658cb170c6796d327a8c0f8612
Showing with 50 additions and 29 deletions.
  1. +9 −2 runtime/doc/terminal.txt
  2. +39 −27 runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
  3. +2 −0 src/version.c
@@ -731,6 +731,11 @@ to have the 'mouse' option set to enable mouse clicks.
You can add the window toolbar in other windows you open with: >
:Winbar
If gdb stops at a source line and there is no window currently showing the
source code, a new window will be created for the source code. This also
happens if the buffer in the source code window has been modified and can't be
abandoned.
Inspecting variables ~
*termdebug-variables*
@@ -745,8 +750,10 @@ You can usually shorten `:Evaluate` to `:Ev`.
Other commands ~
*termdebug-commands*
:Gdb jump to the gdb window
:Program jump to the window with the running program
:Gdb jump to the gdb window
:Program jump to the window with the running program
:Source jump to the window with the source code, create it if there
isn't one
Communication ~
@@ -246,6 +246,7 @@ func s:InstallCommands()
command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>)
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<CR>
nnoremenu WinBar.Next :Over<CR>
nnoremenu WinBar.Finish :Finish<CR>
nnoremenu WinBar.Cont :Continue<CR>
nnoremenu WinBar.Stop :Stop<CR>
nnoremenu WinBar.Eval :Evaluate<CR>
call add(s:winbar_winids, win_getid(winnr()))
if has('menu') && &mouse != ''
nnoremenu WinBar.Step :Step<CR>
nnoremenu WinBar.Next :Over<CR>
nnoremenu WinBar.Finish :Finish<CR>
nnoremenu WinBar.Cont :Continue<CR>
nnoremenu WinBar.Stop :Stop<CR>
nnoremenu WinBar.Eval :Evaluate<CR>
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
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1668,
/**/
1667,
/**/

0 comments on commit c4b533e

Please sign in to comment.