changeset 6661:950e24f26ef8 v7.4.655

updated for version 7.4.655 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)
author Bram Moolenaar <bram@vim.org>
date Thu, 05 Mar 2015 19:57:49 +0100
parents e63659bed5c3
children 5e7cbaa2417b
files src/normal.c src/search.c src/testdir/test53.in src/testdir/test53.ok src/version.c
diffstat 5 files changed, 27 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/normal.c
+++ b/src/normal.c
@@ -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 */
--- a/src/search.c
+++ b/src/search.c
@@ -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;
 
--- a/src/testdir/test53.in
+++ b/src/testdir/test53.in
@@ -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
--- a/src/testdir/test53.ok
+++ b/src/testdir/test53.ok
@@ -11,6 +11,7 @@ voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd
 -<b></b>-
 -<b>asdfasdf</b>-
 --
+-<b></b>
 </begin>
 b
 bc
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    655,
+/**/
     654,
 /**/
     653,