# HG changeset patch # User Bram Moolenaar # Date 1565728206 -7200 # Node ID 6f9cde96ee3c9387af1d45972d4b61fea62f2265 # Parent cefb7da6a32c94e4f20728d71f4a8ba82fc4234f patch 8.1.1844: buffer no longer unloaded when adding text properties commit https://github.com/vim/vim/commit/45311b5274a6ac6e44235dfd4588c6b1bf0d4850 Author: Bram Moolenaar 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) diff --git a/runtime/doc/textprop.txt b/runtime/doc/textprop.txt --- 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. diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim --- 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 diff --git a/src/textprop.c b/src/textprop.c --- 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) { diff --git a/src/version.c b/src/version.c --- 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,