mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.0.0421: diff mode wrong when adding line at end of buffer
Problem: Diff mode is displayed wrong when adding a line at the end of a
buffer.
Solution: Adjust marks in diff mode. (James McCoy, closes vim/vim#1329)
f58a8475e1
This commit is contained in:
parent
28998cfd81
commit
808f504305
@ -749,8 +749,9 @@ open_line (
|
||||
// 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.
|
||||
if (curwin->w_cursor.lnum + 1 < curbuf->b_ml.ml_line_count) {
|
||||
// be marks there. But still needed in diff mode.
|
||||
if (curwin->w_cursor.lnum + 1 < curbuf->b_ml.ml_line_count
|
||||
|| curwin->w_p_diff) {
|
||||
mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L, false);
|
||||
}
|
||||
did_append = true;
|
||||
@ -1864,8 +1865,8 @@ void 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.
|
||||
if (lnum + count < curbuf->b_ml.ml_line_count) {
|
||||
// be marks there. But it's still needed in diff mode.
|
||||
if (lnum + count < curbuf->b_ml.ml_line_count || curwin->w_p_diff) {
|
||||
mark_adjust(lnum + 1, (linenr_T)MAXLNUM, count, 0L, false);
|
||||
}
|
||||
changed_lines(lnum + 1, 0, lnum + 1, count);
|
||||
|
@ -3177,9 +3177,9 @@ error:
|
||||
curbuf->b_op_start.lnum++;
|
||||
}
|
||||
// Skip mark_adjust when adding lines after the last one, there
|
||||
// can't be marks there.
|
||||
// can't be marks there. But still needed in diff mode.
|
||||
if (curbuf->b_op_start.lnum + (y_type == kMTCharWise) - 1 + nr_lines
|
||||
< curbuf->b_ml.ml_line_count) {
|
||||
< curbuf->b_ml.ml_line_count || curwin->w_p_diff) {
|
||||
mark_adjust(curbuf->b_op_start.lnum + (y_type == kMTCharWise),
|
||||
(linenr_T)MAXLNUM, nr_lines, 0L, false);
|
||||
}
|
||||
|
@ -272,3 +272,23 @@ func Test_setting_cursor()
|
||||
call delete('Xtest1')
|
||||
call delete('Xtest2')
|
||||
endfunc
|
||||
|
||||
func Test_diff_lastline()
|
||||
enew!
|
||||
only!
|
||||
call setline(1, ['This is a ', 'line with five ', 'rows'])
|
||||
diffthis
|
||||
botright vert new
|
||||
call setline(1, ['This is', 'a line with ', 'four rows'])
|
||||
diffthis
|
||||
1
|
||||
call feedkeys("Je a\<CR>", 'tx')
|
||||
call feedkeys("Je a\<CR>", 'tx')
|
||||
let w1lines = winline()
|
||||
wincmd w
|
||||
$
|
||||
let w2lines = winline()
|
||||
call assert_equal(w2lines, w1lines)
|
||||
bwipe!
|
||||
bwipe!
|
||||
endfunc
|
||||
|
Loading…
Reference in New Issue
Block a user