aboutsummaryrefslogtreecommitdiff
path: root/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/pack/dist/opt/termdebug/plugin/termdebug.vim')
-rw-r--r--runtime/pack/dist/opt/termdebug/plugin/termdebug.vim40
1 files changed, 40 insertions, 0 deletions
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
new file mode 100644
index 0000000000..b002cad4c6
--- /dev/null
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -0,0 +1,40 @@
+" Debugger commands.
+"
+" WORK IN PROGRESS - much doesn't work yet
+"
+" Open two terminal windows:
+" 1. run a pty, as with ":term NONE"
+" 2. run gdb, passing the pty
+" The current window is used to edit source code and follows gdb.
+"
+" Author: Bram Moolenaar
+" Copyright: Vim license applies
+
+" In case this gets loaded twice.
+if exists(':Termdebug')
+ finish
+endif
+
+command -nargs=* -complete=file Termdebug call s:StartDebug(<q-args>)
+
+if !exists('debugger')
+ let debugger = 'gdb'
+endif
+
+func s:StartDebug(cmd)
+ " Open a terminal window without a job, to run the debugged program
+ let s:ptybuf = term_start('NONE', {})
+ let pty = job_info(term_getjob(s:ptybuf))['tty']
+
+ " Open a terminal window to run the debugger.
+ let cmd = [g:debugger, '-tty', pty, a:cmd]
+ echomsg 'executing "' . join(cmd) . '"'
+ let gdbbuf = term_start(cmd, {
+ \ 'exit_cb': function('s:EndDebug'),
+ \ 'term_finish': 'close'
+ \ })
+endfunc
+
+func s:EndDebug(job, status)
+ exe 'bwipe! ' . s:ptybuf
+endfunc