From 5ca1ac373ae62b37152cb6f85916b402eda520a5 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 4 Jul 2019 15:39:28 +0200 Subject: patch 8.1.1626: no test for closing a popup window with a modified buffer Problem: No test for closing a popup window with a modified buffer. Solution: Add a test. Add "popups" to getbufinfo(). --- runtime/doc/eval.txt | 8 +++++++- src/evalfunc.c | 23 ++++++++++++++++++++--- src/testdir/test_popupwin.vim | 27 +++++++++++++++++++++++++++ src/version.c | 2 ++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 7c457e34e..cd2149e9d 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -3140,7 +3140,11 @@ bufadd({name}) *bufadd()* number. Otherwise return the buffer number of the newly created buffer. When {name} is an empty string then a new buffer is always created. - The buffer will not have' 'buflisted' set. + The buffer will not have' 'buflisted' set and not be loaded + yet. To add some text to the buffer use this: > + let bufnr = bufadd('someName') + call bufload(bufnr) + call setbufline(bufnr, 1, ['some', 'text']) bufexists({expr}) *bufexists()* The result is a Number, which is |TRUE| if a buffer called @@ -4744,6 +4748,8 @@ getbufinfo([{dict}]) buffer-local variables. windows list of |window-ID|s that display this buffer + popups list of popup |window-ID|s that + display this buffer Examples: > for buf in getbufinfo() diff --git a/src/evalfunc.c b/src/evalfunc.c index 7c9860f8a..925040d2b 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -4509,10 +4509,10 @@ get_buffer_info(buf_T *buf) dict_add_number(dict, "hidden", buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0); - /* Get a reference to buffer variables */ + // Get a reference to buffer variables dict_add_dict(dict, "variables", buf->b_vars); - /* List of windows displaying this buffer */ + // List of windows displaying this buffer windows = list_alloc(); if (windows != NULL) { @@ -4522,6 +4522,23 @@ get_buffer_info(buf_T *buf) dict_add_list(dict, "windows", windows); } +#ifdef FEAT_TEXT_PROP + // List of popup windows displaying this buffer + windows = list_alloc(); + if (windows != NULL) + { + for (wp = first_popupwin; wp != NULL; wp = wp->w_next) + if (wp->w_buffer == buf) + list_append_number(windows, (varnumber_T)wp->w_id); + FOR_ALL_TABPAGES(tp) + for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next) + if (wp->w_buffer == buf) + list_append_number(windows, (varnumber_T)wp->w_id); + + dict_add_list(dict, "popups", windows); + } +#endif + #ifdef FEAT_SIGNS if (buf->b_signlist != NULL) { @@ -5685,7 +5702,7 @@ get_tabpage_info(tabpage_T *tp, int tp_idx) if (l != NULL) { for (wp = (tp == curtab) ? firstwin : tp->tp_firstwin; - wp; wp = wp->w_next) + wp != NULL; wp = wp->w_next) list_append_number(l, (varnumber_T)wp->w_id); dict_add_list(dict, "windows", l); } diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim index f7579f540..4e798c603 100644 --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -1710,3 +1710,30 @@ func Test_popupwin_width() endfor call popup_clear() endfunc + +func Test_popupwin_buf_close() + let buf = bufadd('Xtestbuf') + call bufload(buf) + call setbufline(buf, 1, ['just', 'some', 'lines']) + let winid = popup_create(buf, {}) + redraw + call assert_equal(3, popup_getpos(winid).height) + let bufinfo = getbufinfo(buf)[0] + call assert_equal(1, bufinfo.changed) + call assert_equal(0, bufinfo.hidden) + call assert_equal(0, bufinfo.listed) + call assert_equal(1, bufinfo.loaded) + call assert_equal([], bufinfo.windows) + call assert_equal([winid], bufinfo.popups) + + call popup_close(winid) + call assert_equal({}, popup_getpos(winid)) + let bufinfo = getbufinfo(buf)[0] + call assert_equal(1, bufinfo.changed) + call assert_equal(1, bufinfo.hidden) + call assert_equal(0, bufinfo.listed) + call assert_equal(1, bufinfo.loaded) + call assert_equal([], bufinfo.windows) + call assert_equal([], bufinfo.popups) + exe 'bwipe! ' .. buf +endfunc diff --git a/src/version.c b/src/version.c index 157e9ece2..e78733a17 100644 --- a/src/version.c +++ b/src/version.c @@ -777,6 +777,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1626, /**/ 1625, /**/ -- cgit v1.2.1