summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Brabandt <cb@256bit.org>2024-03-20 20:19:47 +0100
committerChristian Brabandt <cb@256bit.org>2024-03-20 20:20:39 +0100
commit978178823b7c62a0249411f3d1f584f8a3144c5d (patch)
treef7d0b3b53d643f638b410f01bca93fbba311e206
parent2680a074d4790abb372ecda658b0c455a6fe06cf (diff)
patch 9.1.0192: drop: don't rewind when editing the same filev9.1.0192
Problem: :drop tries to :rewind the argumentlist, which results in E37 (after v9.1.0046) Solution: instead of calling ex_rewind(), call open_buffer() only when re-using the initial empty buffer fixes: #14219 closes: #14220 Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r--src/ex_cmds.c3
-rw-r--r--src/testdir/dumps/Test_drop_modified_1.dump10
-rw-r--r--src/testdir/test_excmd.vim16
-rw-r--r--src/version.c2
4 files changed, 30 insertions, 1 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index d0fc928e65..2527476a25 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -5503,7 +5503,8 @@ ex_drop(exarg_T *eap)
buf_check_timestamp(curbuf, FALSE);
curbuf->b_p_ar = save_ar;
}
- ex_rewind(eap);
+ if (buf->b_ml.ml_flags & ML_EMPTY)
+ open_buffer(FALSE, eap, 0);
return;
}
}
diff --git a/src/testdir/dumps/Test_drop_modified_1.dump b/src/testdir/dumps/Test_drop_modified_1.dump
new file mode 100644
index 0000000000..bbd60c0888
--- /dev/null
+++ b/src/testdir/dumps/Test_drop_modified_1.dump
@@ -0,0 +1,10 @@
+>T+0&#ffffff0|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|e|d| |o|v|e|r| |t|h|e| |l|a|z|y| |d|o|g|s| @29
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|:+0#0000000&|d|r|o|p| |X|d|r|o|p|_|m|o|d|i|f|i|e|d|.|t|x|t| @32|1|,|1| @10|A|l@1|
diff --git a/src/testdir/test_excmd.vim b/src/testdir/test_excmd.vim
index 6a7829b785..221ceb0f0b 100644
--- a/src/testdir/test_excmd.vim
+++ b/src/testdir/test_excmd.vim
@@ -3,6 +3,7 @@
source check.vim
source shared.vim
source term_util.vim
+source screendump.vim
func Test_ex_delete()
new
@@ -738,4 +739,19 @@ func Test_ex_address_range_overflow()
call assert_fails(':--+foobar', 'E492:')
endfunc
+func Test_drop_modified_file()
+ CheckScreendump
+ let lines =<< trim END
+ call setline(1, 'The quick brown fox jumped over the lazy dogs')
+ END
+ call writefile([''], 'Xdrop_modified.txt', 'D')
+ call writefile(lines, 'Xtest_drop_modified', 'D')
+ let buf = RunVimInTerminal('-S Xtest_drop_modified Xdrop_modified.txt', {'rows': 10,'columns': 40})
+ call term_sendkeys(buf, ":drop Xdrop_modified.txt\<CR>")
+ call VerifyScreenDump(buf, 'Test_drop_modified_1', {})
+
+ " clean up
+ call StopVimInTerminal(buf)
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 348ec11769..dc97d9bda3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 192,
+/**/
191,
/**/
190,