diff options
Diffstat (limited to 'data/vim/patches/8.1.1410')
-rw-r--r-- | data/vim/patches/8.1.1410 | 553 |
1 files changed, 0 insertions, 553 deletions
diff --git a/data/vim/patches/8.1.1410 b/data/vim/patches/8.1.1410 deleted file mode 100644 index 264a99955..000000000 --- a/data/vim/patches/8.1.1410 +++ /dev/null @@ -1,553 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.1410 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.1410 -Problem: Popup_move() is not implemented yet. -Solution: Implement it. (Yasuhiro Matsumoto, closes #4441) Improve the - positioning and resizing. -Files: runtime/doc/popup.txt, src/evalfunc.c, src/popupwin.c, - src/screen.c, src/structs.h, src/proto/popupwin.pro, - src/testdir/test_popupwin.vim, - src/testdir/dumps/Test_popupwin_05.dump - - -*** ../vim-8.1.1409/runtime/doc/popup.txt 2019-05-26 23:32:03.179678024 +0200 ---- runtime/doc/popup.txt 2019-05-27 20:15:57.224591812 +0200 -*************** -*** 84,90 **** - - IMPLEMENTATION: - - Code is in popupwin.c -! - Implement list of lines with text properties - - Implement filter. - - Handle screen resize in screenalloc(). - - Make redrawing more efficient and avoid flicker. ---- 84,90 ---- - - IMPLEMENTATION: - - Code is in popupwin.c -! - implement popup_getposition({id}), use in tests - - Implement filter. - - Handle screen resize in screenalloc(). - - Make redrawing more efficient and avoid flicker. -*************** -*** 190,196 **** - For {id} see `popup_hide()`. - - popup_move({id}, {options}) *popup_move()* -- {not implemented yet} - Move popup {id} to the position speficied with {options}. - {options} may contain the items from |popup_create()| that - specify the popup position: "line", "col", "pos", "maxheight", ---- 190,195 ---- -*************** -*** 310,319 **** - {not implemented yet} - maxheight maximum height - minheight minimum height -- {not implemented yet} - maxwidth maximum width - minwidth minimum width -- {not implemented yet} - hidden when TRUE the popup exists but is not displayed; use - `popup_show()` to unhide it. - {not implemented yet} ---- 309,316 ---- -*** ../vim-8.1.1409/src/evalfunc.c 2019-05-26 22:17:31.736315033 +0200 ---- src/evalfunc.c 2019-05-27 20:06:05.751964764 +0200 -*************** -*** 811,816 **** ---- 811,817 ---- - {"popup_close", 1, 1, f_popup_close}, - {"popup_create", 2, 2, f_popup_create}, - {"popup_hide", 1, 1, f_popup_hide}, -+ {"popup_move", 2, 2, f_popup_move}, - {"popup_show", 1, 1, f_popup_show}, - #endif - #ifdef FEAT_FLOAT -*** ../vim-8.1.1409/src/popupwin.c 2019-05-27 10:04:37.530426996 +0200 ---- src/popupwin.c 2019-05-27 20:44:15.611540280 +0200 -*************** -*** 25,34 **** - int nr; - char_u *str; - - wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth"); - wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight"); -! wp->w_winrow = dict_get_number(dict, (char_u *)"line"); -! wp->w_wincol = dict_get_number(dict, (char_u *)"col"); - wp->w_zindex = dict_get_number(dict, (char_u *)"zindex"); - - #if defined(FEAT_TIMERS) ---- 25,38 ---- - int nr; - char_u *str; - -+ wp->w_minwidth = dict_get_number(dict, (char_u *)"minwidth"); -+ wp->w_minheight = dict_get_number(dict, (char_u *)"minheight"); - wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth"); - wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight"); -! -! wp->w_wantline = dict_get_number(dict, (char_u *)"line"); -! wp->w_wantcol = dict_get_number(dict, (char_u *)"col"); -! - wp->w_zindex = dict_get_number(dict, (char_u *)"zindex"); - - #if defined(FEAT_TIMERS) -*************** -*** 145,150 **** ---- 149,197 ---- - } - - /* -+ * Adjust the position and size of the popup to fit on the screen. -+ */ -+ static void -+ popup_adjust_position(win_T *wp) -+ { -+ // TODO: Compute the size and position properly. -+ if (wp->w_wantline > 0) -+ wp->w_winrow = wp->w_wantline - 1; -+ else -+ // TODO: better default -+ wp->w_winrow = Rows > 5 ? Rows / 2 - 2 : 0; -+ if (wp->w_winrow >= Rows) -+ wp->w_winrow = Rows - 1; -+ -+ if (wp->w_wantcol > 0) -+ wp->w_wincol = wp->w_wantcol - 1; -+ else -+ // TODO: better default -+ wp->w_wincol = Columns > 20 ? Columns / 2 - 10 : 0; -+ if (wp->w_wincol >= Columns - 3) -+ wp->w_wincol = Columns - 3; -+ -+ // TODO: set width based on longest text line and the 'wrap' option -+ wp->w_width = vim_strsize(ml_get_buf(wp->w_buffer, 1, FALSE)); -+ if (wp->w_minwidth > 0 && wp->w_width < wp->w_minwidth) -+ wp->w_width = wp->w_minwidth; -+ if (wp->w_maxwidth > 0 && wp->w_width > wp->w_maxwidth) -+ wp->w_width = wp->w_maxwidth; -+ if (wp->w_width > Columns - wp->w_wincol) -+ wp->w_width = Columns - wp->w_wincol; -+ -+ if (wp->w_height <= 1) -+ // TODO: adjust height for wrapped lines -+ wp->w_height = wp->w_buffer->b_ml.ml_line_count; -+ if (wp->w_minheight > 0 && wp->w_height < wp->w_minheight) -+ wp->w_height = wp->w_minheight; -+ if (wp->w_maxheight > 0 && wp->w_height > wp->w_maxheight) -+ wp->w_height = wp->w_maxheight; -+ if (wp->w_height > Rows - wp->w_winrow) -+ wp->w_height = Rows - wp->w_winrow; -+ } -+ -+ /* - * popup_create({text}, {options}) - */ - void -*************** -*** 241,272 **** - if (wp->w_zindex == 0) - wp->w_zindex = 50; - -! // TODO: Compute the size and position properly. -! -! // Default position is in middle of the screen, assuming a small popup -! if (wp->w_winrow == 0) -! wp->w_winrow = Rows > 5 ? Rows / 2 - 2 : 0; -! else -! --wp->w_winrow; // option value is one-based -! if (wp->w_wincol == 0) -! wp->w_wincol = Columns > 20 ? Columns / 2 - 10 : 0; -! else -! --wp->w_wincol; // option value is one-based -! -! -! // TODO: set width based on longest text line and the 'wrap' option -! wp->w_width = wp->w_maxwidth == 0 ? 20 : wp->w_maxwidth; -! if (wp->w_maxwidth > 0 && wp->w_width > wp->w_maxwidth) -! wp->w_width = wp->w_maxwidth; -! if (wp->w_width > Columns - wp->w_wincol) -! wp->w_width = Columns - wp->w_wincol; -! -! // TODO: adjust height for wrapped lines -! wp->w_height = buf->b_ml.ml_line_count; -! if (wp->w_maxheight > 0 && wp->w_height > wp->w_maxheight) -! wp->w_height = wp->w_maxheight; -! if (wp->w_height > Rows - wp->w_winrow) -! wp->w_height = Rows - wp->w_winrow; - - wp->w_vsep_width = 0; - ---- 288,294 ---- - if (wp->w_zindex == 0) - wp->w_zindex = 50; - -! popup_adjust_position(wp); - - wp->w_vsep_width = 0; - -*************** -*** 424,427 **** ---- 446,490 ---- - close_all_popups(); - } - -+ /* -+ * popup_move({id}, {options}) -+ */ -+ void -+ f_popup_move(typval_T *argvars, typval_T *rettv UNUSED) -+ { -+ dict_T *d; -+ int nr; -+ int id = (int)tv_get_number(argvars); -+ win_T *wp = find_popup_win(id); -+ -+ if (wp == NULL) -+ return; // invalid {id} -+ -+ if (argvars[1].v_type != VAR_DICT || argvars[1].vval.v_dict == NULL) -+ { -+ emsg(_(e_dictreq)); -+ return; -+ } -+ d = argvars[1].vval.v_dict; -+ -+ if ((nr = dict_get_number(d, (char_u *)"minwidth")) > 0) -+ wp->w_minwidth = nr; -+ if ((nr = dict_get_number(d, (char_u *)"minheight")) > 0) -+ wp->w_minheight = nr; -+ if ((nr = dict_get_number(d, (char_u *)"maxwidth")) > 0) -+ wp->w_maxwidth = nr; -+ if ((nr = dict_get_number(d, (char_u *)"maxheight")) > 0) -+ wp->w_maxheight = nr; -+ if ((nr = dict_get_number(d, (char_u *)"line")) > 0) -+ wp->w_wantline = nr; -+ if ((nr = dict_get_number(d, (char_u *)"col")) > 0) -+ wp->w_wantcol = nr; -+ // TODO: "pos" -+ -+ if (wp->w_winrow + wp->w_height >= cmdline_row) -+ clear_cmdline = TRUE; -+ popup_adjust_position(wp); -+ redraw_all_later(NOT_VALID); -+ } -+ - #endif // FEAT_TEXT_PROP -*** ../vim-8.1.1409/src/screen.c 2019-05-27 10:04:37.530426996 +0200 ---- src/screen.c 2019-05-27 21:48:09.115958231 +0200 -*************** -*** 1034,1039 **** ---- 1034,1057 ---- - } - #endif - -+ /* -+ * Get 'wincolor' attribute for window "wp". If not set and "wp" is a popup -+ * window then get the "Pmenu" highlight attribute. -+ */ -+ static int -+ get_wcr_attr(win_T *wp) -+ { -+ int wcr_attr = 0; -+ -+ if (*wp->w_p_wcr != NUL) -+ wcr_attr = syn_name2attr(wp->w_p_wcr); -+ #ifdef FEAT_TEXT_PROP -+ if (bt_popup(wp->w_buffer) && wcr_attr == 0) -+ wcr_attr = HL_ATTR(HLF_PNI); -+ #endif -+ return wcr_attr; -+ } -+ - #if defined(FEAT_GUI) || defined(PROTO) - /* - * Update a single window, its status line and maybe the command line msg. -*************** -*** 2419,2431 **** - { - int n = 0; - int attr = HL_ATTR(hl); -! int wcr_attr = 0; - -! if (*wp->w_p_wcr != NUL) -! { -! wcr_attr = syn_name2attr(wp->w_p_wcr); -! attr = hl_combine_attr(wcr_attr, attr); -! } - - if (draw_margin) - { ---- 2437,2445 ---- - { - int n = 0; - int attr = HL_ATTR(hl); -! int wcr_attr = get_wcr_attr(wp); - -! attr = hl_combine_attr(wcr_attr, attr); - - if (draw_margin) - { -*************** -*** 3115,3120 **** ---- 3129,3136 ---- - int vi_attr = 0; // attributes for Visual and incsearch - // highlighting - int wcr_attr = 0; // attributes from 'wincolor' -+ int win_attr = 0; // background for whole window, except -+ // margins and "~" lines. - int area_attr = 0; // attributes desired by highlighting - int search_attr = 0; // attributes desired by 'hlsearch' - #ifdef FEAT_SYN_HL -*************** -*** 3196,3202 **** - #ifdef FEAT_TERMINAL - int get_term_attr = FALSE; - #endif -- int win_attr = 0; // background for whole window - - /* draw_state: items that are drawn in sequence: */ - #define WL_START 0 /* nothing done yet */ ---- 3212,3217 ---- -*************** -*** 3566,3593 **** - } - } - -! if (*wp->w_p_wcr != NUL) - { -! wcr_attr = syn_name2attr(wp->w_p_wcr); -! -! // 'wincolor' highlighting for the whole window -! if (wcr_attr != 0) -! { -! win_attr = wcr_attr; -! area_highlighting = TRUE; -! } - } - #ifdef FEAT_TEXT_PROP - if (bt_popup(wp->w_buffer)) -- { - screen_line_flags |= SLF_POPUP; -- -- if (win_attr == 0) -- { -- win_attr = HL_ATTR(HLF_PNI); -- area_highlighting = TRUE; -- } -- } - #endif - - /* ---- 3581,3595 ---- - } - } - -! wcr_attr = get_wcr_attr(wp); -! if (wcr_attr != 0) - { -! win_attr = wcr_attr; -! area_highlighting = TRUE; - } - #ifdef FEAT_TEXT_PROP - if (bt_popup(wp->w_buffer)) - screen_line_flags |= SLF_POPUP; - #endif - - /* -*** ../vim-8.1.1409/src/structs.h 2019-05-26 22:17:31.736315033 +0200 ---- src/structs.h 2019-05-27 20:30:23.054166540 +0200 -*************** -*** 2873,2880 **** ---- 2873,2884 ---- - #ifdef FEAT_TEXT_PROP - int w_popup_flags; // PFL_ values - int w_zindex; -+ int w_minheight; // "minheight" for popup window -+ int w_minwidth; // "minwidth" for popup window - int w_maxheight; // "maxheight" for popup window - int w_maxwidth; // "maxwidth" for popup window -+ int w_wantline; // "line" for popup window -+ int w_wantcol; // "col" for popup window - # if defined(FEAT_TIMERS) - timer_T *w_popup_timer; // timer for closing popup window - # endif -*** ../vim-8.1.1409/src/proto/popupwin.pro 2019-05-26 22:17:31.736315033 +0200 ---- src/proto/popupwin.pro 2019-05-27 20:24:05.974256691 +0200 -*************** -*** 8,11 **** ---- 8,12 ---- - void popup_close_tabpage(tabpage_T *tp, int id); - void close_all_popups(void); - void ex_popupclear(exarg_T *eap); -+ void f_popup_move(typval_T *argvars, typval_T *rettv); - /* vim: set ft=c : */ -*** ../vim-8.1.1409/src/testdir/test_popupwin.vim 2019-05-26 23:32:03.175678045 +0200 ---- src/testdir/test_popupwin.vim 2019-05-27 21:50:29.651252234 +0200 -*************** -*** 16,23 **** - \ "hi PopupColor2 ctermbg=lightcyan", - \ "hi Comment ctermfg=red", - \ "call prop_type_add('comment', {'highlight': 'Comment'})", -! \ "let winid = popup_create('hello there', {'line': 3, 'col': 11, 'highlight': 'PopupColor1'})", -! \ "let winid2 = popup_create(['another one', 'another two', 'another three'], {'line': 3, 'col': 25})", - \ "call setwinvar(winid2, '&wincolor', 'PopupColor2')", - \], 'XtestPopup') - let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10}) ---- 16,23 ---- - \ "hi PopupColor2 ctermbg=lightcyan", - \ "hi Comment ctermfg=red", - \ "call prop_type_add('comment', {'highlight': 'Comment'})", -! \ "let winid = popup_create('hello there', {'line': 3, 'col': 11, 'minwidth': 20, 'highlight': 'PopupColor1'})", -! \ "let winid2 = popup_create(['another one', 'another two', 'another three'], {'line': 3, 'col': 25, 'minwidth': 20})", - \ "call setwinvar(winid2, '&wincolor', 'PopupColor2')", - \], 'XtestPopup') - let buf = RunVimInTerminal('-S XtestPopup', {'rows': 10}) -*************** -*** 25,36 **** - - " Add a tabpage - call term_sendkeys(buf, ":tabnew\<CR>") -! call term_sendkeys(buf, ":call popup_create([" - \ .. "{'text': 'other tab'}," - \ .. "{'text': 'a comment line', 'props': [{" -! \ .. "'col': 3, 'length': 7, 'type': 'comment'" - \ .. "}]}," -! \ .. "], {'line': 4, 'col': 9})\<CR>") - call VerifyScreenDump(buf, 'Test_popupwin_02', {}) - - " switch back to first tabpage ---- 25,36 ---- - - " Add a tabpage - call term_sendkeys(buf, ":tabnew\<CR>") -! call term_sendkeys(buf, ":let popupwin = popup_create([" - \ .. "{'text': 'other tab'}," - \ .. "{'text': 'a comment line', 'props': [{" -! \ .. "'col': 3, 'length': 7, 'minwidth': 20, 'type': 'comment'" - \ .. "}]}," -! \ .. "], {'line': 4, 'col': 9, 'minwidth': 20})\<CR>") - call VerifyScreenDump(buf, 'Test_popupwin_02', {}) - - " switch back to first tabpage -*************** -*** 41,46 **** ---- 41,51 ---- - call term_sendkeys(buf, ":quit!\<CR>") - call VerifyScreenDump(buf, 'Test_popupwin_04', {}) - -+ " resize popup -+ call term_sendkeys(buf, ":call popup_move(popupwin, {'minwidth': 15, 'maxwidth': 25, 'minheight': 3, 'maxheight': 5})\<CR>") -+ call term_sendkeys(buf, ":redraw\<CR>") -+ call VerifyScreenDump(buf, 'Test_popupwin_05', {}) -+ - " clean up - call StopVimInTerminal(buf) - call delete('XtestPopup') -*************** -*** 56,61 **** ---- 61,67 ---- - call popup_create('world', { - \ 'line': 1, - \ 'col': 1, -+ \ 'minwidth': 20, - \ 'time': 500, - \}) - redraw -*************** -*** 70,75 **** ---- 76,82 ---- - call popup_create('on the command line', { - \ 'line': &lines, - \ 'col': 10, -+ \ 'minwidth': 20, - \ 'time': 500, - \}) - redraw -*************** -*** 91,96 **** ---- 98,104 ---- - let winid = popup_create('world', { - \ 'line': 1, - \ 'col': 1, -+ \ 'minwidth': 20, - \}) - redraw - let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '') -*************** -*** 121,123 **** ---- 129,161 ---- - - bwipe! - endfunc -+ -+ func Test_popup_move() -+ topleft vnew -+ call setline(1, 'hello') -+ -+ let winid = popup_create('world', { -+ \ 'line': 1, -+ \ 'col': 1, -+ \ 'minwidth': 20, -+ \}) -+ redraw -+ let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') -+ call assert_equal('world ', line) -+ -+ call popup_move(winid, {'line': 2, 'col': 2}) -+ redraw -+ let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') -+ call assert_equal('hello ', line) -+ let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '') -+ call assert_equal('~world', line) -+ -+ call popup_move(winid, {'line': 1}) -+ redraw -+ let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') -+ call assert_equal('hworld', line) -+ -+ call popup_close(winid) -+ -+ bwipe! -+ endfunc -*** ../vim-8.1.1409/src/testdir/dumps/Test_popupwin_05.dump 2019-05-27 21:51:37.350912887 +0200 ---- src/testdir/dumps/Test_popupwin_05.dump 2019-05-27 21:48:42.687789379 +0200 -*************** -*** 0 **** ---- 1,10 ---- -+ > +0&#ffffff0@74 -+ |~+0#4040ff13&| @73 -+ |~| @73 -+ |~| @6|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @5| +0#4040ff13#ffffff0@51 -+ |~| @6|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| | +0#4040ff13#ffffff0@51 -+ |~| @6|~+0&#ffd7ff255| @13| +0&#ffffff0@51 -+ |~| @73 -+ |~| @73 -+ |~| @73 -+ |:+0#0000000&|r|e|d|r|a|w| @49|0|,|0|-|1| @8|A|l@1| -*** ../vim-8.1.1409/src/version.c 2019-05-27 20:01:38.121491973 +0200 ---- src/version.c 2019-05-27 21:51:48.102859037 +0200 -*************** -*** 769,770 **** ---- 769,772 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 1410, - /**/ - --- -The users that I support would double-click on a landmine to find out -what happens. -- A system administrator - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |