]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.655 v7.4.655
authorBram Moolenaar <Bram@vim.org>
Thu, 5 Mar 2015 18:57:49 +0000 (19:57 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 5 Mar 2015 18:57:49 +0000 (19:57 +0100)
Problem:    Text deleted by "dit" depends on indent of closing tag.
            (Jan Parthey)
Solution:   Do not adjust oap->end in do_pending_operator(). (Christian
            Brabandt)

src/normal.c
src/search.c
src/testdir/test53.in
src/testdir/test53.ok
src/version.c

index 987705d4c68b0b405f0072bc630aed1bd3dc293b..d173c737b9b533dbc34e7262dcca50b9a2bc29e7 100644 (file)
@@ -9198,6 +9198,14 @@ nv_object(cap)
                flag = current_block(cap->oap, cap->count1, include, '<', '>');
                break;
        case 't': /* "at" = a tag block (xml and html) */
+               /* Do not adjust oap->end in do_pending_operator()
+                * otherwise there are different results for 'dit'
+                * (note leading whitespace in last line):
+                * 1) <b>      2) <b>
+                *    foobar      foobar
+                *    </b>            </b>
+                */
+               cap->retval |= CA_NO_ADJ_OP_END;
                flag = current_tagblock(cap->oap, cap->count1, include);
                break;
        case 'p': /* "ap" = a paragraph */
index 3276a77b7a9da96a098ab9f90c95a488c9a6b338..8beacbbc3fa52f7ada711951d0fdcfa0d8ad2ef1 100644 (file)
@@ -1063,7 +1063,7 @@ first_submatch(rp)
  * Careful: If spats[0].off.line == TRUE and spats[0].off.off == 0 this
  * makes the movement linewise without moving the match position.
  *
- * return 0 for failure, 1 for found, 2 for found and line offset added
+ * Return 0 for failure, 1 for found, 2 for found and line offset added.
  */
     int
 do_search(oap, dirc, pat, count, options, tm)
@@ -3781,6 +3781,7 @@ current_tagblock(oap, count_arg, include)
     int                do_include = include;
     int                save_p_ws = p_ws;
     int                retval = FAIL;
+    int                is_inclusive = TRUE;
 
     p_ws = FALSE;
 
@@ -3895,8 +3896,15 @@ again:
     }
     else
     {
-       /* Exclude the '<' of the end tag. */
-       if (*ml_get_cursor() == '<')
+       char_u *c = ml_get_cursor();
+
+       /* Exclude the '<' of the end tag.
+        * If the closing tag is on new line, do not decrement cursor, but
+        * make operation exclusive, so that the linefeed will be selected */
+       if (*c == '<' && !VIsual_active && curwin->w_cursor.col == 0)
+           /* do not decrement cursor */
+           is_inclusive = FALSE;
+       else if (*c == '<')
            dec_cursor();
     }
     end_pos = curwin->w_cursor;
@@ -3950,7 +3958,7 @@ again:
            oap->inclusive = FALSE;
        }
        else
-           oap->inclusive = TRUE;
+           oap->inclusive = is_inclusive;
     }
     retval = OK;
 
index 8ca9c9ed291236877fbc154da7d263df3a8edceb..7c35b2e8537e1e61170a2549a1dbfad59b9b957a 100644 (file)
@@ -23,6 +23,7 @@ jfXdit
 0fXdit
 fXdat
 0fXdat
+dit
 :"
 :put =matchstr(\"abcd\", \".\", 0, 2) " b
 :put =matchstr(\"abcd\", \"..\", 0, 2) " bc
@@ -97,6 +98,9 @@ voo "nah" sdf " asdf" sdf " sdf" sd
 -<b>asdX<i>a<i />sdf</i>asdf</b>-
 -<b>asdf<i>Xasdf</i>asdf</b>-
 -<b>asdX<i>as<b />df</i>asdf</b>-
+-<b>
+innertext object
+</b>
 </begin>
 SEARCH:
 foobar
index 0c0b9ded1624bd0edec476c202f041ca9bf55f71..05206972a49cd46c9a13b298cb9f2f9378cc8284 100644 (file)
@@ -11,6 +11,7 @@ voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd
 -<b></b>-
 -<b>asdfasdf</b>-
 --
+-<b></b>
 </begin>
 b
 bc
index a814baf361a18c6769a3426040f4488b019137ca..81f4d4122b4285c25094141a958f965e4c1c1832 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    655,
 /**/
     654,
 /**/