vim-patch:8.1.0120: buffer 'modified' set even when :sort has no changes

Problem:    Buffer 'modified' set even when :sort has no changes.
Solution:   Only set 'modified' when lines are moved. (Jason Franklin)
dc9e955fb0
This commit is contained in:
Jan Edmund Lazo
2018-09-26 21:21:14 -04:00
parent fc18fad74f
commit 25e6d37705
2 changed files with 60 additions and 10 deletions

View File

@@ -424,6 +424,7 @@ void ex_sort(exarg_T *eap)
sort_abort = sort_ic = sort_rx = sort_nr = sort_flt = 0;
size_t format_found = 0;
bool change_occurred = false; // Buffer contents changed.
for (p = eap->arg; *p != NUL; ++p) {
if (ascii_iswhite(*p)) {
@@ -585,7 +586,15 @@ void ex_sort(exarg_T *eap)
// Insert the lines in the sorted order below the last one.
lnum = eap->line2;
for (i = 0; i < count; ++i) {
s = ml_get(nrs[eap->forceit ? count - i - 1 : i].lnum);
const linenr_T get_lnum = nrs[eap->forceit ? count - i - 1 : i].lnum;
// If the original line number of the line being placed is not the same
// as "lnum" (accounting for offset), we know that the buffer changed.
if (get_lnum + ((linenr_T)count - 1) != lnum) {
change_occurred = true;
}
s = ml_get(get_lnum);
if (!unique || i == 0
|| (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0) {
// Copy the line into a buffer, it may become invalid in
@@ -617,7 +626,9 @@ void ex_sort(exarg_T *eap)
} else if (deleted < 0) {
mark_adjust(eap->line2, MAXLNUM, -deleted, 0L, false);
}
changed_lines(eap->line1, 0, eap->line2 + 1, -deleted, true);
if (change_occurred || deleted != 0) {
changed_lines(eap->line1, 0, eap->line2 + 1, -deleted, true);
}
curwin->w_cursor.lnum = eap->line1;
beginline(BL_WHITE | BL_FIX);