]> granicus.if.org Git - vim/commitdiff
patch 8.1.1430: popup window option "wrap" not supported v8.1.1430
authorBram Moolenaar <Bram@vim.org>
Thu, 30 May 2019 20:07:36 +0000 (22:07 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 30 May 2019 20:07:36 +0000 (22:07 +0200)
Problem:    Popup window option "wrap" not supported.
Solution:   Implement it.

src/popupwin.c
src/testdir/dumps/Test_popupwin_nowrap.dump [new file with mode: 0644]
src/testdir/dumps/Test_popupwin_wrap.dump [new file with mode: 0644]
src/testdir/test_popupwin.vim
src/version.c

index a5c14b0f74c1da9194e3524ef8bea5bf9595cdf6..ef4609add90f85fc4ca1d798668a8d568a7d9be2 100644 (file)
@@ -109,10 +109,9 @@ get_pos_options(win_T *wp, dict_T *dict)
     static void
 apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict, int atcursor)
 {
-#if defined(FEAT_TIMERS)
-    int            nr;
-#endif
-    char_u  *str;
+    int                nr;
+    char_u     *str;
+    dictitem_T *di;
 
     wp->w_minwidth = dict_get_number(dict, (char_u *)"minwidth");
     wp->w_minheight = dict_get_number(dict, (char_u *)"minheight");
@@ -158,10 +157,17 @@ apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict, int atcursor)
     }
 #endif
 
+    // Option values resulting in setting an option.
     str = dict_get_string(dict, (char_u *)"highlight", TRUE);
     if (str != NULL)
        set_string_option_direct_in_win(wp, (char_u *)"wincolor", -1,
                                                   str, OPT_FREE|OPT_LOCAL, 0);
