diff options
Diffstat (limited to 'data/vim/patches/8.1.1449')
-rw-r--r-- | data/vim/patches/8.1.1449 | 669 |
1 files changed, 669 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1449 b/data/vim/patches/8.1.1449 new file mode 100644 index 000000000..f25f6f880 --- /dev/null +++ b/data/vim/patches/8.1.1449 @@ -0,0 +1,669 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.1449 +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.1449 +Problem: Popup text truncated at end of screen. +Solution: Move popup left if needed. Add the "fixed" property to disable + that. (Ben Jackson , closes #4466) +Files: runtime/doc/popup.txt, src/popupwin.c, src/structs.h, + src/testdir/test_popupwin.vim + + +*** ../vim-8.1.1448/runtime/doc/popup.txt 2019-06-01 22:49:23.697685695 +0200 +--- runtime/doc/popup.txt 2019-06-02 14:40:53.019846834 +0200 +*************** +*** 65,72 **** + It can be limited with the "maxwidth" property. You can use spaces to + increase the width or the "minwidth" property. + +! By default the 'wrap' option is set, so that no text disappears. However, if +! there is not enough space, some text may be invisible. + + Vim tries to show the popup in the location you specify. In some cases, e.g. + when the popup would go outside of the Vim window, it will show it somewhere +--- 65,74 ---- + It can be limited with the "maxwidth" property. You can use spaces to + increase the width or the "minwidth" property. + +! By default the 'wrap' option is set, so that no text disappears. Otherwise, +! if there is not enough space then the window is shifted left in order to +! display more text. This can be disabled with the "fixed" property. Also +! disabled when right-aligned. + + Vim tries to show the popup in the location you specify. In some cases, e.g. + when the popup would go outside of the Vim window, it will show it somewhere +*************** +*** 78,85 **** + + TODO: + +- Example how to use syntax highlighting of a code snippet. +- + Scrolling: When the screen scrolls up for output of an Ex command, what + happens with popups? + 1. Stay where they are. Problem: listed text may go behind and can't be read. +--- 80,85 ---- +*************** +*** 93,104 **** + - Fix positioning with border and padding. + - Why does 'nrformats' leak from the popup window buffer??? + - Make redrawing more efficient and avoid flicker. +! Store popup info in a mask, use the mask in screen_line() +! Keep mask until next update_screen(), find differences and redraw affected +! windows/lines + Fix redrawing problem with completion. + Fix redrawing problem when scrolling non-current window +- Fix redrawing the statusline on top of a popup + - Disable commands, feedkeys(), CTRL-W, etc. in a popup window. + Use NOT_IN_POPUP_WINDOW for more commands. + - Invoke filter with character before mapping? +--- 93,104 ---- + - Fix positioning with border and padding. + - Why does 'nrformats' leak from the popup window buffer??? + - Make redrawing more efficient and avoid flicker. +! First draw popups, creating a mask, use the mask in screen_line() when +! drawing other windows and stuff. Mask contains zindex of popups. +! Keep mask until next update_screen(), use when drawing status lines. +! Remove update_popup() calls after draw_tabline()/updating statusline + Fix redrawing problem with completion. + Fix redrawing problem when scrolling non-current window + - Disable commands, feedkeys(), CTRL-W, etc. in a popup window. + Use NOT_IN_POPUP_WINDOW for more commands. + - Invoke filter with character before mapping? +*************** +*** 327,407 **** + |popup-props|. + + The second argument of |popup_create()| is a dictionary with options: +! line screen line where to position the popup; can use a + number or "cursor", "cursor+1" or "cursor-1" to use + the line of the cursor and add or subtract a number of +! lines; if omitted the popup is vertically centered, +! otherwise "pos" is used. +! col screen column where to position the popup; can use a + number or "cursor" to use the column of the cursor, +! "cursor+99" and "cursor-99" to add or subtract a +! number of columns; if omitted the popup is +! horizontally centered, otherwise "pos" is used + pos "topleft", "topright", "botleft" or "botright": + defines what corner of the popup "line" and "col" are + used for. When not set "topleft" is used. + Alternatively "center" can be used to position the + popup in the center of the Vim window, in which case + "line" and "col" are ignored. +! flip when TRUE (the default) and the position is relative + to the cursor, flip to below or above the cursor to + avoid overlap with the |popupmenu-completion| or +! another popup with a higher "zindex" + {not implemented yet} +! maxheight maximum height +! minheight minimum height +! maxwidth maximum width +! minwidth minimum width +! hidden when TRUE the popup exists but is not displayed; use + `popup_show()` to unhide it. + {not implemented yet} +! tab when -1: display the popup on all tabs; when 0 (the +! default): display the popup on the current tab; +! otherwise the number of the tab page the popup is +! displayed on; when invalid the current tab is used + {only -1 and 0 are implemented} +! title text to be displayed above the first item in the +! popup, on top of any border + {not implemented yet} +! wrap TRUE to make the lines wrap (default TRUE) +! highlight highlight group name to use for the text, stored in +! the 'wincolor' option +! padding list with numbers, defining the padding +! above/right/below/left of the popup (similar to CSS); +! an empty list uses a padding of 1 all around; the +! padding goes around the text, inside any border; +! padding uses the 'wincolor' highlight; Example: [1, 2, +! 1, 3] has 1 line of padding above, 2 columns on the +! right, 1 line below and 3 columns on the left +! border list with numbers, defining the border thickness +! above/right/below/left of the popup (similar to CSS); +! only values of zero and non-zero are recognized; +! an empty list uses a border all around +! borderhighlight list of highlight group names to use for the border; +! when one entry it is used for all borders, otherwise +! the highlight for the top/right/bottom/left border +! borderchars list with characters, defining the character to use +! for the top/right/bottom/left border; optionally + followed by the character to use for the +! topleft/topright/botright/botleft corner; when the +! list has one character it is used for all; when +! the list has two characters the first is used for the +! border lines, the second for the corners; by default +! a double line is used all around when 'encoding' is +! "utf-8", otherwise ASCII characters are used. +! zindex priority for the popup, default 50 +! time time in milliseconds after which the popup will close; +! when omitted |popup_close()| must be used. + moved "cell": close the popup if the cursor moved at least +! one screen cell; "word" allows for moving within +! |<cword>|, "WORD" allows for moving within |<cWORD>|, + a list with two numbers specifies the start and end +! column + {not implemented yet} +! filter a callback that can filter typed characters, see +! |popup-filter| +! callback a callback to be used when the popup closes, e.g. when +! using |popup_filter_menu()|, see |popup-callback|. + + Depending on the "zindex" the popup goes under or above other popups. The + completion menu (|popup-menu|) has zindex 100. For messages that occur for a +--- 327,426 ---- + |popup-props|. + + The second argument of |popup_create()| is a dictionary with options: +! line Screen line where to position the popup. Can use a + number or "cursor", "cursor+1" or "cursor-1" to use + the line of the cursor and add or subtract a number of +! lines. If omitted the popup is vertically centered. +! The first line is 1. +! col Screen column where to position the popup. Can use a + number or "cursor" to use the column of the cursor, +! "cursor+9" or "cursor-9" to add or subtract a number +! of columns. If omitted the popup is horizontally +! centered. The first column is 1. + pos "topleft", "topright", "botleft" or "botright": + defines what corner of the popup "line" and "col" are + used for. When not set "topleft" is used. + Alternatively "center" can be used to position the + popup in the center of the Vim window, in which case + "line" and "col" are ignored. +! fixed When FALSE (the default), and: +! - "pos" is "botleft" or "topleft", and +! - "wrap" is off, and +! - the popup would be truncated at the right edge of +! the screen, then +! the popup is moved to the left so as to fit the +! contents on the screen. Set to TRUE to disable this. +! flip When TRUE (the default) and the position is relative + to the cursor, flip to below or above the cursor to + avoid overlap with the |popupmenu-completion| or +! another popup with a higher "zindex". + {not implemented yet} +! maxheight Maximum height of the contents, excluding border and +! padding. +! minheight Minimum height of the contents, excluding border and +! padding. +! maxwidth Maximum width of the contents, excluding border and +! padding. +! minwidth Minimum width of the contents, excluding border and +! padding. +! hidden When TRUE the popup exists but is not displayed; use + `popup_show()` to unhide it. + {not implemented yet} +! tab When -1: display the popup on all tabs. +! When 0 (the default): display the popup on the current +! tab. +! Otherwise the number of the tab page the popup is +! displayed on; when invalid the current tab is used. + {only -1 and 0 are implemented} +! title Text to be displayed above the first item in the +! popup, on top of any border. If there is no top +! border on line of padding is added to put the title on. + {not implemented yet} +! wrap TRUE to make the lines wrap (default TRUE). +! highlight Highlight group name to use for the text, stored in +! the 'wincolor' option. +! padding List with numbers, defining the padding +! above/right/below/left of the popup (similar to CSS). +! An empty list uses a padding of 1 all around. The +! padding goes around the text, inside any border. +! Padding uses the 'wincolor' highlight. +! Example: [1, 2, 1, 3] has 1 line of padding above, 2 +! columns on the right, 1 line below and 3 columns on +! the left. +! border List with numbers, defining the border thickness +! above/right/below/left of the popup (similar to CSS). +! Only values of zero and non-zero are recognized. +! An empty list uses a border all around. +! borderhighlight List of highlight group names to use for the border. +! When one entry it is used for all borders, otherwise +! the highlight for the top/right/bottom/left border. +! Example: ['TopColor', 'RightColor', 'BottomColor, +! 'LeftColor'] +! borderchars List with characters, defining the character to use +! for the top/right/bottom/left border. Optionally + followed by the character to use for the +! topleft/topright/botright/botleft corner. +! Example: ['-', '|', '-', '|', '┌', '┐', '┘', '└'] +! When the list has one character it is used for all. +! When the list has two characters the first is used for +! the border lines, the second for the corners. +! By default a double line is used all around when +! 'encoding' is "utf-8", otherwise ASCII characters are +! used. +! zindex Priority for the popup, default 50. +! time Time in milliseconds after which the popup will close. +! When omitted |popup_close()| must be used. + moved "cell": close the popup if the cursor moved at least +! one screen cell. +! "word" allows for moving the cursor within |<cword>| +! "WORD" allows for moving the cursor within |<cWORD>| + a list with two numbers specifies the start and end +! column outside of which the popup will close + {not implemented yet} +! filter A callback that can filter typed characters, see +! |popup-filter|. +! callback A callback that is called when the popup closes, e.g. +! when using |popup_filter_menu()|, see |popup-callback|. + + Depending on the "zindex" the popup goes under or above other popups. The + completion menu (|popup-menu|) has zindex 100. For messages that occur for a +*** ../vim-8.1.1448/src/popupwin.c 2019-06-02 13:22:08.368507012 +0200 +--- src/popupwin.c 2019-06-02 14:43:16.359086768 +0200 +*************** +*** 84,89 **** +--- 84,91 ---- + if (nr > 0) + wp->w_wantcol = nr; + ++ wp->w_popup_fixed = dict_get_number(dict, (char_u *)"fixed") != 0; ++ + str = dict_get_string(dict, (char_u *)"pos", FALSE); + if (str != NULL) + { +*************** +*** 379,384 **** +--- 381,387 ---- + int maxwidth; + int center_vert = FALSE; + int center_hor = FALSE; ++ int allow_adjust_left = !wp->w_popup_fixed; + + wp->w_winrow = 0; + wp->w_wincol = 0; +*************** +*** 412,421 **** + } + + // When centering or right aligned, use maximum width. +! // When left aligned use the space available. + maxwidth = Columns - wp->w_wincol; + if (wp->w_maxwidth > 0 && maxwidth > wp->w_maxwidth) + maxwidth = wp->w_maxwidth; + + // Compute width based on longest text line and the 'wrap' option. + // TODO: more accurate wrapping +--- 415,428 ---- + } + + // When centering or right aligned, use maximum width. +! // When left aligned use the space available, but shift to the left when we +! // hit the right of the screen. + maxwidth = Columns - wp->w_wincol; + if (wp->w_maxwidth > 0 && maxwidth > wp->w_maxwidth) ++ { ++ allow_adjust_left = FALSE; + maxwidth = wp->w_maxwidth; ++ } + + // Compute width based on longest text line and the 'wrap' option. + // TODO: more accurate wrapping +*************** +*** 424,433 **** + { + int len = vim_strsize(ml_get_buf(wp->w_buffer, lnum, FALSE)); + +! while (wp->w_p_wrap && len > maxwidth) + { +! ++wrapped; +! len -= maxwidth; + wp->w_width = maxwidth; + } + if (wp->w_width < len) +--- 431,462 ---- + { + int len = vim_strsize(ml_get_buf(wp->w_buffer, lnum, FALSE)); + +! if (wp->w_p_wrap) + { +! while (len > maxwidth) +! { +! ++wrapped; +! len -= maxwidth; +! wp->w_width = maxwidth; +! } +! } +! else if (len > maxwidth +! && allow_adjust_left +! && (wp->w_popup_pos == POPPOS_TOPLEFT +! || wp->w_popup_pos == POPPOS_BOTLEFT)) +! { +! // adjust leftwise to fit text on screen +! int shift_by = ( len - maxwidth ); +! +! if ( shift_by > wp->w_wincol ) +! { +! int truncate_shift = shift_by - wp->w_wincol; +! len -= truncate_shift; +! shift_by -= truncate_shift; +! } +! +! wp->w_wincol -= shift_by; +! maxwidth += shift_by; + wp->w_width = maxwidth; + } + if (wp->w_width < len) +*************** +*** 895,900 **** +--- 924,930 ---- + dict_add_number(dict, "maxheight", wp->w_maxheight); + dict_add_number(dict, "maxwidth", wp->w_maxwidth); + dict_add_number(dict, "zindex", wp->w_zindex); ++ dict_add_number(dict, "fixed", wp->w_popup_fixed); + + for (i = 0; i < (int)(sizeof(poppos_entries) / sizeof(poppos_entry_T)); + ++i) +*** ../vim-8.1.1448/src/structs.h 2019-06-01 22:49:23.697685695 +0200 +--- src/structs.h 2019-06-02 14:44:16.118752659 +0200 +*************** +*** 2308,2314 **** + int b_p_fixeol; /* 'fixendofline' */ + int b_p_et; /* 'expandtab' */ + int b_p_et_nobin; /* b_p_et saved for binary mode */ +! int b_p_et_nopaste; /* b_p_et saved for paste mode */ + char_u *b_p_fenc; /* 'fileencoding' */ + char_u *b_p_ff; /* 'fileformat' */ + char_u *b_p_ft; /* 'filetype' */ +--- 2308,2314 ---- + int b_p_fixeol; /* 'fixendofline' */ + int b_p_et; /* 'expandtab' */ + int b_p_et_nobin; /* b_p_et saved for binary mode */ +! int b_p_et_nopaste; /* b_p_et saved for paste mode */ + char_u *b_p_fenc; /* 'fileencoding' */ + char_u *b_p_ff; /* 'fileformat' */ + char_u *b_p_ft; /* 'filetype' */ +*************** +*** 2881,2886 **** +--- 2881,2887 ---- + #ifdef FEAT_TEXT_PROP + int w_popup_flags; // POPF_ values + poppos_T w_popup_pos; ++ int w_popup_fixed; // do not shift popup to fit on screen + int w_zindex; + int w_minheight; // "minheight" for popup window + int w_minwidth; // "minwidth" for popup window +*************** +*** 3038,3045 **** + int w_p_brishift; /* additional shift for breakindent */ + int w_p_brisbr; /* sbr in 'briopt' */ + #endif +! long w_p_siso; /* 'sidescrolloff' local value */ +! long w_p_so; /* 'scrolloff' local value */ + + /* transform a pointer to a "onebuf" option into a "allbuf" option */ + #define GLOBAL_WO(p) ((char *)p + sizeof(winopt_T)) +--- 3039,3046 ---- + int w_p_brishift; /* additional shift for breakindent */ + int w_p_brisbr; /* sbr in 'briopt' */ + #endif +! long w_p_siso; /* 'sidescrolloff' local value */ +! long w_p_so; /* 'scrolloff' local value */ + + /* transform a pointer to a "onebuf" option into a "allbuf" option */ + #define GLOBAL_WO(p) ((char *)p + sizeof(winopt_T)) +*************** +*** 3471,3477 **** + int js_used; /* bytes used from js_buf */ + int (*js_fill)(struct js_reader *); + /* function to fill the buffer or NULL; +! * return TRUE when the buffer was filled */ + void *js_cookie; /* can be used by js_fill */ + int js_cookie_arg; /* can be used by js_fill */ + }; +--- 3472,3478 ---- + int js_used; /* bytes used from js_buf */ + int (*js_fill)(struct js_reader *); + /* function to fill the buffer or NULL; +! * return TRUE when the buffer was filled */ + void *js_cookie; /* can be used by js_fill */ + int js_cookie_arg; /* can be used by js_fill */ + }; +*** ../vim-8.1.1448/src/testdir/test_popupwin.vim 2019-06-02 14:11:51.865021060 +0200 +--- src/testdir/test_popupwin.vim 2019-06-02 14:23:15.857441117 +0200 +*************** +*** 422,427 **** +--- 422,428 ---- + \ 'maxheight': 21, + \ 'zindex': 100, + \ 'time': 5000, ++ \ 'fixed': 1 + \}) + redraw + let res = popup_getoptions(winid) +*************** +*** 432,437 **** +--- 433,439 ---- + call assert_equal(20, res.maxwidth) + call assert_equal(21, res.maxheight) + call assert_equal(100, res.zindex) ++ call assert_equal(1, res.fixed) + if has('timers') + call assert_equal(5000, res.time) + endif +*************** +*** 447,452 **** +--- 449,455 ---- + call assert_equal(0, res.maxwidth) + call assert_equal(0, res.maxheight) + call assert_equal(50, res.zindex) ++ call assert_equal(0, res.fixed) + if has('timers') + call assert_equal(0, res.time) + endif +*************** +*** 647,649 **** +--- 650,832 ---- + call StopVimInTerminal(buf) + call delete('XtestPopupBehind') + endfunc ++ ++ func s:VerifyPosition( p, msg, line, col, width, height ) ++ call assert_equal( a:line, popup_getpos( a:p ).line, a:msg . ' (l)' ) ++ call assert_equal( a:col, popup_getpos( a:p ).col, a:msg . ' (c)' ) ++ call assert_equal( a:width, popup_getpos( a:p ).width, a:msg . ' (w)' ) ++ call assert_equal( a:height, popup_getpos( a:p ).height, a:msg . ' (h)' ) ++ endfunc ++ ++ func Test_popup_position_adjust() ++ " Anything placed past 2 cells from of the right of the screen is moved to the ++ " left. ++ " ++ " When wrapping is disabled, we also shift to the left to display on the ++ " screen, unless fixed is set. ++ ++ " Entries for cases which don't vary based on wrapping. ++ " Format is per tests described below ++ let both_wrap_tests = [ ++ \ [ 'a', 5, &columns, 5, &columns - 2, 1, 1 ], ++ \ [ 'b', 5, &columns + 1, 5, &columns - 2, 1, 1 ], ++ \ [ 'c', 5, &columns - 1, 5, &columns - 2, 1, 1 ], ++ \ [ 'd', 5, &columns - 2, 5, &columns - 2, 1, 1 ], ++ \ [ 'e', 5, &columns - 3, 5, &columns - 3, 1, 1 ], ++ \ ++ \ [ 'aa', 5, &columns, 5, &columns - 2, 2, 1 ], ++ \ [ 'bb', 5, &columns + 1, 5, &columns - 2, 2, 1 ], ++ \ [ 'cc', 5, &columns - 1, 5, &columns - 2, 2, 1 ], ++ \ [ 'dd', 5, &columns - 2, 5, &columns - 2, 2, 1 ], ++ \ [ 'ee', 5, &columns - 3, 5, &columns - 3, 2, 1 ], ++ \ ++ \ [ 'aaa', 5, &columns, 5, &columns - 2, 3, 1 ], ++ \ [ 'bbb', 5, &columns + 1, 5, &columns - 2, 3, 1 ], ++ \ [ 'ccc', 5, &columns - 1, 5, &columns - 2, 3, 1 ], ++ \ [ 'ddd', 5, &columns - 2, 5, &columns - 2, 3, 1 ], ++ \ [ 'eee', 5, &columns - 3, 5, &columns - 3, 3, 1 ], ++ \ ] ++ ++ " these test groups are dicts with: ++ " - comment: something to identify the group of tests by ++ " - options: dict of options to merge with the row/col in tests ++ " - tests: list of cases. Each one is a list with elements: ++ " - text ++ " - row ++ " - col ++ " - expected row ++ " - expected col ++ " - expected width ++ " - expected height ++ let tests = [ ++ \ { ++ \ 'comment': 'left-aligned with wrapping', ++ \ 'options': { ++ \ 'wrap': 1, ++ \ 'pos': 'botleft', ++ \ }, ++ \ 'tests': both_wrap_tests + [ ++ \ [ 'aaaa', 5, &columns, 4, &columns - 2, 3, 2 ], ++ \ [ 'bbbb', 5, &columns + 1, 4, &columns - 2, 3, 2 ], ++ \ [ 'cccc', 5, &columns - 1, 4, &columns - 2, 3, 2 ], ++ \ [ 'dddd', 5, &columns - 2, 4, &columns - 2, 3, 2 ], ++ \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ], ++ \ ], ++ \ }, ++ \ { ++ \ 'comment': 'left aligned without wrapping', ++ \ 'options': { ++ \ 'wrap': 0, ++ \ 'pos': 'botleft', ++ \ }, ++ \ 'tests': both_wrap_tests + [ ++ \ [ 'aaaa', 5, &columns, 5, &columns - 3, 4, 1 ], ++ \ [ 'bbbb', 5, &columns + 1, 5, &columns - 3, 4, 1 ], ++ \ [ 'cccc', 5, &columns - 1, 5, &columns - 3, 4, 1 ], ++ \ [ 'dddd', 5, &columns - 2, 5, &columns - 3, 4, 1 ], ++ \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ], ++ \ ], ++ \ }, ++ \ { ++ \ 'comment': 'left aligned with fixed position', ++ \ 'options': { ++ \ 'wrap': 0, ++ \ 'fixed': 1, ++ \ 'pos': 'botleft', ++ \ }, ++ \ 'tests': both_wrap_tests + [ ++ \ [ 'aaaa', 5, &columns, 5, &columns - 2, 3, 1 ], ++ \ [ 'bbbb', 5, &columns + 1, 5, &columns - 2, 3, 1 ], ++ \ [ 'cccc', 5, &columns - 1, 5, &columns - 2, 3, 1 ], ++ \ [ 'dddd', 5, &columns - 2, 5, &columns - 2, 3, 1 ], ++ \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ], ++ \ ], ++ \ }, ++ \ ] ++ ++ for test_group in tests ++ for test in test_group.tests ++ let [ text, line, col, e_line, e_col, e_width, e_height ] = test ++ let options = { ++ \ 'line': line, ++ \ 'col': col, ++ \ } ++ call extend( options, test_group.options ) ++ ++ let p = popup_create( text, options ) ++ ++ let msg = string( extend( options, { 'text': text } ) ) ++ call s:VerifyPosition( p, msg, e_line, e_col, e_width, e_height ) ++ call popup_close( p ) ++ endfor ++ endfor ++ ++ popupclear ++ %bwipe! ++ endfunc ++ ++ function Test_adjust_left_past_screen_width() ++ " width of screen ++ let X = join(map(range(&columns), {->'X'}), '') ++ ++ let p = popup_create( X, { 'line': 1, 'col': 1, 'wrap': 0 } ) ++ call s:VerifyPosition( p, 'full width topleft', 1, 1, &columns, 1 ) ++ ++ redraw ++ let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '') ++ call assert_equal(X, line) ++ ++ call popup_close( p ) ++ redraw ++ ++ " Same if placed on the right hand side ++ let p = popup_create( X, { 'line': 1, 'col': &columns, 'wrap': 0 } ) ++ call s:VerifyPosition( p, 'full width topright', 1, 1, &columns, 1 ) ++ ++ redraw ++ let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '') ++ call assert_equal(X, line) ++ ++ call popup_close( p ) ++ redraw ++ ++ " Extend so > window width ++ let X .= 'x' ++ ++ let p = popup_create( X, { 'line': 1, 'col': 1, 'wrap': 0 } ) ++ call s:VerifyPosition( p, 'full width + 1 topleft', 1, 1, &columns, 1 ) ++ ++ redraw ++ let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '') ++ call assert_equal(X[ : -2 ], line) ++ ++ call popup_close( p ) ++ redraw ++ ++ " Shifted then truncated (the x is not visible) ++ let p = popup_create( X, { 'line': 1, 'col': &columns - 3, 'wrap': 0 } ) ++ call s:VerifyPosition( p, 'full width + 1 topright', 1, 1, &columns, 1 ) ++ ++ redraw ++ let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '') ++ call assert_equal(X[ : -2 ], line) ++ ++ call popup_close( p ) ++ redraw ++ ++ " Not shifted, just truncated ++ let p = popup_create( X, ++ \ { 'line': 1, 'col': 2, 'wrap': 0, 'fixed': 1 } ) ++ call s:VerifyPosition( p, 'full width + 1 fixed', 1, 2, &columns - 1, 1) ++ ++ redraw ++ let line = join(map(range(1, &columns + 1), 'screenstring(1, v:val)'), '') ++ let e_line = ' ' . X[ 1 : -2 ] ++ call assert_equal(e_line, line) ++ ++ call popup_close( p ) ++ redraw ++ ++ popupclear ++ %bwipe! ++ endfunction +*** ../vim-8.1.1448/src/version.c 2019-06-02 14:11:51.865021060 +0200 +--- src/version.c 2019-06-02 14:25:11.832829281 +0200 +*************** +*** 769,770 **** +--- 769,772 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1449, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +91. It's Saturday afternoon in the middle of May and you + are on computer. + + /// 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 /// |