summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Simmons <simmsbra@gmail.com>2023-01-17 19:48:07 +0000
committerBram Moolenaar <Bram@vim.org>2023-01-17 19:48:07 +0000
commitda3dd7d857ba4fb4bf408dedd1d9d6a2d5e2ae9f (patch)
tree4708aeb8921599d5e043349a0c8b9d7000b705dc
parent66bb9ae70f7371456ed76518076d2a344f8ab417 (diff)
downloadvim-git-da3dd7d857ba4fb4bf408dedd1d9d6a2d5e2ae9f.tar.gz
patch 9.0.1213: adding a line below the last one does not expand foldv9.0.1213
Problem: Adding a line below the last one does not expand fold. Solution: Do not skip mark_adjust() when adding lines below the last one. (Brandon Simmons, closes #11832, closes #10698)
-rw-r--r--src/change.c18
-rw-r--r--src/register.c10
-rw-r--r--src/testdir/test_fold.vim13
-rw-r--r--src/version.c2
4 files changed, 18 insertions, 25 deletions
diff --git a/src/change.c b/src/change.c
index dc68d3cf7..1e7bdd6bd 100644
--- a/src/change.c
+++ b/src/change.c
@@ -772,14 +772,7 @@ appended_lines(linenr_T lnum, long count)
void
appended_lines_mark(linenr_T lnum, long count)
{
- // Skip mark_adjust when adding a line after the last one, there can't
- // be marks there. But it's still needed in diff mode.
- if (lnum + count < curbuf->b_ml.ml_line_count
-#ifdef FEAT_DIFF
- || curwin->w_p_diff
-#endif
- )
- mark_adjust(lnum + 1, (linenr_T)MAXLNUM, count, 0L);
+ mark_adjust(lnum + 1, (linenr_T)MAXLNUM, count, 0L);
changed_lines(lnum + 1, 0, lnum + 1, count);
}
@@ -2142,14 +2135,7 @@ open_line(
goto theend;
// Postpone calling changed_lines(), because it would mess up folding
// with markers.
- // Skip mark_adjust when adding a line after the last one, there can't
- // be marks there. But still needed in diff mode.
- if (curwin->w_cursor.lnum + 1 < curbuf->b_ml.ml_line_count
-#ifdef FEAT_DIFF
- || curwin->w_p_diff
-#endif
- )
- mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
+ mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
did_append = TRUE;
#ifdef FEAT_PROP_POPUP
if ((State & MODE_INSERT) && (State & VREPLACE_FLAG) == 0)
diff --git a/src/register.c b/src/register.c
index bc687c0b1..3454cfaa6 100644
--- a/src/register.c
+++ b/src/register.c
@@ -2208,15 +2208,7 @@ error:
if (dir == FORWARD)
curbuf->b_op_start.lnum++;
}
- // Skip mark_adjust when adding lines after the last one, there
- // can't be marks there. But still needed in diff mode.
- if (curbuf->b_op_start.lnum + (y_type == MCHAR) - 1 + nr_lines
- < curbuf->b_ml.ml_line_count
-#ifdef FEAT_DIFF
- || curwin->w_p_diff
-#endif
- )
- mark_adjust(curbuf->b_op_start.lnum + (y_type == MCHAR),
+ mark_adjust(curbuf->b_op_start.lnum + (y_type == MCHAR),
(linenr_T)MAXLNUM, nr_lines, 0L);
// note changed text for displaying and folding
diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim
index f915a6613..7f75e9197 100644
--- a/src/testdir/test_fold.vim
+++ b/src/testdir/test_fold.vim
@@ -1683,4 +1683,17 @@ func Test_indent_with_L_command()
bwipe!
endfunc
+" Make sure that when there is a fold at the bottom of the buffer and a newline
+" character is appended to the line, the fold gets expanded (instead of the new
+" line not being part of the fold).
+func Test_expand_fold_at_bottom_of_buffer()
+ new
+ " create a fold on the only line
+ fold
+ execute "normal A\<CR>"
+ call assert_equal([1, 1], range(1, 2)->map('foldlevel(v:val)'))
+
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 3496b3af8..ae5de3519 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1213,
+/**/
1212,
/**/
1211,