# HG changeset patch # User Bram Moolenaar # Date 1425581869 -3600 # Node ID 950e24f26ef8cc460c66238efce9104eaf424f79 # Parent e63659bed5c342c08d588b973b90d9b25e6a9581 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) diff --git a/src/normal.c b/src/normal.c --- 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) 2) + * foobar foobar + * + */ + cap->retval |= CA_NO_ADJ_OP_END; flag = current_tagblock(cap->oap, cap->count1, include); break; case 'p': /* "ap" = a paragraph */ diff --git a/src/search.c b/src/search.c --- 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; diff --git a/src/testdir/test53.in b/src/testdir/test53.in --- 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 -asdXasdfasdf- -asdfXasdfasdf- -asdXasdfasdf- +- +innertext object + SEARCH: foobar diff --git a/src/testdir/test53.ok b/src/testdir/test53.ok --- a/src/testdir/test53.ok +++ b/src/testdir/test53.ok @@ -11,6 +11,7 @@ voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd -- -asdfasdf- -- +- b bc diff --git a/src/version.c b/src/version.c --- 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,