summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0071
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0071')
-rw-r--r--data/vim/patches/8.1.0071792
1 files changed, 792 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0071 b/data/vim/patches/8.1.0071
new file mode 100644
index 000000000..e3a8640fb
--- /dev/null
+++ b/data/vim/patches/8.1.0071
@@ -0,0 +1,792 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0071
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0071
+Problem: Terminal debugger only works with the terminal feature.
+Solution: Make it also work with a prompt buffer. Makes it possible to use
+ on MS-Windows. Various other improvements. (closes #3012)
+Files: runtime/doc/terminal.txt,
+ runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+
+
+*** ../vim-8.1.0070/runtime/doc/terminal.txt 2018-06-12 18:04:28.034267877 +0200
+--- runtime/doc/terminal.txt 2018-06-17 21:33:43.206011529 +0200
+***************
+*** 38,43 ****
+--- 38,44 ----
+ Stepping through code |termdebug-stepping|
+ Inspecting variables |termdebug-variables|
+ Other commands |termdebug-commands|
++ Prompt mode |termdebug-prompt|
+ Communication |termdebug-communication|
+ Customizing |termdebug-customizing|
+
+***************
+*** 620,625 ****
+--- 621,630 ----
+ the source code in a Vim window. Since this is completely contained inside
+ Vim this also works remotely over an ssh connection.
+
++ When the |+terminal| feature is missing, the plugin will use the "prompt"
++ buffer type, if possible. The running program will then use a newly opened
++ terminal window. See |termdebug-prompt| below for details.
++
+
+ Starting ~
+ *termdebug-starting*
+***************
+*** 799,804 ****
+--- 804,826 ----
+ isn't one
+
+
++ Prompt mode ~
++ *termdebug-prompt*
++ When the |+terminal| feature is not supported and on MS-Windows, gdb will run
++ in a buffer with 'buftype' set to "prompt". This works slightly differently:
++ - The gdb window will be in Insert mode while typing commands. Go to Normal
++ mode with <Esc>, then you can move around in the buffer, copy/paste, etc.
++ Go back to editing the gdb command with any command that starts Insert mode,
++ such as `a` or `i`.
++ - The program being debugged will run in a separate window. On MS-Windows
++ this is a new console window. On Unix, if the |+terminal| feature is
++ available a Terminal window will be opened to run the debugged program in.
++
++ *termdebug_use_prompt*
++ Prompt mode can be used even when the |+terminal| feature is present with: >
++ let g:termdebug_use_prompt = 1
++
++
+ Communication ~
+ *termdebug-communication*
+ There is another, hidden, buffer, which is used for Vim to communicate with
+***************
+*** 836,841 ****
+--- 858,871 ----
+ hi debugBreakpoint term=reverse ctermbg=red guibg=red
+
+
++ Shorcuts *termdebug_shortcuts*
++
++ You can define your own shortcuts (mappings) to control gdb, that can work in
++ any window, using the TermDebugSendCommand() function. Example: >
++ map ,w :call TermDebugSendCommand('where')<CR>
++ The argument is the gdb command.
++
++
+ Popup menu *termdebug_popup*
+
+ By default the Termdebug plugin sets 'mousemodel' to "popup_setpos" and adds
+*** ../vim-8.1.0070/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-04-16 16:16:51.000000000 +0200
+--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-17 21:27:00.040243063 +0200
+***************
+*** 1,27 ****
+ " Debugger plugin using gdb.
+ "
+! " WORK IN PROGRESS - much doesn't work yet
+ "
+! " Open two visible terminal windows:
+! " 1. run a pty, as with ":term NONE"
+! " 2. run gdb, passing the pty
+! " The current window is used to view source code and follows gdb.
+ "
+ " A third terminal window is hidden, it is used for communication with gdb.
+ "
+ " The communication with gdb uses GDB/MI. See:
+ " https://sourceware.org/gdb/current/onlinedocs/gdb/GDB_002fMI.html
+- "
+- " Author: Bram Moolenaar
+- " Copyright: Vim license applies, see ":help license"
+
+! " In case this gets loaded twice.
+ if exists(':Termdebug')
+ finish
+ endif
+
+! " Uncomment this line to write logging in "debuglog".
+! " call ch_logfile('debuglog', 'w')
+
+ " The command that starts debugging, e.g. ":Termdebug vim".
+ " To end type "quit" in the gdb window.
+--- 1,60 ----
+ " Debugger plugin using gdb.
+ "
+! " Author: Bram Moolenaar
+! " Copyright: Vim license applies, see ":help license"
+! " Last Update: 2018 Jun 3
+! "
+! " WORK IN PROGRESS - Only the basics work
+! " Note: On MS-Windows you need a recent version of gdb. The one included with
+! " MingW is too old (7.6.1).
+! " I used version 7.12 from http://www.equation.com/servlet/equation.cmd?fa=gdb
+! "
+! " There are two ways to run gdb:
+! " - In a terminal window; used if possible, does not work on MS-Windows
+! " Not used when g:termdebug_use_prompt is set to 1.
+! " - Using a "prompt" buffer; may use a terminal window for the program
+ "
+! " For both the current window is used to view source code and shows the
+! " current statement from gdb.
+ "
++ " USING A TERMINAL WINDOW
++ "
++ " Opens two visible terminal windows:
++ " 1. runs a pty for the debugged program, as with ":term NONE"
++ " 2. runs gdb, passing the pty of the debugged program
+ " A third terminal window is hidden, it is used for communication with gdb.
+ "
++ " USING A PROMPT BUFFER
++ "
++ " Opens a window with a prompt buffer to communicate with gdb.
++ " Gdb is run as a job with callbacks for I/O.
++ " On Unix another terminal window is opened to run the debugged program
++ " On MS-Windows a separate console is opened to run the debugged program
++ "
+ " The communication with gdb uses GDB/MI. See:
+ " https://sourceware.org/gdb/current/onlinedocs/gdb/GDB_002fMI.html
+
+! " In case this gets sourced twice.
+ if exists(':Termdebug')
+ finish
+ endif
+
+! " Need either the +terminal feature or +channel and the prompt buffer.
+! " The terminal feature does not work with gdb on win32.
+! if has('terminal') && !has('win32')
+! let s:way = 'terminal'
+! elseif has('channel') && exists('*prompt_setprompt')
+! let s:way = 'prompt'
+! else
+! if has('terminal')
+! let s:err = 'Cannot debug, missing prompt buffer support'
+! else
+! let s:err = 'Cannot debug, +channel feature is not supported'
+! endif
+! command -nargs=* -complete=file -bang Termdebug echoerr s:err
+! command -nargs=+ -complete=file -bang TermdebugCommand echoerr s:err
+! finish
+! endif
+
+ " The command that starts debugging, e.g. ":Termdebug vim".
+ " To end type "quit" in the gdb window.
+***************
+*** 59,66 ****
+ echoerr 'Terminal debugger already running'
+ return
+ endif
+
+! let s:startwin = win_getid(winnr())
+ let s:startsigncolumn = &signcolumn
+
+ let s:save_columns = 0
+--- 92,103 ----
+ echoerr 'Terminal debugger already running'
+ return
+ endif
++ let s:ptywin = 0
+
+! " Uncomment this line to write logging in "debuglog".
+! " call ch_logfile('debuglog', 'w')
+!
+! let s:sourcewin = win_getid(winnr())
+ let s:startsigncolumn = &signcolumn
+
+ let s:save_columns = 0
+***************
+*** 69,83 ****
+ let s:save_columns = &columns
+ let &columns = g:termdebug_wide
+ endif
+! let vertical = 1
+ else
+! let vertical = 0
+ endif
+
+! " Open a terminal window without a job, to run the debugged program
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'gdb program',
+! \ 'vertical': vertical,
+ \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+--- 106,136 ----
+ let s:save_columns = &columns
+ let &columns = g:termdebug_wide
+ endif
+! let s:vertical = 1
+! else
+! let s:vertical = 0
+! endif
+!
+! " Override using a terminal window by setting g:termdebug_use_prompt to 1.
+! let use_prompt = exists('g:termdebug_use_prompt') && g:termdebug_use_prompt
+! if has('terminal') && !has('win32') && !use_prompt
+! let s:way = 'terminal'
+ else
+! let s:way = 'prompt'
+ endif
+
+! if s:way == 'prompt'
+! call s:StartDebug_prompt(a:dict)
+! else
+! call s:StartDebug_term(a:dict)
+! endif
+! endfunc
+!
+! func s:StartDebug_term(dict)
+! " Open a terminal window without a job, to run the debugged program in.
+ let s:ptybuf = term_start('NONE', {
+! \ 'term_name': 'debugged program',
+! \ 'vertical': s:vertical,
+ \ })
+ if s:ptybuf == 0
+ echoerr 'Failed to open the program terminal window'
+***************
+*** 85,91 ****
+ endif
+ let pty = job_info(term_getjob(s:ptybuf))['tty_out']
+ let s:ptywin = win_getid(winnr())
+! if vertical
+ " Assuming the source code window will get a signcolumn, use two more
+ " columns for that, thus one less for the terminal window.
+ exe (&columns / 2 - 1) . "wincmd |"
+--- 138,144 ----
+ endif
+ let pty = job_info(term_getjob(s:ptybuf))['tty_out']
+ let s:ptywin = win_getid(winnr())
+! if s:vertical
+ " Assuming the source code window will get a signcolumn, use two more
+ " columns for that, thus one less for the terminal window.
+ exe (&columns / 2 - 1) . "wincmd |"
+***************
+*** 110,118 ****
+ let proc_args = get(a:dict, 'proc_args', [])
+
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+! echomsg 'executing "' . join(cmd) . '"'
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndDebug'),
+ \ 'term_finish': 'close',
+ \ })
+ if s:gdbbuf == 0
+--- 163,171 ----
+ let proc_args = get(a:dict, 'proc_args', [])
+
+ let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args
+! call ch_log('executing "' . join(cmd) . '"')
+ let s:gdbbuf = term_start(cmd, {
+! \ 'exit_cb': function('s:EndTermDebug'),
+ \ 'term_finish': 'close',
+ \ })
+ if s:gdbbuf == 0
+***************
+*** 166,176 ****
+ " exec-interrupt, since many commands don't work properly while the target is
+ " running.
+ call s:SendCommand('-gdb-set mi-async on')
+
+ " Disable pagination, it causes everything to stop at the gdb
+ " "Type <return> to continue" prompt.
+! call s:SendCommand('-gdb-set pagination off')
+
+ " Sign used to highlight the line where the program has stopped.
+ " There can be only one.
+ sign define debugPC linehl=debugPC
+--- 219,326 ----
+ " exec-interrupt, since many commands don't work properly while the target is
+ " running.
+ call s:SendCommand('-gdb-set mi-async on')
++ " Older gdb uses a different command.
++ call s:SendCommand('-gdb-set target-async on')
+
+ " Disable pagination, it causes everything to stop at the gdb
+ " "Type <return> to continue" prompt.
+! call s:SendCommand('set pagination off')
+!
+! call s:StartDebugCommon(a:dict)
+! endfunc
+!
+! func s:StartDebug_prompt(dict)
+! " Open a window with a prompt buffer to run gdb in.
+! if s:vertical
+! vertical new
+! else
+! new
+! endif
+! let s:gdbwin = win_getid(winnr())
+! let s:promptbuf = bufnr('')
+! call prompt_setprompt(s:promptbuf, 'gdb> ')
+! set buftype=prompt
+! file gdb
+! call prompt_setcallback(s:promptbuf, function('s:PromptCallback'))
+! call prompt_setinterrupt(s:promptbuf, function('s:PromptInterrupt'))
+
++ if s:vertical
++ " Assuming the source code window will get a signcolumn, use two more
++ " columns for that, thus one less for the terminal window.
++ exe (&columns / 2 - 1) . "wincmd |"
++ endif
++
++ " Add -quiet to avoid the intro message causing a hit-enter prompt.
++ let gdb_args = get(a:dict, 'gdb_args', [])
++ let proc_args = get(a:dict, 'proc_args', [])
++
++ let cmd = [g:termdebugger, '-quiet', '--interpreter=mi2'] + gdb_args
++ call ch_log('executing "' . join(cmd) . '"')
++
++ let s:gdbjob = job_start(cmd, {
++ \ 'exit_cb': function('s:EndPromptDebug'),
++ \ 'out_cb': function('s:GdbOutCallback'),
++ \ })
++ if job_status(s:gdbjob) != "run"
++ echoerr 'Failed to start gdb'
++ exe 'bwipe! ' . s:promptbuf
++ return
++ endif
++ let s:gdb_channel = job_getchannel(s:gdbjob)
++
++ " Interpret commands while the target is running. This should usualy only
++ " be exec-interrupt, since many commands don't work properly while the
++ " target is running.
++ call s:SendCommand('-gdb-set mi-async on')
++ " Older gdb uses a different command.
++ call s:SendCommand('-gdb-set target-async on')
++
++ let s:ptybuf = 0
++ if has('win32')
++ " MS-Windows: run in a new console window for maximum compatibility
++ call s:SendCommand('set new-console on')
++ elseif has('terminal')
++ " Unix: Run the debugged program in a terminal window. Open it below the
++ " gdb window.
++ belowright let s:ptybuf = term_start('NONE', {
++ \ 'term_name': 'debugged program',
++ \ })
++ if s:ptybuf == 0
++ echoerr 'Failed to open the program terminal window'
++ call job_stop(s:gdbjob)
++ return
++ endif
++ let s:ptywin = win_getid(winnr())
++ let pty = job_info(term_getjob(s:ptybuf))['tty_out']
++ call s:SendCommand('tty ' . pty)
++
++ " Since GDB runs in a prompt window, the environment has not been set to
++ " match a terminal window, need to do that now.
++ call s:SendCommand('set env TERM = xterm-color')
++ call s:SendCommand('set env ROWS = ' . winheight(s:ptywin))
++ call s:SendCommand('set env LINES = ' . winheight(s:ptywin))
++ call s:SendCommand('set env COLUMNS = ' . winwidth(s:ptywin))
++ call s:SendCommand('set env COLORS = ' . &t_Co)
++ call s:SendCommand('set env VIM_TERMINAL = ' . v:version)
++ else
++ " TODO: open a new terminal get get the tty name, pass on to gdb
++ call s:SendCommand('show inferior-tty')
++ endif
++ call s:SendCommand('set print pretty on')
++ call s:SendCommand('set breakpoint pending on')
++ " Disable pagination, it causes everything to stop at the gdb
++ call s:SendCommand('set pagination off')
++
++ " Set arguments to be run
++ if len(proc_args)
++ call s:SendCommand('set args ' . join(proc_args))
++ endif
++
++ call s:StartDebugCommon(a:dict)
++ startinsert
++ endfunc
++
++ func s:StartDebugCommon(dict)
+ " Sign used to highlight the line where the program has stopped.
+ " There can be only one.
+ sign define debugPC linehl=debugPC
+***************
+*** 180,186 ****
+ sign define debugBreakpoint text=>> texthl=debugBreakpoint
+
+ " Install debugger commands in the text window.
+! call win_gotoid(s:startwin)
+ call s:InstallCommands()
+ call win_gotoid(s:gdbwin)
+
+--- 330,336 ----
+ sign define debugBreakpoint text=>> texthl=debugBreakpoint
+
+ " Install debugger commands in the text window.
+! call win_gotoid(s:sourcewin)
+ call s:InstallCommands()
+ call win_gotoid(s:gdbwin)
+
+***************
+*** 202,228 ****
+ au BufUnload * call s:BufUnloaded()
+ augroup END
+
+! " Run the command if the bang attribute was given
+! " and got to the window
+ if get(a:dict, 'bang', 0)
+ call s:SendCommand('-exec-run')
+ call win_gotoid(s:ptywin)
+ endif
+
+ endfunc
+
+! func s:EndDebug(job, status)
+! exe 'bwipe! ' . s:ptybuf
+ exe 'bwipe! ' . s:commbuf
+ unlet s:gdbwin
+
+ let curwinid = win_getid(winnr())
+
+! call win_gotoid(s:startwin)
+ let &signcolumn = s:startsigncolumn
+ call s:DeleteCommands()
+
+ call win_gotoid(curwinid)
+ if s:save_columns > 0
+ let &columns = s:save_columns
+ endif
+--- 352,481 ----
+ au BufUnload * call s:BufUnloaded()
+ augroup END
+
+! " Run the command if the bang attribute was given and got to the debug
+! " window.
+ if get(a:dict, 'bang', 0)
+ call s:SendCommand('-exec-run')
+ call win_gotoid(s:ptywin)
+ endif
++ endfunc
++
++ " Send a command to gdb. "cmd" is the string without line terminator.
++ func s:SendCommand(cmd)
++ call ch_log('sending to gdb: ' . a:cmd)
++ if s:way == 'prompt'
++ call ch_sendraw(s:gdb_channel, a:cmd . "\n")
++ else
++ call term_sendkeys(s:commbuf, a:cmd . "\r")
++ endif
++ endfunc
++
++ " This is global so that a user can create their mappings with this.
++ func TermDebugSendCommand(cmd)
++ if s:way == 'prompt'
++ call ch_sendraw(s:gdb_channel, a:cmd . "\n")
++ else
++ let do_continue = 0
++ if !s:stopped
++ let do_continue = 1
++ call s:SendCommand('-exec-interrupt')
++ sleep 10m
++ endif
++ call term_sendkeys(s:gdbbuf, a:cmd . "\r")
++ if do_continue
++ Continue
++ endif
++ endif
++ endfunc
++
++ " Function called when entering a line in the prompt buffer.
++ func s:PromptCallback(text)
++ call s:SendCommand(a:text)
++ endfunc
++
++ " Function called when pressing CTRL-C in the prompt buffer.
++ func s:PromptInterrupt()
++ call ch_log('Interrupting gdb')
++ call job_stop(s:gdbjob, 'int')
++ endfunc
++
++ " Function called when gdb outputs text.
++ func s:GdbOutCallback(channel, text)
++ call ch_log('received from gdb: ' . a:text)
++
++ " Drop the gdb prompt, we have our own.
++ " Drop status and echo'd commands.
++ if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&' || a:text[0] == '='
++ return
++ endif
++ if a:text =~ '^^error,msg='
++ let text = s:DecodeMessage(a:text[11:])
++ if exists('s:evalexpr') && text =~ 'A syntax error in expression, near\|No symbol .* in current context'
++ " Silently drop evaluation errors.
++ unlet s:evalexpr
++ return
++ endif
++ elseif a:text[0] == '~'
++ let text = s:DecodeMessage(a:text[1:])
++ else
++ call s:CommOutput(a:channel, a:text)
++ return
++ endif
+
++ let curwinid = win_getid(winnr())
++ call win_gotoid(s:gdbwin)
++
++ " Add the output above the current prompt.
++ call append(line('$') - 1, text)
++ set nomodified
++
++ call win_gotoid(curwinid)
+ endfunc
+
+! " Decode a message from gdb. quotedText starts with a ", return the text up
+! " to the next ", unescaping characters.
+! func s:DecodeMessage(quotedText)
+! if a:quotedText[0] != '"'
+! echoerr 'DecodeMessage(): missing quote'
+! return
+! endif
+! let result = ''
+! let i = 1
+! while a:quotedText[i] != '"' && i < len(a:quotedText)
+! if a:quotedText[i] == '\'
+! let i += 1
+! if a:quotedText[i] == 'n'
+! " drop \n
+! let i += 1
+! continue
+! endif
+! endif
+! let result .= a:quotedText[i]
+! let i += 1
+! endwhile
+! return result
+! endfunc
+!
+! func s:EndTermDebug(job, status)
+ exe 'bwipe! ' . s:commbuf
+ unlet s:gdbwin
+
++ call s:EndDebugCommon()
++ endfunc
++
++ func s:EndDebugCommon()
+ let curwinid = win_getid(winnr())
+
+! if exists('s:ptybuf') && s:ptybuf
+! exe 'bwipe! ' . s:ptybuf
+! endif
+!
+! call win_gotoid(s:sourcewin)
+ let &signcolumn = s:startsigncolumn
+ call s:DeleteCommands()
+
+ call win_gotoid(curwinid)
++
+ if s:save_columns > 0
+ let &columns = s:save_columns
+ endif
+***************
+*** 240,245 ****
+--- 493,511 ----
+ au! TermDebug
+ endfunc
+
++ func s:EndPromptDebug(job, status)
++ let curwinid = win_getid(winnr())
++ call win_gotoid(s:gdbwin)
++ close
++ if curwinid != s:gdbwin
++ call win_gotoid(curwinid)
++ endif
++
++ call s:EndDebugCommon()
++ unlet s:gdbwin
++ call ch_log("Returning from EndPromptDebug()")
++ endfunc
++
+ " Handle a message received from gdb on the GDB/MI interface.
+ func s:CommOutput(chan, msg)
+ let msgs = split(a:msg, "\r")
+***************
+*** 275,285 ****
+ command -nargs=* Run call s:Run(<q-args>)
+ command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>)
+ command Stop call s:SendCommand('-exec-interrupt')
+! command Continue call s:SendCommand('-exec-continue')
+ 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?
+--- 541,558 ----
+ command -nargs=* Run call s:Run(<q-args>)
+ command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>)
+ command Stop call s:SendCommand('-exec-interrupt')
+!
+! " using -exec-continue results in CTRL-C in gdb window not working
+! if s:way == 'prompt'
+! command Continue call s:SendCommand('continue')
+! else
+! command Continue call term_sendkeys(s:gdbbuf, "continue\r")
+! endif
+!
+ 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:GotoSourcewinOrCreateIt()
+ command Winbar call s:InstallWinbar()
+
+ " TODO: can the K mapping be restored?
+***************
+*** 375,381 ****
+ let do_continue = 0
+ if !s:stopped
+ let do_continue = 1
+! call s:SendCommand('-exec-interrupt')
+ sleep 10m
+ endif
+ call s:SendCommand('-break-insert --source '
+--- 648,660 ----
+ let do_continue = 0
+ if !s:stopped
+ let do_continue = 1
+! if s:way == 'prompt'
+! " Need to send a signal to get the UI to listen. Strangely this is only
+! " needed once.
+! call job_stop(s:gdbjob, 'int')
+! else
+! call s:SendCommand('-exec-interrupt')
+! endif
+ sleep 10m
+ endif
+ call s:SendCommand('-break-insert --source '
+***************
+*** 391,397 ****
+ let lnum = line('.')
+ for [key, val] in items(s:breakpoints)
+ if val['fname'] == fname && val['lnum'] == lnum
+! call term_sendkeys(s:commbuf, '-break-delete ' . key . "\r")
+ " Assume this always wors, the reply is simply "^done".
+ exe 'sign unplace ' . (s:break_id + key)
+ unlet s:breakpoints[key]
+--- 670,676 ----
+ let lnum = line('.')
+ for [key, val] in items(s:breakpoints)
+ if val['fname'] == fname && val['lnum'] == lnum
+! call s:SendCommand('-break-delete ' . key)
+ " Assume this always wors, the reply is simply "^done".
+ exe 'sign unplace ' . (s:break_id + key)
+ unlet s:breakpoints[key]
+***************
+*** 400,410 ****
+ endfor
+ endfunc
+
+- " :Next, :Continue, etc - send a command to gdb
+- func s:SendCommand(cmd)
+- call term_sendkeys(s:commbuf, a:cmd . "\r")
+- endfunc
+-
+ func s:Run(args)
+ if a:args != ''
+ call s:SendCommand('-exec-arguments ' . a:args)
+--- 679,684 ----
+***************
+*** 466,472 ****
+ " Show a balloon with information of the variable under the mouse pointer,
+ " if there is any.
+ func TermDebugBalloonExpr()
+! if v:beval_winid != s:startwin
+ return
+ endif
+ let s:evalFromBalloonExpr = 1
+--- 740,751 ----
+ " Show a balloon with information of the variable under the mouse pointer,
+ " if there is any.
+ func TermDebugBalloonExpr()
+! if v:beval_winid != s:sourcewin
+! return
+! endif
+! if !s:stopped
+! " Only evaluate when stopped, otherwise setting a breakpoint using the
+! " mouse triggers a balloon.
+ return
+ endif
+ let s:evalFromBalloonExpr = 1
+***************
+*** 487,496 ****
+ 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
+--- 766,775 ----
+ echoerr substitute(a:msg, '.*msg="\(.*\)"', '\1', '')
+ endfunc
+
+! func s:GotoSourcewinOrCreateIt()
+! if !win_gotoid(s:sourcewin)
+ new
+! let s:sourcewin = win_getid(winnr())
+ call s:InstallWinbar()
+ endif
+ endfunc
+***************
+*** 506,512 ****
+ let s:stopped = 0
+ endif
+
+! call s:GotoStartwinOrCreateIt()
+
+ let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
+ if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
+--- 785,791 ----
+ let s:stopped = 0
+ endif
+
+! call s:GotoSourcewinOrCreateIt()
+
+ let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '')
+ if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname)
+***************
+*** 516,522 ****
+ if &modified
+ " TODO: find existing window
+ exe 'split ' . fnameescape(fname)
+! let s:startwin = win_getid(winnr())
+ call s:InstallWinbar()
+ else
+ exe 'edit ' . fnameescape(fname)
+--- 795,801 ----
+ if &modified
+ " TODO: find existing window
+ exe 'split ' . fnameescape(fname)
+! let s:sourcewin = win_getid(winnr())
+ call s:InstallWinbar()
+ else
+ exe 'edit ' . fnameescape(fname)
+*** ../vim-8.1.0070/src/version.c 2018-06-17 20:10:36.208066158 +0200
+--- src/version.c 2018-06-17 21:30:33.843055781 +0200
+***************
+*** 763,764 ****
+--- 763,766 ----
+ { /* Add new patch number below this line */
++ /**/
++ 71,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+66. You create a homepage with the impression to cure the afflicted...but
+ your hidden agenda is to receive more e-mail.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///