+    di = dict_find(dict, (char_u *)"wrap", -1);
+    if (di != NULL)
+    {
+       nr = dict_get_number(dict, (char_u *)"wrap");
+       wp->w_p_wrap = nr != 0;
+    }
 }
 
 /*
diff --git a/src/testdir/dumps/Test_popupwin_nowrap.dump b/src/testdir/dumps/Test_popupwin_nowrap.dump
new file mode 100644 (file)
index 0000000..6088d3b
--- /dev/null
@@ -0,0 +1,10 @@
+>1+0&#ffffff0| @73
+|2| @73
+|3| @17|a+0#0000001#ffd7ff255| |l|o|n|g| |l|i|n| +0#0000000#ffffff0@45
+|4| @73
+|5| @73
+|6| @73
+|7| @73
+|8| @73
+|9| @73
+@57|1|,|1| @10|T|o|p| 
diff --git a/src/testdir/dumps/Test_popupwin_wrap.dump b/src/testdir/dumps/Test_popupwin_wrap.dump
new file mode 100644 (file)
index 0000000..3f7b000
--- /dev/null
@@ -0,0 +1,10 @@
+>1+0&#ffffff0| @73
+|2| @73
+|3| @17|a+0#0000001#ffd7ff255| |l|o|n|g| |l|i|n| +0#0000000#ffffff0@45
+|4| @17|e+0#0000001#ffd7ff255| |t|h|a|t| |w|o|n| +0#0000000#ffffff0@45
+|5| @17|t+0#0000001#ffd7ff255| |f|i|t| @4| +0#0000000#ffffff0@45
+|6| @73
+|7| @73
+|8| @73
+|9| @73
+@57|1|,|1| @10|T|o|p| 
index ee188e39c3f92b1b89b060dd5f7f2719136a6a76..c5fdb6e875d29c40ff8ec5ef4c3fe55504b5615e 100644 (file)
@@ -84,18 +84,19 @@ func Test_popup_with_syntax_setbufvar()
   if !CanRunVimInTerminal()
     return
   endif
-  call writefile([
-       \ "call setline(1, range(1, 100))",
-       \ "hi PopupColor ctermbg=lightgrey",
-       \ "let winid = popup_create([",
-       \ "\\ '#include <stdio.h>',",
-       \ "\\ 'int main(void)',",
-       \ "\\ '{',",
-       \ "\\ '    printf(567);',",
-       \ "\\ '}',",
-       \ "\\], {'line': 3, 'col': 21, 'highlight': 'PopupColor'})",
-       \ "call setbufvar(winbufnr(winid), '&syntax', 'cpp')",
-       \], 'XtestPopup')
+  let lines =<< trim END
+       call setline(1, range(1, 100))
+       hi PopupColor ctermbg=lightgrey
+       let winid = popup_create([
+           \ '#include <stdio.h>',
+           \ 'int main(void)',
+           \ '{',
+           \ '    printf(567);',
+           \ '}',
+           \], {'line': 3, 'col': 21, 'highlight': 'PopupColor'})
+       call setbufvar(winbufnr(winid), '&syntax', 'cpp')
+  END
+  call writefile(lines, 'XtestPopup')
   let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
   call VerifyScreenDump(buf, 'Test_popupwin_11', {})
 
@@ -104,6 +105,44 @@ func Test_popup_with_syntax_setbufvar()
   call delete('XtestPopup')
 endfunc
 
+func Test_popup_with_wrap()
+  if !CanRunVimInTerminal()
+    return
+  endif
+  let lines =<< trim END
+        call setline(1, range(1, 100))
+        let winid = popup_create(
+          \ 'a long line that wont fit',
+          \ {'line': 3, 'col': 20, 'maxwidth': 10, 'wrap': 1})
+  END
+  call writefile(lines, 'XtestPopup')
+  let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
+  call VerifyScreenDump(buf, 'Test_popupwin_wrap', {})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('XtestPopup')
+endfunc
+
+func Test_popup_without_wrap()
+  if !CanRunVimInTerminal()
+    return
+  endif
+  let lines =<< trim END
+        call setline(1, range(1, 100))
+        let winid = popup_create(
+          \ 'a long line that wont fit',
+          \ {'line': 3, 'col': 20, 'maxwidth': 10, 'wrap': 0})
+  END
+  call writefile(lines, 'XtestPopup')
+  let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10})
+  call VerifyScreenDump(buf, 'Test_popupwin_nowrap', {})
+
+  " clean up
+  call StopVimInTerminal(buf)
+  call delete('XtestPopup')
+endfunc
+
 func Test_popup_time()
   if !has('timers')
     return
@@ -156,19 +195,19 @@ func Test_popup_hide()
   redraw
   let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
   call assert_equal('world', line)
-  call assert_equal(1, popup_getposition(winid).visible)
+  call assert_equal(1, popup_getpos(winid).visible)
 
   call popup_hide(winid)
   redraw
   let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
   call assert_equal('hello', line)
-  call assert_equal(0, popup_getposition(winid).visible)
+  call assert_equal(0, popup_getpos(winid).visible)
 
   call popup_show(winid)
   redraw
   let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
   call assert_equal('world', line)
-  call assert_equal(1, popup_getposition(winid).visible)
+  call assert_equal(1, popup_getpos(winid).visible)
 
 
   call popup_close(winid)
@@ -216,7 +255,7 @@ func Test_popup_move()
   bwipe!
 endfunc
 
-func Test_popup_getposition()
+func Test_popup_getpos()
   let winid = popup_create('hello', {
     \ 'line': 2,
     \ 'col': 3,
@@ -224,7 +263,7 @@ func Test_popup_getposition()
     \ 'minheight': 11,
     \})
   redraw
-  let res = popup_getposition(winid)
+  let res = popup_getpos(winid)
   call assert_equal(2, res.line)
   call assert_equal(3, res.col)
   call assert_equal(10, res.width)
@@ -246,7 +285,7 @@ func Test_popup_width_longest()
   for test in tests
     let winid = popup_create(test[0], {'line': 2, 'col': 3})
     redraw
-    let position = popup_getposition(winid)
+    let position = popup_getpos(winid)
     call assert_equal(test[1], position.width)
     call popup_close(winid)
   endfor
@@ -262,12 +301,12 @@ func Test_popup_wraps()
     let winid = popup_create(test[0],
          \ {'line': 2, 'col': 3, 'maxwidth': 12})
     redraw
-    let position = popup_getposition(winid)
+    let position = popup_getpos(winid)
     call assert_equal(test[1], position.width)
     call assert_equal(test[2], position.height)
 
     call popup_close(winid)
-    call assert_equal({}, popup_getposition(winid))
+    call assert_equal({}, popup_getpos(winid))
   endfor
 endfunc
 
@@ -382,5 +421,23 @@ func Test_popup_atcursor()
   call assert_equal('xvimxxxxxxxxxxxxx', line)
   call popup_close(winid)
 
+  " just enough room above
+  call cursor(3, 3)
+  redraw
+  let winid = popup_atcursor(['vim', 'is great'], {})
+  redraw
+  let pos = popup_getpos(winid)
+  call assert_equal(1, pos.line)
+  call popup_close(winid)
+
+  " not enough room above, popup goes below the cursor
+  call cursor(3, 3)
+  redraw
+  let winid = popup_atcursor(['vim', 'is', 'great'], {})
+  redraw
+  let pos = popup_getpos(winid)
+  call assert_equal(4, pos.line)
+  call popup_close(winid)
+
   bwipe!
 endfunc
index c3b96e933173e1dc8c6281b8d8c59a534b35672d..2f05cea8e71f8347bc72cc44077af3b2284ff216 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1430,
 /**/
     1429,
 /**/