changeset 17694:6f9cde96ee3c v8.1.1844

patch 8.1.1844: buffer no longer unloaded when adding text properties commit https://github.com/vim/vim/commit/45311b5274a6ac6e44235dfd4588c6b1bf0d4850 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Aug 13 22:27:32 2019 +0200 patch 8.1.1844: buffer no longer unloaded when adding text properties Problem: Buffer no longer unloaded when adding text properties to it. Solution: Do not create the memfile. (closes https://github.com/vim/vim/issues/4808)
author Bram Moolenaar <Bram@vim.org>
date Tue, 13 Aug 2019 22:30:06 +0200
parents cefb7da6a32c
children f06c184d5a5f
files runtime/doc/textprop.txt src/testdir/test_textprop.vim src/textprop.c src/version.c
diffstat 4 files changed, 33 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/textprop.txt
+++ b/runtime/doc/textprop.txt
@@ -322,6 +322,11 @@ will move accordingly.
 When text is deleted and a text property no longer includes any text, it is
 deleted.  However, a text property that was defined as zero-width will remain,
 unless the whole line is deleted.
+`								*E275*
+When a buffer is unloaded, all the text properties are gone.  There is no way
+to store the properties in a file.  You can only re-create them.  When a
+buffer is hidden the text is preserved and so are the text properties.  It is
+not possible to add text properties to an unloaded buffer.
 
 When using replace mode, the text properties stay on the same character
 positions, even though the characters themselves change.
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -823,3 +823,25 @@ func Test_textprop_remove_from_buf()
   bwipe! x
   close
 endfunc
+
+func Test_textprop_in_unloaded_buf()
+  edit Xaaa
+  call setline(1, 'aaa')
+  write
+  edit Xbbb
+  call setline(1, 'bbb')
+  write
+  let bnr = bufnr('')
+  edit Xaaa
+
+  call prop_type_add('ErrorMsg', #{highlight:'ErrorMsg'})
+  call assert_fails("call prop_add(1, 1, #{end_lnum: 1, endcol: 2, type: 'ErrorMsg', bufnr: bnr})", 'E275:')
+  exe 'buf ' .. bnr
+  call assert_equal('bbb', getline(1))
+  call assert_equal(0, prop_list(1)->len())
+
+  bwipe! Xaaa
+  bwipe! Xbbb
+  cal delete('Xaaa')
+  cal delete('Xbbb')
+endfunc
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -256,7 +256,10 @@ prop_add_common(
     }
 
     if (buf->b_ml.ml_mfp == NULL)
-	ml_open(buf);
+    {
+	emsg(_("E275: Cannot add text property to unloaded buffer"));
+	return;
+    }
 
     for (lnum = start_lnum; lnum <= end_lnum; ++lnum)
     {
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1844,
+/**/
     1843,
 /**/
     1842,