Mercurial > vim
changeset 17253:26e0352613ec v8.1.1626
patch 8.1.1626: no test for closing a popup window with a modified buffer
commit https://github.com/vim/vim/commit/5ca1ac373ae62b37152cb6f85916b402eda520a5
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jul 4 15:39:28 2019 +0200
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().
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 04 Jul 2019 15:45:05 +0200 |
parents | c46563862cd9 |
children | 45f7b54c884a |
files | runtime/doc/eval.txt src/evalfunc.c src/testdir/test_popupwin.vim src/version.c |
diffstat | 4 files changed, 56 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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()
--- 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_i 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); }
--- 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