Hello,

--- Yegappan Lakshmanan <[EMAIL PROTECTED]> wrote:
> Hi Gary,
> 
> On 4/27/07, Gary Johnson <[EMAIL PROTECTED]> wrote:
> > On 2007-04-27, Gary Johnson <[EMAIL PROTECTED]> wrote:
> > > On 2007-04-26, Navdeep Parhar <[EMAIL PROTECTED]> wrote:
> > > > Hello,
> > > >
> > > > Currently :cscope has a variant :lcscope that allows the use of
> > > > the location list instead of the quickfix list.  However, :scscope
> > > > has no equivalent that uses the location list.  Please note that
> > > > :scs splits only if cscope returns some results, so :scs is not
> > > > the same as ":split cs".  Due to this reason ":split lcscope" can
> > > > not be used to get the same behaviour as the proposed :lscscope.
> > > >
> >
> > I'm confused.  I tried exercising this patch and I'm not getting the
> > results I expect, but I don't know if it's the patch, the behavior
> > of location lists, or me.
> >
> 
> This problem is caused by the patch for the ":lscs" command.
> 
> When the ":lcs" command is executed, a new location list is
> created for the current window and then the cursor is moved to the
> first entry in the location list.
> 
> The ":lscs" command splits the window after the location list is
> created. This results in the problem.
> 
> In your case,  when you executed the ":lscs" command in the
> first window, the new location list is added to the first window
> and then the window is split.
> 
> When you invoked the second "lscs" command, a new location
> list is added to the second window and then the window is split.
> 

This is correct.  The problem both times is that the split takes
place after the error list has been constructed.

I have reworked the patch a bit.  Now it splits the window
before constructing the error list.  I'd like to point out
that with this modification the behaviour if qf_init fails
will be different from what it is today.  The split will
have taken place by the time qf_init gets called.  Other
than this everything should mostly work as advertised.

New patch is attached to this email.

Regards,
Navdeep

> Also, when jumping to the match from the location list, the
> location list for the window before the split is used. This results
> in the second problem you saw after closing the windows.
> 
> When the location list support was added to Vim7, as the ":lscscope"
> command was not supported, this condition was not taken into
> account.
> 
> - Yegappan
> 

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 
Index: runtime/doc/if_cscop.txt
===================================================================
--- runtime/doc/if_cscop.txt	(revision 252)
+++ runtime/doc/if_cscop.txt	(working copy)
@@ -213,6 +213,11 @@
 'cscopequickfix' option is set, the location list for the current window is
 used instead of the quickfix list to show the cscope results.
 
+							*:lscscope* *:lsc*
+This command is same as the ":scscope" command, except when the
+'cscopequickfix' option is set, the location list for the current window is
+used instead of the quickfix list to show the cscope results.
+
 							*:cstag* *E257* *E562*
 If you use cscope as well as ctags, |:cstag| allows you to search one or
 the other before making a jump.  For example, you can choose to first
Index: runtime/doc/index.txt
===================================================================
--- runtime/doc/index.txt	(revision 252)
+++ runtime/doc/index.txt	(working copy)
@@ -1276,6 +1276,7 @@
 |:lpfile|	:lpf[ile]	go to last location in previous file
 |:lrewind|	:lr[ewind]	go to the specified location, default first one
 |:ls|		:ls		list all buffers
+|:lscscope|	:lsc[scope]	like ":scscope" but uses location list
 |:ltag|		:lt[ag]		jump to tag and add matching tags to the
 				location list
 |:lunmap|	:lu[nmap]	like ":unmap!" but includes Lang-Arg mode
Index: src/ex_cmds.h
===================================================================
--- src/ex_cmds.h	(revision 252)
+++ src/ex_cmds.h	(working copy)
@@ -581,6 +581,8 @@
 			RANGE|NOTADR|COUNT|TRLBAR),
 EX(CMD_ls,		"ls",		buflist_list,
 			BANG|TRLBAR|CMDWIN),
+EX(CMD_lscscope,	"lscscope",	do_scscope,
+			EXTRA|NOTRLCOM|SBOXOK),
 EX(CMD_move,		"move",		ex_copymove,
 			RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY),
 EX(CMD_mark,		"mark",		ex_mark,
Index: src/if_cscope.c
===================================================================
--- src/if_cscope.c	(revision 252)
+++ src/if_cscope.c	(working copy)
@@ -973,7 +973,7 @@
     }
 
     return cs_find_common(opt, pat, eap->forceit, TRUE,
-			  eap->cmdidx == CMD_lcscope);
+	eap->cmdidx == CMD_lcscope || eap->cmdidx == CMD_lscscope);
 } /* cs_find */
 
 
@@ -1115,23 +1115,23 @@
 	{
 	    cs_file_results(f, nummatches);
 	    fclose(f);
+# ifdef FEAT_WINDOWS
+	    if (postponed_split != 0)
+	    {
+		win_split(postponed_split > 0 ? postponed_split : 0,
+						   postponed_split_flags);
+#  ifdef FEAT_SCROLLBIND
+		curwin->w_p_scb = FALSE;
+#  endif
+		postponed_split = 0;
+	    }
+# endif
 	    if (use_ll)	    /* Use location list */
 		wp = curwin;
 	    /* '-' starts a new error list */
 	    if (qf_init(wp, tmp, (char_u *)"%f%*\\t%l%*\\t%m",
 							   *qfpos == '-') > 0)
 	    {
-# ifdef FEAT_WINDOWS
-		if (postponed_split != 0)
-		{
-		    win_split(postponed_split > 0 ? postponed_split : 0,
-						       postponed_split_flags);
-#  ifdef FEAT_SCROLLBIND
-		    curwin->w_p_scb = FALSE;
-#  endif
-		    postponed_split = 0;
-		}
-# endif
 		if (use_ll)
 		    /*
 		     * In the location list window, use the displayed location

Reply via email to