home *** CD-ROM | disk | FTP | other *** search
- To: vim-dev@vim.org
- Subject: Patch 6.1.006
- Fcc: outbox
- From: Bram Moolenaar <Bram@moolenaar.net>
- MIME-Version: 1.0
- Content-Type: text/plain; charset=ISO-8859-1
- Content-Transfer-Encoding: 8bit
- ------------
-
- Patch 6.1.006
- Problem: When using "P" in Visual mode to put linewise selected text, the
- wrong text is deleted. (Jakub Turski)
- Solution: Put the text before the Visual area and correct the text to be
- deleted for the inserted lines.
- Also fix that "p" of linewise text in Visual block mode doesn't
- work correctly.
- Files: src/normal.c, src/ops.c
-
-
- *** ../vim61.005/src/normal.c Sun Mar 24 12:36:35 2002
- --- src/normal.c Wed Apr 3 22:08:14 2002
- ***************
- *** 7890,7911 ****
- {
- /* Putting in Visual mode: The put text replaces the selected
- * text. First put the register at the end of the Visual
- ! * selection, then delete the selected text. */
- curpos = curwin->w_cursor;
- if (VIsual_mode == Ctrl_V)
- {
- getvcols(curwin, &curwin->w_cursor, &VIsual, &left, &right);
- ! if (lt(VIsual, curwin->w_cursor))
- ! curwin->w_cursor = VIsual;
- coladvance(right);
- }
- ! else if (lt(curwin->w_cursor, VIsual))
- ! curwin->w_cursor = VIsual;
- if (VIsual_mode == 'v' && *p_sel == 'e')
- dir = BACKWARD;
- else
- {
- ! if (dir == BACKWARD)
- flags |= PUT_LINE_BACKWARD;
- dir = FORWARD;
- }
- --- 7890,7923 ----
- {
- /* Putting in Visual mode: The put text replaces the selected
- * text. First put the register at the end of the Visual
- ! * selection, then delete the selected text. In some cases the
- ! * register is put before the Visual selection. */
- ! if (lt(VIsual, curwin->w_cursor))
- ! {
- ! curbuf->b_visual_start = VIsual;
- ! curbuf->b_visual_end = curwin->w_cursor;
- ! }
- ! else
- ! {
- ! curbuf->b_visual_start = curwin->w_cursor;
- ! curbuf->b_visual_end = VIsual;
- ! }
- curpos = curwin->w_cursor;
- if (VIsual_mode == Ctrl_V)
- {
- getvcols(curwin, &curwin->w_cursor, &VIsual, &left, &right);
- ! curwin->w_cursor = curbuf->b_visual_start;
- coladvance(right);
- }
- ! else
- ! curwin->w_cursor = curbuf->b_visual_end;
- if (VIsual_mode == 'v' && *p_sel == 'e')
- dir = BACKWARD;
- else
- {
- ! /* Put linewise text above a characterwise or blockwise
- ! * selected Visual area; handled in do_put(). */
- ! if (dir == BACKWARD && VIsual_mode != 'V')
- flags |= PUT_LINE_BACKWARD;
- dir = FORWARD;
- }
- ***************
- *** 7923,7928 ****
- --- 7935,7952 ----
- #ifdef FEAT_VISUAL
- if (VIsual_active)
- {
- + /* If linewise text was put above the Visual area, need to correct
- + * the line numbers to shift the Visual area down. */
- + if ((flags & PUT_LINE_BACKWARD)
- + && curbuf->b_visual_start.lnum > curbuf->b_op_end.lnum)
- + {
- + linenr_T l;
- +
- + l = curbuf->b_op_end.lnum - curbuf->b_op_start.lnum + 1;
- + curpos.lnum += l;
- + VIsual.lnum += l;
- + }
- +
- /* Now delete the selected text. */
- cap->cmdchar = 'd';
- cap->nchar = NUL;
- *** ../vim61.005/src/ops.c Sat Mar 2 13:02:33 2002
- --- src/ops.c Wed Apr 3 22:27:05 2002
- ***************
- *** 2985,2992 ****
- y_array = y_current->y_array;
- }
-
- ! if ((flags & PUT_LINE_BACKWARD) && y_type == MLINE)
- ! dir = BACKWARD;
- if (flags & PUT_LINE) /* :put command */
- y_type = MLINE;
-
- --- 2985,3012 ----
- y_array = y_current->y_array;
- }
-
- ! #ifdef FEAT_VISUAL
- ! if (y_type == MLINE)
- ! {
- ! if (flags & PUT_LINE_BACKWARD)
- ! {
- ! /* "P" in Visual mode: Put before the Visual area instead of after
- ! * it. It's OK to change the cursor position here (special
- ! * case!). */
- ! dir = BACKWARD;
- ! curwin->w_cursor = curbuf->b_visual_start;
- ! }
- ! else if (VIsual_active && VIsual_mode == Ctrl_V)
- ! {
- ! /* "p" in Visual block mode with linewise text: put below the
- ! * block. */
- ! curwin->w_cursor = curbuf->b_visual_end;
- ! }
- ! curbuf->b_op_start = curwin->w_cursor; /* default for '[ mark */
- ! curbuf->b_op_end = curwin->w_cursor; /* default for '] mark */
- ! }
- ! #endif
- !
- if (flags & PUT_LINE) /* :put command */
- y_type = MLINE;
-
- *** ../vim61.005/src/version.c Sat Mar 30 20:03:55 2002
- --- src/version.c Wed Apr 3 22:29:25 2002
- ***************
- *** 608,609 ****
- --- 608,611 ----
- { /* Add new patch number below this line */
- + /**/
- + 6,
- /**/
-
- --
- "I simultaneously try to keep my head in the clouds and my feet on the
- ground. Sometimes it's a stretch, though." -- Larry Wall
-
- /// Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net \\\
- /// Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim \\\
- \\\ Project leader for A-A-P -- http://www.a-a-p.org ///
- \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
-