David Bürgin wrote:

> On Sunday, June 3, 2012 10:51:27 PM UTC+2, glts wrote:
> > Hello list
> > 
> > The "|" command behaves strangely when used with ":normal", 'virtualedit'
> > set to "all", and tab characters present. This is in Vim 7.3. Demo:
> > 
> > Some test text (2 lines):
> > 
> >     <-- a tab char
> > hello   more text
> > 
> > Set 'virtualedit' to "all". Press the following keys in normal mode to see
> > expected behaviour (cursor is on the first line).
> > 
> > 6|^Vj8|
> > 
> > A Visual block (the whitespace between the two text columns) is selected.
> > 
> > Now do the same from the command line:
> > 
> > :normal 6|^Vj8|
> > 
> > The "6|" part is ignored and instead the current cursor column is used as 
> > the
> > starting point for the Visual selection. This means that the result is
> > different from the one in "real" normal mode, and is effectively dependent 
> > on
> > the cursor position.
> > 
> > I apologize if this has been brought up before or is invalid. Is this a bug 
> > and
> > has it been resolved?
> > 
> > Thank you!
> 
> Hello list
> 
> Here's a fix.
> 
> *** normal.c  2012-08-12 11:59:25.216786647 +0200
> --- normal.c.mod      2012-08-12 12:07:22.216779090 +0200
> ***************
> *** 7786,7792 ****
> --- 7786,7795 ----
>        * virtualedit.  Recalculate curwin->w_cursor to avoid bad hilighting.
>        */
>       if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB)
> +     {
> +     validate_virtcol();
>       coladvance(curwin->w_virtcol);
> +     }
>   #endif
>       VIsual = curwin->w_cursor;
>   
> 
> Root cause: validate_cursor() is never called in between "|" and "^V".
> 
> ":normal" executes normal commands in a loop which uses 
> update_topline_cursor() to update the cursor. The pipe command does not call 
> validate_cursor() by itself nor does it set w_set_curswant to TRUE. Thus it 
> manages to get through update_topline_cursor() and arrive at 
> nv_start_visual_mode() without ever having adjusted curwin->w_virtcol.
> 
> The patch fixes this. Or perhaps it would be better to fix it inside
> nv_pipe()? Anyway, here it is. 

Thanks for the patch.  I'll look into it soon.

-- 
hundred-and-one symptoms of being an internet addict:
237. You tattoo your email address on your forehead.

 /// Bram Moolenaar -- b...@moolenaar.net -- 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

Raspunde prin e-mail lui