To: vim_dev@googlegroups.com Subject: Patch 7.4.085 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.085 Problem: When inserting text in Visual block mode and moving the cursor the wrong text gets repeated in other lines. Solution: Use the '[ mark to find the start of the actually inserted text. (Christian Brabandt) Files: src/ops.c, src/testdir/test39.in, src/testdir/test39.ok *** ../vim-7.4.084/src/ops.c 2013-11-05 07:12:59.000000000 +0100 --- src/ops.c 2013-11-11 01:23:14.000000000 +0100 *************** *** 2640,2645 **** --- 2640,2670 ---- { struct block_def bd2; + /* The user may have moved the cursor before inserting something, try + * to adjust the block for that. */ + if (oap->start.lnum == curbuf->b_op_start.lnum) + { + if (oap->op_type == OP_INSERT + && oap->start.col != curbuf->b_op_start.col) + { + oap->start.col = curbuf->b_op_start.col; + pre_textlen -= getviscol2(oap->start.col, oap->start.coladd) + - oap->start_vcol; + oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd); + } + else if (oap->op_type == OP_APPEND + && oap->end.col >= curbuf->b_op_start.col) + { + oap->start.col = curbuf->b_op_start.col; + /* reset pre_textlen to the value of OP_INSERT */ + pre_textlen += bd.textlen; + pre_textlen -= getviscol2(oap->start.col, oap->start.coladd) + - oap->start_vcol; + oap->start_vcol = getviscol2(oap->start.col, oap->start.coladd); + oap->op_type = OP_INSERT; + } + } + /* * Spaces and tabs in the indent may have changed to other spaces and * tabs. Get the starting column again and correct the length. *** ../vim-7.4.084/src/testdir/test39.in 2013-11-04 01:41:11.000000000 +0100 --- src/testdir/test39.in 2013-11-11 01:20:51.000000000 +0100 *************** *** 19,24 **** --- 19,28 ---- :" Test block-change G$khhhhhkkcmno :$-4,$w! test.out + :" Test block-insert using cursor keys for movement + /^aaaa/ + :exe ":norm! l\jjjlllI\\ \" + :/^aa/,/^$/w >> test.out :" gUe must uppercase a whole word, also when ß changes to SS Gothe youtußeuu endYpk0wgUe :" gUfx must uppercase until x, inclusive. *************** *** 40,45 **** --- 44,54 ---- :qa! ENDTEST + aaaaaa + bbbbbb + cccccc + dddddd + abcdefghijklm abcdefghijklm abcdefghijklm *** ../vim-7.4.084/src/testdir/test39.ok 2013-11-04 01:41:11.000000000 +0100 --- src/testdir/test39.ok 2013-11-11 01:20:51.000000000 +0100 *************** *** 3,8 **** --- 3,13 ---- axyzqqqqef mno ghijklm axyzqqqqefgmnoklm abcdqqqqijklm + aaa aaa + bbb bbb + ccc ccc + ddd ddd + the YOUTUSSEUU end - yOUSSTUSSEXu - THE YOUTUSSEUU END *** ../vim-7.4.084/src/version.c 2013-11-11 01:05:43.000000000 +0100 --- src/version.c 2013-11-11 01:18:01.000000000 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 85, /**/ -- SOLDIER: What? Ridden on a horse? ARTHUR: Yes! SOLDIER: You're using coconuts! "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@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 ///