mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 8.0.1107: terminal debugger jumps to non-existing file
Problem:    Terminal debugger jumps to non-existing file.
Solution:   Check that the file exists.  Add an option to make the Vim wide
            wide. Fix removing highlight groups.
			
			
This commit is contained in:
		| @@ -1,4 +1,4 @@ | |||||||
| *terminal.txt*	For Vim version 8.0.  Last change: 2017 Sep 10 | *terminal.txt*	For Vim version 8.0.  Last change: 2017 Sep 13 | ||||||
|  |  | ||||||
|  |  | ||||||
| 		  VIM REFERENCE MANUAL	  by Bram Moolenaar | 		  VIM REFERENCE MANUAL	  by Bram Moolenaar | ||||||
| @@ -85,9 +85,14 @@ Size and color ~ | |||||||
| See option 'termsize' for controlling the size of the terminal window. | See option 'termsize' for controlling the size of the terminal window. | ||||||
| (TODO: scrolling when the terminal is larger than the window) | (TODO: scrolling when the terminal is larger than the window) | ||||||
|  |  | ||||||
| The terminal uses the 'background' option to decide whether the terminal | The job running in the terminal can change the colors.  The default foreground | ||||||
| window will start with a white or black background.  The job running in the | and background colors are taken from Vim, the Normal highlight group. | ||||||
| terminal can change the colors. |  | ||||||
|  | For a color terminal the 'background' option is used to decide whether the | ||||||
|  | terminal window will start with a white or black background. | ||||||
|  |  | ||||||
|  | To use a different color the Terminal highlight group can be used: > | ||||||
|  |     hi Terminal ctermbg=lightgrey ctermfg=blue guibg=lightgrey guifg=blue | ||||||
|  |  | ||||||
|  |  | ||||||
| Syntax ~ | Syntax ~ | ||||||
| @@ -403,6 +408,12 @@ When 'background' is "dark": | |||||||
|   hi debugPC term=reverse ctermbg=darkblue guibg=darkblue |   hi debugPC term=reverse ctermbg=darkblue guibg=darkblue | ||||||
|   hi debugBreakpoint term=reverse ctermbg=red guibg=red |   hi debugBreakpoint term=reverse ctermbg=red guibg=red | ||||||
|  |  | ||||||
|  | To change the width of the Vim window when debugging starts, and use a | ||||||
|  | vertical split: > | ||||||
|  |   let g:termdebug_wide = 163 | ||||||
|  | This will set &columns to 163 when :Termdebug is used.  The value is restored | ||||||
|  | when quitting the debugger. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  vim:tw=78:ts=8:ft=help:norl: |  vim:tw=78:ts=8:ft=help:norl: | ||||||
|   | |||||||
| @@ -24,16 +24,9 @@ if !exists('termdebugger') | |||||||
|   let termdebugger = 'gdb' |   let termdebugger = 'gdb' | ||||||
| endif | endif | ||||||
|  |  | ||||||
| " Sign used to highlight the line where the program has stopped. |  | ||||||
| " There can be only one. |  | ||||||
| sign define debugPC linehl=debugPC |  | ||||||
| let s:pc_id = 12 | let s:pc_id = 12 | ||||||
| let s:break_id = 13 | let s:break_id = 13 | ||||||
|  |  | ||||||
| " Sign used to indicate a breakpoint. |  | ||||||
| " Can be used multiple times. |  | ||||||
| sign define debugBreakpoint text=>> texthl=debugBreakpoint |  | ||||||
|  |  | ||||||
| if &background == 'light' | if &background == 'light' | ||||||
|   hi default debugPC term=reverse ctermbg=lightblue guibg=lightblue |   hi default debugPC term=reverse ctermbg=lightblue guibg=lightblue | ||||||
| else | else | ||||||
| @@ -45,9 +38,19 @@ func s:StartDebug(cmd) | |||||||
|   let s:startwin = win_getid(winnr()) |   let s:startwin = win_getid(winnr()) | ||||||
|   let s:startsigncolumn = &signcolumn |   let s:startsigncolumn = &signcolumn | ||||||
|  |  | ||||||
|  |   if exists('g:termdebug_wide') && &columns < g:termdebug_wide | ||||||
|  |     let s:save_columns = &columns | ||||||
|  |     let &columns = g:termdebug_wide | ||||||
|  |     let vertical = 1 | ||||||
|  |   else | ||||||
|  |     let s:save_columns = 0 | ||||||
|  |     let vertical = 0 | ||||||
|  |   endif | ||||||
|  |  | ||||||
|   " Open a terminal window without a job, to run the debugged program |   " Open a terminal window without a job, to run the debugged program | ||||||
|   let s:ptybuf = term_start('NONE', { |   let s:ptybuf = term_start('NONE', { | ||||||
| 	\ 'term_name': 'gdb program', | 	\ 'term_name': 'gdb program', | ||||||
|  | 	\ 'vertical': vertical, | ||||||
| 	\ }) | 	\ }) | ||||||
|   if s:ptybuf == 0 |   if s:ptybuf == 0 | ||||||
|     echoerr 'Failed to open the program terminal window' |     echoerr 'Failed to open the program terminal window' | ||||||
| @@ -87,6 +90,14 @@ func s:StartDebug(cmd) | |||||||
|   " Connect gdb to the communication pty, using the GDB/MI interface |   " Connect gdb to the communication pty, using the GDB/MI interface | ||||||
|   call term_sendkeys(gdbbuf, 'new-ui mi ' . commpty . "\r") |   call term_sendkeys(gdbbuf, 'new-ui mi ' . commpty . "\r") | ||||||
|  |  | ||||||
|  |   " Sign used to highlight the line where the program has stopped. | ||||||
|  |   " There can be only one. | ||||||
|  |   sign define debugPC linehl=debugPC | ||||||
|  |  | ||||||
|  |   " Sign used to indicate a breakpoint. | ||||||
|  |   " Can be used multiple times. | ||||||
|  |   sign define debugBreakpoint text=>> texthl=debugBreakpoint | ||||||
|  |  | ||||||
|   " Install debugger commands in the text window. |   " Install debugger commands in the text window. | ||||||
|   call win_gotoid(s:startwin) |   call win_gotoid(s:startwin) | ||||||
|   call s:InstallCommands() |   call s:InstallCommands() | ||||||
| @@ -106,6 +117,9 @@ func s:EndDebug(job, status) | |||||||
|   call s:DeleteCommands() |   call s:DeleteCommands() | ||||||
|  |  | ||||||
|   call win_gotoid(curwinid) |   call win_gotoid(curwinid) | ||||||
|  |   if s:save_columns > 0 | ||||||
|  |     let &columns = s:save_columns | ||||||
|  |   endif | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| " Handle a message received from gdb on the GDB/MI interface. | " Handle a message received from gdb on the GDB/MI interface. | ||||||
| @@ -162,12 +176,12 @@ func s:DeleteCommands() | |||||||
|   delcommand Program |   delcommand Program | ||||||
|  |  | ||||||
|   nunmap K |   nunmap K | ||||||
|   sign undefine debugPC |  | ||||||
|   sign undefine debugBreakpoint |  | ||||||
|   exe 'sign unplace ' . s:pc_id |   exe 'sign unplace ' . s:pc_id | ||||||
|   for key in keys(s:breakpoints) |   for key in keys(s:breakpoints) | ||||||
|     exe 'sign unplace ' . (s:break_id + key) |     exe 'sign unplace ' . (s:break_id + key) | ||||||
|   endfor |   endfor | ||||||
|  |   sign undefine debugPC | ||||||
|  |   sign undefine debugBreakpoint | ||||||
|   unlet s:breakpoints |   unlet s:breakpoints | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| @@ -232,8 +246,8 @@ func s:HandleCursor(msg) | |||||||
|   let wid = win_getid(winnr()) |   let wid = win_getid(winnr()) | ||||||
|  |  | ||||||
|   if win_gotoid(s:startwin) |   if win_gotoid(s:startwin) | ||||||
|     if a:msg =~ '^\*stopped' |  | ||||||
|     let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') |     let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') | ||||||
|  |     if a:msg =~ '^\*stopped' && filereadable(fname) | ||||||
|       let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') |       let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') | ||||||
|       if lnum =~ '^[0-9]*$' |       if lnum =~ '^[0-9]*$' | ||||||
| 	if expand('%:h') != fname | 	if expand('%:h') != fname | ||||||
|   | |||||||
| @@ -769,6 +769,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     1107, | ||||||
| /**/ | /**/ | ||||||
|     1106, |     1106, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user