Patch 8.0.1077
Problem:    No debugger making use of the terminal window.
Solution:   Add the term debugger plugin.  So far only displays the current
            line when stopped.
Files:      Filelist, runtime/pack/dist/opt/termdebug/plugin/termdebug.vim


*** ../vim-8.0.1076/Filelist    2017-08-11 17:56:16.044983391 +0200
--- Filelist    2017-08-26 22:19:36.282713790 +0200
***************
*** 638,643 ****
--- 638,644 ----
                runtime/pack/dist/opt/matchit/doc/tags \
                runtime/pack/dist/opt/shellmenu/plugin/shellmenu.vim \
                runtime/pack/dist/opt/swapmouse/plugin/swapmouse.vim \
+               runtime/pack/dist/opt/termdebug/plugin/termdebug.vim \
  
  # runtime files for all distributions without CR-NL translation
  RT_ALL_BIN =  \
*** ../vim-8.0.1076/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim        
1970-01-01 01:00:00.000000000 +0100
--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim        2017-09-08 
20:43:48.111321120 +0200
***************
*** 0 ****
--- 1,128 ----
+ " 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"
+ 
+ " The command that starts debugging, e.g. ":Termdebug vim".
+ " To end type "quit" in the gdb window.
+ command -nargs=* -complete=file Termdebug call s:StartDebug(<q-args>)
+ 
+ " Name of the gdb command, defaults to "gdb".
+ if !exists('debugger')
+   let debugger = 'gdb'
+ endif
+ 
+ " Sign used to highlight the line where the program has stopped.
+ sign define debugPC linehl=debugPC
+ if &background == 'light'
+   hi debugPC term=reverse ctermbg=lightblue guibg=lightblue
+ else
+   hi debugPC term=reverse ctermbg=darkblue guibg=darkblue
+ endif
+ let s:pc_id = 12
+ 
+ func s:StartDebug(cmd)
+   let s:startwin = win_getid(winnr())
+   let s:startsigncolumn = &signcolumn
+ 
+   " Open a terminal window without a job, to run the debugged program
+   let s:ptybuf = term_start('NONE', {
+       \ 'term_name': 'gdb program',
+       \ })
+   if s:ptybuf == 0
+     echoerr 'Failed to open the program terminal window'
+     return
+   endif
+   let pty = job_info(term_getjob(s:ptybuf))['tty_out']
+ 
+   " Create a hidden terminal window to communicate with gdb
+   let s:commbuf = term_start('NONE', {
+       \ 'term_name': 'gdb communication',
+       \ 'out_cb': function('s:CommOutput'),
+       \ 'hidden': 1,
+       \ })
+   if s:commbuf == 0
+     echoerr 'Failed to open the communication terminal window'
+     exe 'bwipe! ' . s:ptybuf
+     return
+   endif
+   let commpty = job_info(term_getjob(s:commbuf))['tty_out']
+ 
+   " 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',
+       \ })
+   if gdbbuf == 0
+     echoerr 'Failed to open the gdb terminal window'
+     exe 'bwipe! ' . s:ptybuf
+     exe 'bwipe! ' . s:commbuf
+     return
+   endif
+ 
+   " Connect gdb to the communication pty, using the GDB/MI interface
+   call term_sendkeys(gdbbuf, 'new-ui mi ' . commpty . "\r")
+ endfunc
+ 
+ func s:EndDebug(job, status)
+   exe 'bwipe! ' . s:ptybuf
+   exe 'bwipe! ' . s:commbuf
+   call setwinvar(s:startwin, '&signcolumn', s:startsigncolumn)
+ endfunc
+ 
+ " Handle a message received from gdb on the GDB/MI interface.
+ func s:CommOutput(chan, msg)
+   let msgs = split(a:msg, "\r")
+ 
+   for msg in msgs
+     " remove prefixed NL
+     if msg[0] == "\n"
+       let msg = msg[1:]
+     endif
+     if msg != ''
+       if msg =~ '^\*\(stopped\|running\)'
+       let wid = win_getid(winnr())
+ 
+       if win_gotoid(s:startwin)
+         if msg =~ '^\*stopped'
+           " TODO: proper parsing
+           let fname = substitute(msg, '.*fullname="\([^"]*\)".*', '\1', '')
+           let lnum = substitute(msg, '.*line="\([^"]*\)".*', '\1', '')
+           if lnum =~ '^[0-9]*$'
+             if expand('%:h') != fname
+               if &modified
+                 " TODO: find existing window
+                 exe 'split ' . fnameescape(fname)
+                 let s:startwin = win_getid(winnr())
+               else
+                 exe 'edit ' . fnameescape(fname)
+               endif
+             endif
+             exe lnum
+             exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC 
file=' . fnameescape(fname)
+             setlocal signcolumn=yes
+           endif
+         else
+           exe 'sign unplace ' . s:pc_id
+         endif
+ 
+         call win_gotoid(wid)
+       endif
+       endif
+     endif
+   endfor
+ endfunc
*** ../vim-8.0.1076/src/version.c       2017-09-08 20:46:55.902059559 +0200
--- src/version.c       2017-09-08 20:48:41.669350690 +0200
***************
*** 771,772 ****
--- 771,774 ----
  {   /* Add new patch number below this line */
+ /**/
+     1077,
  /**/

-- 
>From "know your smileys":
 :'-D   Laughing so much that they're crying

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui