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 -- [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