Patch 8.1.1373
Problem: "[p" in Visual mode puts in wrong line.
Solution: Call nv_put() instead of duplicating the functionality.
(closes #4408)
Files: src/normal.c, src/testdir/test_put.vim
*** ../vim-8.1.1372/src/normal.c 2019-05-09 15:12:45.172723940 +0200
--- src/normal.c 2019-05-23 23:24:02.498494630 +0200
***************
*** 143,148 ****
--- 143,149 ----
static void nv_halfpage(cmdarg_T *cap);
static void nv_join(cmdarg_T *cap);
static void nv_put(cmdarg_T *cap);
+ static void nv_put_opt(cmdarg_T *cap, int fix_indent);
static void nv_open(cmdarg_T *cap);
#ifdef FEAT_NETBEANS_INTG
static void nv_nbcmd(cmdarg_T *cap);
***************
*** 6583,6639 ****
*/
else if (cap->nchar == 'p' || cap->nchar == 'P')
{
! if (!checkclearop(cap->oap))
! {
! int dir = (cap->cmdchar == ']' && cap->nchar == 'p')
! ? FORWARD : BACKWARD;
! int regname = cap->oap->regname;
! int was_visual = VIsual_active;
! int line_count = curbuf->b_ml.ml_line_count;
! pos_T start, end;
!
! if (VIsual_active)
! {
! start = LTOREQ_POS(VIsual, curwin->w_cursor)
! ? VIsual : curwin->w_cursor;
! end = EQUAL_POS(start,VIsual) ? curwin->w_cursor : VIsual;
! curwin->w_cursor = (dir == BACKWARD ? start : end);
! }
! # ifdef FEAT_CLIPBOARD
! adjust_clip_reg(®name);
! # endif
! prep_redo_cmd(cap);
!
! do_put(regname, dir, cap->count1, PUT_FIXINDENT);
! if (was_visual)
! {
! VIsual = start;
! curwin->w_cursor = end;
! if (dir == BACKWARD)
! {
! /* adjust lines */
! VIsual.lnum += curbuf->b_ml.ml_line_count - line_count;
! curwin->w_cursor.lnum +=
! curbuf->b_ml.ml_line_count - line_count;
! }
!
! VIsual_active = TRUE;
! if (VIsual_mode == 'V')
! {
! /* delete visually selected lines */
! cap->cmdchar = 'd';
! cap->nchar = NUL;
! cap->oap->regname = regname;
! nv_operator(cap);
! do_pending_operator(cap, 0, FALSE);
! }
! if (VIsual_active)
! {
! end_visual_mode();
! redraw_later(SOME_VALID);
! }
! }
! }
}
/*
--- 6584,6590 ----
*/
else if (cap->nchar == 'p' || cap->nchar == 'P')
{
! nv_put_opt(cap, TRUE);
}
/*
***************
*** 9290,9295 ****
--- 9241,9256 ----
static void
nv_put(cmdarg_T *cap)
{
+ nv_put_opt(cap, FALSE);
+ }
+
+ /*
+ * "P", "gP", "p" and "gp" commands.
+ * "fix_indent" is TRUE for "[p", "[P", "]p" and "]P".
+ */
+ static void
+ nv_put_opt(cmdarg_T *cap, int fix_indent)
+ {
int regname = 0;
void *reg1 = NULL, *reg2 = NULL;
int empty = FALSE;
***************
*** 9318,9325 ****
#endif
else
{
! dir = (cap->cmdchar == 'P'
! || (cap->cmdchar == 'g' && cap->nchar == 'P'))
? BACKWARD : FORWARD;
prep_redo_cmd(cap);
if (cap->cmdchar == 'g')
--- 9279,9293 ----
#endif
else
{
! if (fix_indent)
! {
! dir = (cap->cmdchar == ']' && cap->nchar == 'p')
! ? FORWARD : BACKWARD;
! flags |= PUT_FIXINDENT;
! }
! else
! dir = (cap->cmdchar == 'P'
! || (cap->cmdchar == 'g' && cap->nchar == 'P'))
? BACKWARD : FORWARD;
prep_redo_cmd(cap);
if (cap->cmdchar == 'g')
*** ../vim-8.1.1372/src/testdir/test_put.vim 2019-01-24 17:59:35.139217458
+0100
--- src/testdir/test_put.vim 2019-05-23 23:18:57.776076524 +0200
***************
*** 101,103 ****
--- 101,115 ----
delfunction Capture_p_error
bwipeout!
endfunc
+
+ func Test_put_p_indent_visual()
+ new
+ call setline(1, ['select this text', 'select that text'])
+ " yank "that" from the second line
+ normal 2Gwvey
+ " select "this" in the first line and put
+ normal k0wve[p
+ call assert_equal('select that text', getline(1))
+ call assert_equal('select that text', getline(2))
+ bwipe!
+ endfunc
*** ../vim-8.1.1372/src/version.c 2019-05-23 22:11:56.288893239 +0200
--- src/version.c 2019-05-23 23:27:09.009524667 +0200
***************
*** 769,770 ****
--- 769,772 ----
{ /* Add new patch number below this line */
+ /**/
+ 1373,
/**/
--
Don't Panic!
-- The Hitchhiker's Guide to the Galaxy
/// 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
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/201905232127.x4NLRtJv005107%40masaka.moolenaar.net.
For more options, visit https://groups.google.com/d/optout.