diff options
Diffstat (limited to 'runtime')
| -rw-r--r-- | runtime/doc/nvim_terminal_emulator.txt | 79 | ||||
| -rw-r--r-- | runtime/pack/dist/opt/termdebug/plugin/termdebug.vim | 96 | 
2 files changed, 123 insertions, 52 deletions
| diff --git a/runtime/doc/nvim_terminal_emulator.txt b/runtime/doc/nvim_terminal_emulator.txt index 49e29111c6..b19343e7ef 100644 --- a/runtime/doc/nvim_terminal_emulator.txt +++ b/runtime/doc/nvim_terminal_emulator.txt @@ -304,7 +304,7 @@ breakpoint, or use the "Clear breakpoint" right-click menu entry.  Inspecting variables ~  					*termdebug-variables* *:Evaluate*   `:Evaluate`	    evaluate the expression under the cursor - `K`		    same + `K`		    same (see |termdebug_map_K| to disable)   `:Evaluate` {expr}   evaluate {expr}   `:'<,'>Evaluate`     evaluate the Visually selected text @@ -333,7 +333,7 @@ Four autocommands can be used: >  						*TermdebugStartPre*  TermdebugStartPre		Before starting debugging.  				Not triggered if the debugger is already -				running or |g:termdebugger| cannot be +				running or the debugger command cannot be  				executed.  						*TermdebugStartPost*  TermdebugStartPost		After debugging has initialized. @@ -362,14 +362,24 @@ This works slightly differently:  						*termdebug_use_prompt*  Prompt mode can be used with: > +	let g:termdebug_config['use_prompt'] = 1 +Or if there is no g:termdebug_config: >  	let g:termdebug_use_prompt = 1 - +< +						*termdebug_map_K* +The K key is normally mapped to :Evaluate. If you do not want this use: > +	let g:termdebug_config['map_K'] = 0 +Or if there is no g:termdebug_config: > +	let g:termdebug_map_K = 0  <  						*termdebug_disasm_window* -If you want the Asm window shown by default, set this to 1. Setting to -any value greater than 1 will set the Asm window height to that value: > +If you want the Asm window shown by default, set the flag to 1. +the "disasm_window_height" entry can be used to set the window height: > +	let g:termdebug_config['disasm_window'] = 1 +	let g:termdebug_config['disasm_window_height'] = 15 +or, if there is no g:termdebug_config: >  	let g:termdebug_disasm_window = 15 -< +Any value greater than 1 will set the Asm window height to that value: >  Communication ~  						*termdebug-communication* @@ -386,13 +396,24 @@ communication channel.  Customizing ~ +				*termdebug-customizing* *g:termdebug_config* +In the past several global variables were used for configuration.  These are +deprecated, using the g:termdebug_config dictionary is preferred.  When +g:termdebug_config exists the other global variables will not be used. -GDB command						 *termdebug-customizing* -To change the name of the gdb command, set the "termdebugger" variable before -invoking `:Termdebug`: > -	let termdebugger = "mygdb" +GDB command ~ +							*g:termdebugger* +To change the name of the gdb command, set "debugger" entry in +g:termdebug_config or the "g:termdebugger" variable before invoking +`:Termdebug`: > +	let g:termdebug_config['command'] = "mygdb" +Or if there is no g:termdebug_config: > +	let g:termdebugger = "mygdb" +  If the command needs an argument use a List: > +	let g:termdebug_config['command'] = ['rr', 'replay', '--'] +Or if there is no g:termdebug_config: >  	let g:termdebugger = ['rr', 'replay', '--']  To not use neovim floating windows for previewing variable evaluation, set the @@ -406,7 +427,17 @@ cursor: >  or set/unset a breakpoint: >  	nnoremap <RightMouse> :Break<CR> -<							*gdb-version* + +Several arguments will be added to make gdb work well for the debugger. +If you want to modify them, add a function to filter the argument list: > +	let g:termdebug_config['command_filter'] = MyDebugFilter + +If you do not want the arguments to be added, but you do need to set the +"pty", use a function to add the necessary arguments: > +	let g:termdebug_config['command_add_args'] = MyAddArguments +The function will be called with the list of arguments so far, and a second +argument that is the name of the pty. +							*gdb-version*  Only debuggers fully compatible with gdb will work.  Vim uses the GDB/MI  interface.  The "new-ui" command  requires gdb version 7.12 or later.  if you  get this error: @@ -414,8 +445,8 @@ get this error:  Then your gdb is too old. -Colors						*hl-debugPC* *hl-debugBreakpoint* - +Colors~ +						*hl-debugPC* *hl-debugBreakpoint*  The color of the signs can be adjusted with these highlight groups:  - debugPC		the current position  - debugBreakpoint	a breakpoint @@ -439,16 +470,20 @@ The argument is the gdb command.  Vim window width						*termdebug_wide* -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. -If g:termdebug_wide is set and &columns is already larger than -g:termdebug_wide then a vertical split will be used without changing &columns. -Set it to 1 to get a vertical split without every changing &columns (useful -for when the terminal can't be resized by Vim). +To change the width of the Vim window when debugging starts and use a vertical +split: > +	let g:termdebug_config['wide'] = 163 +Or if there is no g:termdebug_config: > +	let g:termdebug_wide = 163 + +This will set 'columns' to 163 when `:Termdebug` is used.  The value is +restored when quitting the debugger. + +If the wide value is set and 'columns' is already a greater value, then a +vertical split will be used without modifying 'columns'. +Set the wide value to 1 to use a vertical split without ever changing +'columns'.  This is useful when the terminal can't be resized by Vim.   vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim index 4f2f7b942d..4cd4a200dd 100644 --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -2,7 +2,7 @@  "  " Author: Bram Moolenaar  " Copyright: Vim license applies, see ":help license" -" Last Change: 2022 May 09 +" Last Change: 2022 May 23  "  " WORK IN PROGRESS - The basics works stable, more to come  " Note: In general you need at least GDB 7.12 because this provides the @@ -71,11 +71,6 @@ set cpo&vim  command -nargs=* -complete=file -bang Termdebug call s:StartDebug(<bang>0, <f-args>)  command -nargs=+ -complete=file -bang TermdebugCommand call s:StartDebugCommand(<bang>0, <f-args>) -" Name of the gdb command, defaults to "gdb". -if !exists('g:termdebugger') -  let g:termdebugger = 'gdb' -endif -  let s:pc_id = 12  let s:asm_id = 13  let s:break_id = 14  " breakpoint number is added to this @@ -105,8 +100,17 @@ call s:Highlight(1, '', &background)  hi default debugBreakpoint term=reverse ctermbg=red guibg=red  hi default debugBreakpointDisabled term=reverse ctermbg=gray guibg=gray +" Get the command to execute the debugger as a list, defaults to ["gdb"].  func s:GetCommand() -  return type(g:termdebugger) == v:t_list ? copy(g:termdebugger) : [g:termdebugger] +  if exists('g:termdebug_config') +    let cmd = get(g:termdebug_config, 'command', 'gdb') +  elseif exists('g:termdebugger') +    let cmd = g:termdebugger +  else +    let cmd = 'gdb' +  endif + +  return type(cmd) == v:t_list ? copy(cmd) : [cmd]  endfunc  func s:StartDebug(bang, ...) @@ -177,12 +181,10 @@ func s:StartDebug_internal(dict)      call s:StartDebug_term(a:dict)    endif -  if exists('g:termdebug_disasm_window') -    if g:termdebug_disasm_window -      let curwinid = win_getid(winnr()) -      call s:GotoAsmwinOrCreateIt() -      call win_gotoid(curwinid) -    endif +  if s:GetDisasmWindow() +    let curwinid = win_getid(winnr()) +    call s:GotoAsmwinOrCreateIt() +    call win_gotoid(curwinid)    endif    if exists('#User#TermdebugStartPost') @@ -252,18 +254,28 @@ func s:StartDebug_term(dict)    let proc_args = get(a:dict, 'proc_args', [])    let gdb_cmd = s:GetCommand() -  " Add -quiet to avoid the intro message causing a hit-enter prompt. -  let gdb_cmd += ['-quiet'] -  " Disable pagination, it causes everything to stop at the gdb -  let gdb_cmd += ['-iex', 'set pagination off'] -  " Interpret commands while the target is running.  This should usually only -  " be exec-interrupt, since many commands don't work properly while the -  " target is running (so execute during startup). -  let gdb_cmd += ['-iex', 'set mi-async on'] -  " Open a terminal window to run the debugger. -  let gdb_cmd += ['-tty', pty] -  " Command executed _after_ startup is done, provides us with the necessary feedback -  let gdb_cmd += ['-ex', 'echo startupdone\n'] + +  if exists('g:termdebug_config') && has_key(g:termdebug_config, 'command_add_args') +    let gdb_cmd = g:termdebug_config.command_add_args(gdb_cmd, pty) +  else +    " Add -quiet to avoid the intro message causing a hit-enter prompt. +    let gdb_cmd += ['-quiet'] +    " Disable pagination, it causes everything to stop at the gdb +    let gdb_cmd += ['-iex', 'set pagination off'] +    " Interpret commands while the target is running.  This should usually only +    " be exec-interrupt, since many commands don't work properly while the +    " target is running (so execute during startup). +    let gdb_cmd += ['-iex', 'set mi-async on'] +    " Open a terminal window to run the debugger. +    let gdb_cmd += ['-tty', pty] +    " Command executed _after_ startup is done, provides us with the necessary +    " feedback +    let gdb_cmd += ['-ex', 'echo startupdone\n'] +  endif + +  if exists('g:termdebug_config') && has_key(g:termdebug_config, 'command_filter') +    let gdb_cmd = g:termdebug_config.command_filter(gdb_cmd) +  endif    " Adding arguments requested by the user    let gdb_cmd += gdb_args @@ -871,7 +883,13 @@ func s:InstallCommands()    command Asm call s:GotoAsmwinOrCreateIt()    command Winbar call s:InstallWinbar() -  if !exists('g:termdebug_map_K') || g:termdebug_map_K +  let map = 1 +  if exists('g:termdebug_config') +    let map = get(g:termdebug_config, 'map_K', 1) +  elseif exists('g:termdebug_map_K') +    let map = g:termdebug_map_K +  endif +  if map      " let s:k_map_saved = maparg('K', 'n', 0, 1)      let s:k_map_saved = {}      for map in nvim_get_keymap('n') @@ -1280,6 +1298,26 @@ func s:GotoSourcewinOrCreateIt()    endif  endfunc +func s:GetDisasmWindow() +  if exists('g:termdebug_config') +    return get(g:termdebug_config, 'disasm_window', 0) +  endif +  if exists('g:termdebug_disasm_window') +    return g:termdebug_disasm_window +  endif +  return 0 +endfunc + +func s:GetDisasmWindowHeight() +  if exists('g:termdebug_config') +    return get(g:termdebug_config, 'disasm_window_height', 0) +  endif +  if exists('g:termdebug_disasm_window') && g:termdebug_disasm_window > 1 +    return g:termdebug_disasm_window +  endif +  return 0 +endfunc +  func s:GotoAsmwinOrCreateIt()    if !win_gotoid(s:asmwin)      if win_gotoid(s:sourcewin) @@ -1303,10 +1341,8 @@ func s:GotoAsmwinOrCreateIt()        exe 'file Termdebug-asm-listing'      endif -    if exists('g:termdebug_disasm_window') -      if g:termdebug_disasm_window > 1 -        exe 'resize ' . g:termdebug_disasm_window -      endif +    if s:GetDisasmWindowHeight() > 0 +      exe 'resize ' .. s:GetDisasmWindowHeight()      endif    endif | 
