]> granicus.if.org Git - vim/commitdiff
patch 8.1.1626: no test for closing a popup window with a modified buffer v8.1.1626
authorBram Moolenaar <Bram@vim.org>
Thu, 4 Jul 2019 13:39:28 +0000 (15:39 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 4 Jul 2019 13:39:28 +0000 (15:39 +0200)
Problem:    No test for closing a popup window with a modified buffer.
Solution:   Add a test.  Add "popups" to getbufinfo().

runtime/doc/eval.txt
src/evalfunc.c
src/testdir/test_popupwin.vim
src/version.c

index 7c457e34eda0aa56172afa3e68eff34fe25b422e..cd2149e9d794ff309ed31eab9b93b86036e1b70a 100644 (file)
@@ -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()
index 7c9860f8a1ee6dd88c2ee2f398d01ddf3a48090d..925040d2b04d9d9b7446db0453e9df283d54be7c 100644 (file)
@@ -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);
     }
index f7579f540727b7753294128fb3761afb64b9499a..4e798c60344a7d1d5e1ff16c3cd1f52c0394e84c 100644 (file)
@@ -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
index 157e9ece256eb9b967efa0ef71094a333a76afe0..e78733a17a21da12464b48811cdd84daa0e94dfa 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1626,
 /**/
     1625,
 /**/