mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	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.
			
			
This commit is contained in:
		| @@ -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* | ||||
| @@ -747,6 +752,8 @@ Other commands ~ | ||||
| 							*termdebug-commands* | ||||
|  :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,6 +270,7 @@ let s:winbar_winids = [] | ||||
|  | ||||
| " Install the window toolbar in the current window. | ||||
| func s:InstallWinbar() | ||||
|   if has('menu') && &mouse != '' | ||||
|     nnoremenu WinBar.Step   :Step<CR> | ||||
|     nnoremenu WinBar.Next   :Over<CR> | ||||
|     nnoremenu WinBar.Finish :Finish<CR> | ||||
| @@ -276,6 +278,7 @@ func s:InstallWinbar() | ||||
|     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,7 +472,8 @@ func s:HandleCursor(msg) | ||||
|     let s:stopped = 0 | ||||
|   endif | ||||
|  | ||||
|   if win_gotoid(s:startwin) | ||||
|   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', '') | ||||
| @@ -471,6 +483,7 @@ func s:HandleCursor(msg) | ||||
| 	  " TODO: find existing window | ||||
| 	  exe 'split ' . fnameescape(fname) | ||||
| 	  let s:startwin = win_getid(winnr()) | ||||
| 	  call s:InstallWinbar() | ||||
| 	else | ||||
| 	  exe 'edit ' . fnameescape(fname) | ||||
| 	endif | ||||
| @@ -485,7 +498,6 @@ func s:HandleCursor(msg) | ||||
|   endif | ||||
|  | ||||
|   call win_gotoid(wid) | ||||
|   endif | ||||
| 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, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user