--- 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 MANUAL    by Gordon Prieur
--- 1,4 ----
! *netbeans.txt*  For Vim version 7.0.  Last change: 2006 Nov 08


                  VIM REFERENCE MANUAL    by 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 lnum        line 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

Reply via email to