]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0192: drop: don't rewind when editing the same file v9.1.0192
authorChristian Brabandt <cb@256bit.org>
Wed, 20 Mar 2024 19:19:47 +0000 (20:19 +0100)
committerChristian Brabandt <cb@256bit.org>
Wed, 20 Mar 2024 19:20:39 +0000 (20:20 +0100)
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>
src/ex_cmds.c
src/testdir/dumps/Test_drop_modified_1.dump [new file with mode: 0644]
src/testdir/test_excmd.vim
src/version.c

index d0fc928e655d880040a755acf65da9eb307f2349..2527476a25055c981e8451defa5e1549ae8a4ce0 100644 (file)
@@ -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 (file)
index 0000000..bbd60c0
--- /dev/null
@@ -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| 
index 6a7829b78584f106480f0c24c9822d26c3f38374..221ceb0f0bdb2d5fcefd5da1b309c30c1079de2d 100644 (file)
@@ -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
index 348ec11769511eef8a408c4075636ce4e89e1896..dc97d9bda3157043e4221cedaafd7502a73616d7 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    192,
 /**/
     191,
 /**/