--- Bram Moolenaar [EMAIL PROTECTED] wrote:
Xavier de Gaye wrote:
During the compile-debug-edit development cycle, the signs placed in
the Vim buffers by the IDE with the netbeans protocol can have their
line numbers changed when the buffers are edited (a Vim sign sticks with
the line it has been set upon, and moves with it).
It would be nice to allow the IDE to query Vim for these updated line
numbers, so that when the IDE restarts gdb after a new make and the IDE
is capable of restoring the breakpoints set on a previous session, the
breakpoints and their corresponding signs can be automatically set by
the IDE to their new position.
The netbeans function documentation can be:
===
10.4 Functions and Replies *nb-functions*
getAnno serNum Return the line number of the annotation in the buffer
Arguments:
serNum serial number of this placed annotation
The reply is:
lnum = line number of the annotation
===
The implementation can be based on the existing sign_list_placed()
function in buffer.c. I can propose a patch if this request for change
is acceptable.
It makes sense. The only alternative is to listen to insert and
delete messages to keep track of the position, which probably requires
keeping a copy of the text.
Problem:Retrieving from Vim the signs positions set by the IDE
after they have been moved in the buffer.
Solution: Add the netbeans getAnno function for getting the new
signs positions after a file has been edited.
Files: src/netbeans.c
The following patch uses the E652 and E653 error codes that are
documented in netbeans.tx, but not used yet.
The patch has been tested with clewn in debug mode.
Index: runtime/doc/netbeans.txt
===
*** runtime/doc/netbeans.txt(revision 179)
--- runtime/doc/netbeans.txt(working copy)
***
*** 1,4
! *netbeans.txt* For Vim version 7.0. Last change: 2006 Mar 09
VIM REFERENCE MANUALby Gordon Prieur
--- 1,4
! *netbeans.txt* For Vim version 7.0. Last change: 2006 Nov 08
VIM REFERENCE MANUALby Gordon Prieur
***
*** 605,610
--- 605,619
getMark Not implemented.
+ getAnno serNum
+ Return the line number of the annotation in the buffer.
+ Argument:
+ serNum serial number of this placed annotation
+ The reply may be:
+ 123 lnumline number of the annotation
+ 123 invalid annotation serial number
+ New in version 2.3.
+
getModified When a buffer is specified: Return zero if the buffer does not
have changes, one if it does have changes.
When no buffer is specified (buffer number zero): Return the
Index: src/netbeans.c
===
*** src/netbeans.c (revision 179)
--- src/netbeans.c (working copy)
***
*** 1271,1276
--- 1271,1312
nb_reply_text(cmdno, text);
/* =*/
}
+ else if (streq((char *)cmd, getAnno))
+ {
+ int nilreply = 1;
+ #ifdef FEAT_SIGNS
+ int serNum;
+ long linenum;
+
+ if (buf == NULL || buf-bufp == NULL)
+ {
+ nbdebug((null bufp in getAnno));
+ EMSG(E652: null bufp in getAnno);
+ retval = FAIL;
+ }
+ else
+ {
+ cp = (char *)args;
+ serNum = strtol(cp, cp, 10);
+
+ linenum = (long)buf_findsign(buf-bufp, serNum);
+ if (linenum != 0)
+ {
+ nb_reply_nr(cmdno, linenum);
+ nilreply = 0;
+ }
+ else
+ {
+ nbdebug((invalid annotation number in getAnno));
+ EMSG(E653: invalid annotation number in getAnno);
+ retval = FAIL;
+ }
+ }
+ #endif
+ if (nilreply)
+ nb_reply_nil(cmdno);
+ /* =*/
+ }
else if (streq((char *)cmd, getLength))
{
long len = 0;
--
http://clewn.sourceforge.net gdb support in Vim