aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/buffer.c
diff options
context:
space:
mode:
authorMarco Hinz <mh.codebro@gmail.com>2019-04-08 19:50:36 +0200
committerMarco Hinz <mh.codebro@gmail.com>2019-04-08 19:59:57 +0200
commita8d0062c67953d9e024a09d3d6daf062aefca887 (patch)
tree1bf1717640e5d7f8daab15343d5325ad73b7bee2 /src/nvim/buffer.c
parent5a81561e7afa9c26d2190677750e341694e17c91 (diff)
downloadrneovim-a8d0062c67953d9e024a09d3d6daf062aefca887.tar.gz
rneovim-a8d0062c67953d9e024a09d3d6daf062aefca887.tar.bz2
rneovim-a8d0062c67953d9e024a09d3d6daf062aefca887.zip
vim-patch:8.0.1763: :argedit does not reuse an empty unnamed buffer
Problem: :argedit does not reuse an empty unnamed buffer. Solution: Add the BLN_CURBUF flag and fix all the side effects. (Christian Brabandt) https://github.com/vim/vim/commit/46a53dfc29689c6a0d80e3820e8b0a48dba6b6ec
Diffstat (limited to 'src/nvim/buffer.c')
-rw-r--r--src/nvim/buffer.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index 8d075dfeae..9a58529736 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -1717,11 +1717,7 @@ buf_T * buflist_new(char_u *ffname, char_u *sfname, linenr_T lnum, int flags)
* buffer.)
*/
buf = NULL;
- if ((flags & BLN_CURBUF)
- && curbuf != NULL
- && curbuf->b_ffname == NULL
- && curbuf->b_nwindows <= 1
- && (curbuf->b_ml.ml_mfp == NULL || BUFEMPTY())) {
+ if ((flags & BLN_CURBUF) && curbuf_reusable()) {
buf = curbuf;
/* It's like this buffer is deleted. Watch out for autocommands that
* change curbuf! If that happens, allocate a new buffer anyway. */
@@ -1864,6 +1860,17 @@ buf_T * buflist_new(char_u *ffname, char_u *sfname, linenr_T lnum, int flags)
return buf;
}
+/// Return true if the current buffer is empty, unnamed, unmodified and used in
+/// only one window. That means it can be reused.
+bool curbuf_reusable(void)
+{
+ return (curbuf != NULL
+ && curbuf->b_ffname == NULL
+ && curbuf->b_nwindows <= 1
+ && (curbuf->b_ml.ml_mfp == NULL || BUFEMPTY())
+ && !curbufIsChanged());
+}
+
/*
* Free the memory for the options of a buffer.
* If "free_p_ff" is true also free 'fileformat', 'buftype' and