0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.1.1692: using *{} for literal dict is not backwards compatible

Problem:    Using *{} for literal dict is not backwards compatible. (Yasuhiro
            Matsumoto)
Solution:   Use ~{} instead.
This commit is contained in:
Bram Moolenaar
2019-07-14 18:22:59 +02:00
parent 37d9f175a4
commit b8be54dcc5
14 changed files with 201 additions and 188 deletions

View File

@@ -60,7 +60,7 @@ Dictionary An associative, unordered array: Each entry has a key and a
value. |Dictionary| value. |Dictionary|
Examples: Examples:
{'blue': "#0000ff", 'red': "#ff0000"} {'blue': "#0000ff", 'red': "#ff0000"}
*{blue: "#0000ff", red: "#ff0000"} ~{blue: "#0000ff", red: "#ff0000"}
Funcref A reference to a function |Funcref|. Funcref A reference to a function |Funcref|.
Example: function("strlen") Example: function("strlen")
@@ -482,10 +482,10 @@ entry. Note that the String '04' and the Number 04 are different, since the
Number will be converted to the String '4'. The empty string can also be used Number will be converted to the String '4'. The empty string can also be used
as a key. as a key.
*literal-Dict* *literal-Dict*
To avoid having to put quotes around every key the *{} form can be used. This To avoid having to put quotes around every key the ~{} form can be used. This
does require the key to consist only of ASCII letters, digits, '-' and '_'. does require the key to consist only of ASCII letters, digits, '-' and '_'.
Example: > Example: >
let mydict = *{zero: 0, one_key: 1, two-key: 2, 333: 3} let mydict = ~{zero: 0, one_key: 1, two-key: 2, 333: 3}
Note that 333 here is the string "333". Empty keys are not possible here. Note that 333 here is the string "333". Empty keys are not possible here.
A value can be any expression. Using a Dictionary for a value creates a A value can be any expression. Using a Dictionary for a value creates a

View File

@@ -178,7 +178,7 @@ DETAILS *popup-function-details*
popup_atcursor({what}, {options}) *popup_atcursor()* popup_atcursor({what}, {options}) *popup_atcursor()*
Show the {what} above the cursor, and close it when the cursor Show the {what} above the cursor, and close it when the cursor
moves. This works like: > moves. This works like: >
call popup_create({what}, *{ call popup_create({what}, ~{
\ pos: 'botleft', \ pos: 'botleft',
\ line: 'cursor-1', \ line: 'cursor-1',
\ col: 'cursor', \ col: 'cursor',
@@ -191,7 +191,7 @@ popup_beval({what}, {options}) *popup_beval()*
Show the {what} above the position from 'ballooneval' and Show the {what} above the position from 'ballooneval' and
close it when the mouse moves. This works like: > close it when the mouse moves. This works like: >
let pos = screenpos(v:beval_winnr, v:beval_lnum, v:beval_col) let pos = screenpos(v:beval_winnr, v:beval_lnum, v:beval_col)
call popup_create({what}, *{ call popup_create({what}, ~{
\ pos: 'botleft', \ pos: 'botleft',
\ line: pos.row - 1, \ line: pos.row - 1,
\ col: pos.col, \ col: pos.col,
@@ -240,7 +240,7 @@ popup_create({what}, {options}) *popup_create()*
popup_dialog({what}, {options}) *popup_dialog()* popup_dialog({what}, {options}) *popup_dialog()*
Just like |popup_create()| but with these default options: > Just like |popup_create()| but with these default options: >
call popup_create({what}, *{ call popup_create({what}, ~{
\ pos: 'center', \ pos: 'center',
\ zindex: 200, \ zindex: 200,
\ drag: 1, \ drag: 1,
@@ -249,7 +249,7 @@ popup_dialog({what}, {options}) *popup_dialog()*
\}) \})
< Use {options} to change the properties. E.g. add a 'filter' < Use {options} to change the properties. E.g. add a 'filter'
option with value 'popup_filter_yesno'. Example: > option with value 'popup_filter_yesno'. Example: >
call popup_create('do you want to quit (Yes/no)?', *{ call popup_create('do you want to quit (Yes/no)?', ~{
\ filter: 'popup_filter_yesno', \ filter: 'popup_filter_yesno',
\ callback: 'QuitCallback', \ callback: 'QuitCallback',
\ }) \ })
@@ -356,7 +356,7 @@ popup_menu({what}, {options}) *popup_menu()*
items with cursorkeys, and close it an item is selected with items with cursorkeys, and close it an item is selected with
Space or Enter. {what} should have multiple lines to make this Space or Enter. {what} should have multiple lines to make this
useful. This works like: > useful. This works like: >
call popup_create({what}, *{ call popup_create({what}, ~{
\ pos: 'center', \ pos: 'center',
\ zindex: 200, \ zindex: 200,
\ drag: 1, \ drag: 1,
@@ -391,7 +391,7 @@ popup_move({id}, {options}) *popup_move()*
popup_notification({what}, {options}) *popup_notification()* popup_notification({what}, {options}) *popup_notification()*
Show the {what} for 3 seconds at the top of the Vim window. Show the {what} for 3 seconds at the top of the Vim window.
This works like: > This works like: >
call popup_create({what}, *{ call popup_create({what}, ~{
\ line: 1, \ line: 1,
\ col: 10, \ col: 10,
\ minwidth: 20, \ minwidth: 20,
@@ -732,7 +732,7 @@ Prompt the user to press y/Y or n/N: >
endif endif
endfunc endfunc
call popup_dialog('Continue? y/n', *{ call popup_dialog('Continue? y/n', ~{
\ filter: 'popup_filter_yesno', \ filter: 'popup_filter_yesno',
\ callback: 'MyDialogHandler', \ callback: 'MyDialogHandler',
\ }) \ })
@@ -740,7 +740,7 @@ Prompt the user to press y/Y or n/N: >
*popup_menu-shortcut-example* *popup_menu-shortcut-example*
Extend popup_filter_menu() with shortcut keys: > Extend popup_filter_menu() with shortcut keys: >
call popup_menu(['Save', 'Cancel', 'Discard'], *{ call popup_menu(['Save', 'Cancel', 'Discard'], ~{
\ filter: 'MyMenuFilter', \ filter: 'MyMenuFilter',
\ callback: 'MyMenuHandler', \ callback: 'MyMenuHandler',
\ }) \ })
@@ -781,7 +781,7 @@ Example for using a popup window for 'ballooneval': >
endif endif
call popup_close(s:winid) call popup_close(s:winid)
endif endif
let s:winid = popup_beval(v:beval_text, *{mousemoved: 'word'}) let s:winid = popup_beval(v:beval_text, ~{mousemoved: 'word'})
let s:last_text = v:beval_text let s:last_text = v:beval_text
return '' return ''
endfunc endfunc
@@ -812,7 +812,7 @@ this example simulated with a timer callback: >
endfunc endfunc
func ShowPopup(id) func ShowPopup(id)
let s:winid = popup_beval(s:balloonText, *{mousemoved: 'word'}) let s:winid = popup_beval(s:balloonText, ~{mousemoved: 'word'})
endfunc endfunc
< <

View File

@@ -4266,7 +4266,7 @@ eval6(
for (;;) for (;;)
{ {
op = **arg; op = **arg;
if ((op != '*' || (*arg)[1] == '{') && op != '/' && op != '%') if (op != '*' && op != '/' && op != '%')
break; break;
if (evaluate) if (evaluate)
@@ -4392,7 +4392,7 @@ eval6(
* (expression) nested expression * (expression) nested expression
* [expr, expr] List * [expr, expr] List
* {key: val, key: val} Dictionary * {key: val, key: val} Dictionary
* *{key: val, key: val} Dictionary with literal keys * ~{key: val, key: val} Dictionary with literal keys
* *
* Also handle: * Also handle:
* ! in front logical NOT * ! in front logical NOT
@@ -4577,9 +4577,9 @@ eval7(
break; break;
/* /*
* Dictionary: *{key: val, key: val} * Dictionary: ~{key: val, key: val}
*/ */
case '*': if ((*arg)[1] == '{') case '~': if ((*arg)[1] == '{')
{ {
++*arg; ++*arg;
ret = dict_get_tv(arg, rettv, evaluate, TRUE); ret = dict_get_tv(arg, rettv, evaluate, TRUE);

View File

@@ -6,5 +6,5 @@
|~| @73 |~| @73
|~| @52|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @11 |~| @52|o+0#0000001#ffd7ff255|t|h|e|r| |t|a|b| @11
|~+0#4040ff13#ffffff0| @52|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| @6 |~+0#4040ff13#ffffff0| @52|a+0#0000001#ffd7ff255| |c+0#ff404010&|o|m@1|e|n|t| +0#0000001&|l|i|n|e| @6
|:+0#0000000#ffffff0|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|p|o|p|u|p|w|i|n|,| |*|{|l|i|n|e|:| |7|,| |c|o|l|:| |5@1|}|)| @6|t+0#0000001#ffd7ff255|h|i|s| |l|i|n|e| |w|i|l@1| |n|o|t| |f|i |:+0#0000000#ffffff0| @52|t+0#0000001#ffd7ff255|h|i|s| |l|i|n|e| |w|i|l@1| |n|o|t| |f|i
| +0#0000000#ffffff0@53|t+0#0000001#ffd7ff255| |h|e|r|e| @14 | +0#0000000#ffffff0@53|t+0#0000001#ffd7ff255| |h|e|r|e| @14

View File

@@ -10,4 +10,4 @@
|1|2|3|4|5|6|7|8|9|1|0|║+0#0000001#ffd7ff255| @10|1+0#0000000#ffffff0|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |1|2|3|4|5|6|7|8|9|1|0|║+0#0000001#ffd7ff255| @10|1+0#0000000#ffffff0|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|1|2|3|4|5|6|7|8|9|1|0|╚+0#0000001#ffd7ff255|═|1+0#0000000#ffffff0|2|1|═+0#0000001#ffd7ff255@4|1+0#0000000#ffffff0|6|1|7|═+0#0000001#ffd7ff255@1|╝|9+0#0000000#ffffff0|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |1|2|3|4|5|6|7|8|9|1|0|╚+0#0000001#ffd7ff255|═|1+0#0000000#ffffff0|2|1|═+0#0000001#ffd7ff255@4|1+0#0000000#ffffff0|6|1|7|═+0#0000001#ffd7ff255@1|╝|9+0#0000000#ffffff0|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |*|{|c|o|l|:| |1|2|}|)| @20|1|,|1| @10|T|o|p| |:| @55|1|,|1| @10|T|o|p|

View File

@@ -10,4 +10,4 @@
|1+0#0000000#ffffff0|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|║+0#0000001#ffd7ff255| @10|2+0#0000000#ffffff0 |1+0#0000000#ffffff0|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|║+0#0000001#ffd7ff255| @10|2+0#0000000#ffffff0
|1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|╚+0#0000001#ffd7ff255|═|7+0#0000000#ffffff0|3|8|═+0#0000001#ffd7ff255@4|1+0#0000000#ffffff0|4|2 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|╚+0#0000001#ffd7ff255|═|7+0#0000000#ffffff0|3|8|═+0#0000001#ffd7ff255@4|1+0#0000000#ffffff0|4|2
|1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |*|{|c|o|l|:| |6|3|}|)| @20|1|,|1| @10|T|o|p| |:| @55|1|,|1| @10|T|o|p|

View File

@@ -10,4 +10,4 @@
| +0#0000001#ffd7ff255@6|8+0#0000000#ffffff0|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 | +0#0000001#ffd7ff255@6|8+0#0000000#ffffff0|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|═+0#0000001#ffd7ff255@4|6+0#0000000#ffffff0|7|8|9|═+0#0000001#ffd7ff255@1|╝|1+0#0000000#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |═+0#0000001#ffd7ff255@4|6+0#0000000#ffffff0|7|8|9|═+0#0000001#ffd7ff255@1|╝|1+0#0000000#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|:|c|a|l@1| |p|o|p|u|p|_|m|o|v|e|(|w|i|n|i|d|b|,| |*|{|p|o|s|:| |'|t|o|p|r|i|g|h|t|'|,| |c|o|l|:| |1|2|}|)| @3|1|,|1| @10|T|o|p| |:| @55|1|,|1| @10|T|o|p|

View File

@@ -10,4 +10,4 @@
|1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |1|2|3|4|5|6|7|8|9|1|0|1@2|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|2|7|2|8|2|9|3|0|3|1|3|2|3@2|4|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
| +0&#e0e0e08@11|1+0&#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|═+0#0000001#ffd7ff255@13|X|4+0#0000000#ffffff0|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 | +0&#e0e0e08@11|1+0&#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|2|6|═+0#0000001#ffd7ff255@13|X|4+0#0000000#ffffff0|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|o+0&#e0e0e08|m|e| |5+0&#ffffff0|6|7|t+0&#e0e0e08| @3|1+0&#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|║+0#0000001#ffd7ff255| @4|2+0#0000000#ffffff0|9|3| +0#0000001#ffd7ff255@6|║|4+0#0000000#ffffff0|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2 |o+0&#e0e0e08|m|e| |5+0&#ffffff0|6|7|t+0&#e0e0e08| @3|1+0&#ffffff0@1|2|1|3|1|4|1|5|1|6|1|7|1|8|1|9|2|0|2|1|2@2|3|2|4|2|5|║+0#0000001#ffd7ff255| @4|2+0#0000000#ffffff0|9|3| +0#0000001#ffd7ff255@6|║|4+0#0000000#ffffff0|3|5|3|6|3|7|3|8|3|9|4|0|4|1|4|2
|:|c|t+0&#e0e0e08|h|l+0&#ffffff0| |p|l+0&#e0e0e08|i|n|e| |m+0&#ffffff0|o|v|e|(|w|i|n|i|d|b|,| |*|{|p|o|s|:| |'|t|o|p|l|e|f|t|'|║+0#0000001#ffd7ff255| |j|u|s|t| +0#0000000#ffffff0|4|2|e+0#0000001#ffd7ff255| |l|i|n|e| |║|,+0#0000000#ffffff0|1| @10|T|o|p| |:| |t+0&#e0e0e08|h| +0&#ffffff0@2|l+0&#e0e0e08|i|n|e| | +0&#ffffff0@28|║+0#0000001#ffd7ff255| |j|u|s|t| +0#0000000#ffffff0@2|e+0#0000001#ffd7ff255| |l|i|n|e| |║|,+0#0000000#ffffff0|1| @10|T|o|p|

View File

@@ -7,4 +7,4 @@
|7| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32 |7| @31|f+0#0000001#ffd7ff255|i|v|e| @3| +0#0000000#a8a8a8255| +0&#ffffff0@32
|8| @73 |8| @73
|9| @73 |9| @73
|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |*|{|f|i|r|s|t|l|i|n|e|:| |2|}|)| @10|1|,|1| @10|T|o|p| |:| @55|1|,|1| @10|T|o|p|

View File

@@ -7,4 +7,4 @@
|7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#0000001| +0&#ffffff0@32 |7| @31|n+0#0000001#ffd7ff255|i|n|e| @3| +0#0000000#0000001| +0&#ffffff0@32
|8| @73 |8| @73
|9| @73 |9| @73
|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |*|{|f|i|r|s|t|l|i|n|e|:| |6|}|)| @10|1|,|1| @10|T|o|p| |:| @55|1|,|1| @10|T|o|p|

View File

@@ -7,4 +7,4 @@
|7| @73 |7| @73
|8| @73 |8| @73
|9| @73 |9| @73
|:|c|a|l@1| |p|o|p|u|p|_|s|e|t|o|p|t|i|o|n|s|(|w|i|n|i|d|,| |*|{|f|i|r|s|t|l|i|n|e|:| |9|}|)| @10|1|,|1| @10|T|o|p| |:| @55|1|,|1| @10|T|o|p|

View File

@@ -281,8 +281,11 @@ func Test_dict_func_remove_in_use()
endfunc endfunc
func Test_dict_literal_keys() func Test_dict_literal_keys()
call assert_equal({'one': 1, 'two2': 2, '3three': 3, '44': 4}, *{one: 1, two2: 2, 3three: 3, 44: 4},) call assert_equal({'one': 1, 'two2': 2, '3three': 3, '44': 4}, ~{one: 1, two2: 2, 3three: 3, 44: 4},)
call assert_equal('2 3', trim(execute('echo 2 *{blue: 3}.blue')))
" why *{} cannot be used
let blue = 'blue'
call assert_equal('6', trim(execute('echo 2 *{blue: 3}.blue')))
endfunc endfunc
" Nasty: deepcopy() dict that refers to itself (fails when noref used) " Nasty: deepcopy() dict that refers to itself (fails when noref used)

View File

@@ -14,23 +14,23 @@ func Test_simple_popup()
hi PopupColor1 ctermbg=lightblue hi PopupColor1 ctermbg=lightblue
hi PopupColor2 ctermbg=lightcyan hi PopupColor2 ctermbg=lightcyan
hi Comment ctermfg=red hi Comment ctermfg=red
call prop_type_add('comment', *{highlight: 'Comment'}) call prop_type_add('comment', ~{highlight: 'Comment'})
let winid = popup_create('hello there', *{line: 3, col: 11, minwidth: 20, highlight: 'PopupColor1'}) 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}) let winid2 = popup_create(['another one', 'another two', 'another three'], ~{line: 3, col: 25, minwidth: 20})
call setwinvar(winid2, '&wincolor', 'PopupColor2') call setwinvar(winid2, '&wincolor', 'PopupColor2')
END END
call writefile(lines, 'XtestPopup') call writefile(lines, 'XtestPopup')
let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopup', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_01', {}) call VerifyScreenDump(buf, 'Test_popupwin_01', {})
" Add a tabpage " Add a tabpage
call term_sendkeys(buf, ":tabnew\<CR>") call term_sendkeys(buf, ":tabnew\<CR>")
call term_sendkeys(buf, ":let popupwin = popup_create([" call term_sendkeys(buf, ":let popupwin = popup_create(["
\ .. "*{text: 'other tab'}," \ .. "~{text: 'other tab'},"
\ .. "*{text: 'a comment line', props: [*{" \ .. "~{text: 'a comment line', props: [~{"
\ .. "col: 3, length: 7, minwidth: 20, type: 'comment'" \ .. "col: 3, length: 7, minwidth: 20, type: 'comment'"
\ .. "}]}," \ .. "}]},"
\ .. "], *{line: 4, col: 9, minwidth: 20})\<CR>") \ .. "], ~{line: 4, col: 9, minwidth: 20})\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_02', {}) call VerifyScreenDump(buf, 'Test_popupwin_02', {})
" switch back to first tabpage " switch back to first tabpage
@@ -48,7 +48,7 @@ func Test_simple_popup()
call term_sendkeys(buf, ":let &columns = cols\<CR>") call term_sendkeys(buf, ":let &columns = cols\<CR>")
" resize popup, show empty line at bottom " resize popup, show empty line at bottom
call term_sendkeys(buf, ":call popup_move(popupwin, *{minwidth: 15, maxwidth: 25, minheight: 3, maxheight: 5})\<CR>") call term_sendkeys(buf, ":call popup_move(popupwin, ~{minwidth: 15, maxwidth: 25, minheight: 3, maxheight: 5})\<CR>")
call term_sendkeys(buf, ":redraw\<CR>") call term_sendkeys(buf, ":redraw\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_05', {}) call VerifyScreenDump(buf, 'Test_popupwin_05', {})
@@ -59,7 +59,8 @@ func Test_simple_popup()
" move popup over ruler " move popup over ruler
call term_sendkeys(buf, ":set cmdheight=2\<CR>") call term_sendkeys(buf, ":set cmdheight=2\<CR>")
call term_sendkeys(buf, ":call popup_move(popupwin, *{line: 7, col: 55})\<CR>") call term_sendkeys(buf, ":call popup_move(popupwin, ~{line: 7, col: 55})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_07', {}) call VerifyScreenDump(buf, 'Test_popupwin_07', {})
" clear all popups after moving the cursor a bit, so that ruler is updated " clear all popups after moving the cursor a bit, so that ruler is updated
@@ -83,17 +84,17 @@ func Test_popup_with_border_and_padding()
for iter in range(0, 1) for iter in range(0, 1)
let lines =<< trim END let lines =<< trim END
call setline(1, range(1, 100)) call setline(1, range(1, 100))
call popup_create('hello border', *{line: 2, col: 3, border: []}) call popup_create('hello border', ~{line: 2, col: 3, border: []})
call popup_create('hello padding', *{line: 2, col: 23, padding: []}) call popup_create('hello padding', ~{line: 2, col: 23, padding: []})
call popup_create('hello both', *{line: 2, col: 43, border: [], padding: []}) call popup_create('hello both', ~{line: 2, col: 43, border: [], padding: []})
call popup_create('border TL', *{line: 6, col: 3, border: [1, 0, 0, 4]}) call popup_create('border TL', ~{line: 6, col: 3, border: [1, 0, 0, 4]})
call popup_create('paddings', *{line: 6, col: 23, padding: [1, 3, 2, 4]}) call popup_create('paddings', ~{line: 6, col: 23, padding: [1, 3, 2, 4]})
call popup_create('wrapped longer text', *{line: 8, col: 55, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]}) call popup_create('wrapped longer text', ~{line: 8, col: 55, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]})
call popup_create('right aligned text', *{line: 11, col: 56, wrap: 0, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]}) call popup_create('right aligned text', ~{line: 11, col: 56, wrap: 0, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]})
END END
call insert(lines, iter == 1 ? '' : 'set enc=latin1') call insert(lines, iter == 1 ? '' : 'set enc=latin1')
call writefile(lines, 'XtestPopupBorder') call writefile(lines, 'XtestPopupBorder')
let buf = RunVimInTerminal('-S XtestPopupBorder', *{rows: 15}) let buf = RunVimInTerminal('-S XtestPopupBorder', ~{rows: 15})
call VerifyScreenDump(buf, 'Test_popupwin_2' .. iter, {}) call VerifyScreenDump(buf, 'Test_popupwin_2' .. iter, {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
@@ -107,22 +108,22 @@ func Test_popup_with_border_and_padding()
hi RightColor ctermbg=245 hi RightColor ctermbg=245
hi BottomColor ctermbg=240 hi BottomColor ctermbg=240
hi LeftColor ctermbg=248 hi LeftColor ctermbg=248
call popup_create('hello border', *{line: 2, col: 3, border: [], borderhighlight: ['BlueColor']}) call popup_create('hello border', ~{line: 2, col: 3, border: [], borderhighlight: ['BlueColor']})
call popup_create(['hello border', 'and more'], *{line: 2, col: 23, border: [], borderhighlight: ['TopColor', 'RightColor', 'BottomColor', 'LeftColor']}) call popup_create(['hello border', 'and more'], ~{line: 2, col: 23, border: [], borderhighlight: ['TopColor', 'RightColor', 'BottomColor', 'LeftColor']})
call popup_create(['hello border', 'lines only'], *{line: 2, col: 43, border: [], borderhighlight: ['BlueColor'], borderchars: ['x']}) call popup_create(['hello border', 'lines only'], ~{line: 2, col: 43, border: [], borderhighlight: ['BlueColor'], borderchars: ['x']})
call popup_create(['hello border', 'with corners'], *{line: 2, col: 60, border: [], borderhighlight: ['BlueColor'], borderchars: ['x', '#']}) call popup_create(['hello border', 'with corners'], ~{line: 2, col: 60, border: [], borderhighlight: ['BlueColor'], borderchars: ['x', '#']})
let winid = popup_create(['hello border', 'with numbers'], *{line: 6, col: 3, border: [], borderhighlight: ['BlueColor'], borderchars: ['0', '1', '2', '3', '4', '5', '6', '7']}) let winid = popup_create(['hello border', 'with numbers'], ~{line: 6, col: 3, border: [], borderhighlight: ['BlueColor'], borderchars: ['0', '1', '2', '3', '4', '5', '6', '7']})
call popup_create(['hello border', 'just blanks'], *{line: 7, col: 23, border: [], borderhighlight: ['BlueColor'], borderchars: [' ']}) call popup_create(['hello border', 'just blanks'], ~{line: 7, col: 23, border: [], borderhighlight: ['BlueColor'], borderchars: [' ']})
func MultiByte() func MultiByte()
call popup_create(['hello'], *{line: 8, col: 43, border: [], borderchars: ['─', '│', '─', '│', '┌', '┐', '┘', '└']}) call popup_create(['hello'], ~{line: 8, col: 43, border: [], borderchars: ['─', '│', '─', '│', '┌', '┐', '┘', '└']})
endfunc endfunc
END END
call writefile(lines, 'XtestPopupBorder') call writefile(lines, 'XtestPopupBorder')
let buf = RunVimInTerminal('-S XtestPopupBorder', *{rows: 12}) let buf = RunVimInTerminal('-S XtestPopupBorder', ~{rows: 12})
call VerifyScreenDump(buf, 'Test_popupwin_22', {}) call VerifyScreenDump(buf, 'Test_popupwin_22', {})
" check that changing borderchars triggers a redraw " check that changing borderchars triggers a redraw
call term_sendkeys(buf, ":call popup_setoptions(winid, *{borderchars: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']})\<CR>") call term_sendkeys(buf, ":call popup_setoptions(winid, ~{borderchars: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']})\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_23', {}) call VerifyScreenDump(buf, 'Test_popupwin_23', {})
" check multi-byte border only with 'ambiwidth' single " check multi-byte border only with 'ambiwidth' single
@@ -134,7 +135,7 @@ func Test_popup_with_border_and_padding()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call delete('XtestPopupBorder') call delete('XtestPopupBorder')
let with_border_or_padding = *{ let with_border_or_padding = ~{
\ line: 2, \ line: 2,
\ core_line: 3, \ core_line: 3,
\ col: 3, \ col: 3,
@@ -146,13 +147,13 @@ func Test_popup_with_border_and_padding()
\ firstline: 1, \ firstline: 1,
\ scrollbar: 0, \ scrollbar: 0,
\ visible: 1} \ visible: 1}
let winid = popup_create('hello border', *{line: 2, col: 3, border: []})", let winid = popup_create('hello border', ~{line: 2, col: 3, border: []})",
call assert_equal(with_border_or_padding, popup_getpos(winid)) call assert_equal(with_border_or_padding, popup_getpos(winid))
let options = popup_getoptions(winid) let options = popup_getoptions(winid)
call assert_equal([], options.border) call assert_equal([], options.border)
call assert_false(has_key(options, "padding")) call assert_false(has_key(options, "padding"))
let winid = popup_create('hello padding', *{line: 2, col: 3, padding: []}) let winid = popup_create('hello padding', ~{line: 2, col: 3, padding: []})
let with_border_or_padding.width = 15 let with_border_or_padding.width = 15
let with_border_or_padding.core_width = 13 let with_border_or_padding.core_width = 13
call assert_equal(with_border_or_padding, popup_getpos(winid)) call assert_equal(with_border_or_padding, popup_getpos(winid))
@@ -160,7 +161,7 @@ func Test_popup_with_border_and_padding()
call assert_false(has_key(options, "border")) call assert_false(has_key(options, "border"))
call assert_equal([], options.padding) call assert_equal([], options.padding)
call popup_setoptions(winid, *{ call popup_setoptions(winid, ~{
\ padding: [1, 2, 3, 4], \ padding: [1, 2, 3, 4],
\ border: [4, 0, 7, 8], \ border: [4, 0, 7, 8],
\ borderhighlight: ['Top', 'Right', 'Bottom', 'Left'], \ borderhighlight: ['Top', 'Right', 'Bottom', 'Left'],
@@ -172,8 +173,8 @@ func Test_popup_with_border_and_padding()
call assert_equal(['Top', 'Right', 'Bottom', 'Left'], options.borderhighlight) call assert_equal(['Top', 'Right', 'Bottom', 'Left'], options.borderhighlight)
call assert_equal(['1', '^', '2', '>', '3', 'v', '4', '<'], options.borderchars) call assert_equal(['1', '^', '2', '>', '3', 'v', '4', '<'], options.borderchars)
let winid = popup_create('hello both', *{line: 3, col: 8, border: [], padding: []}) let winid = popup_create('hello both', ~{line: 3, col: 8, border: [], padding: []})
call assert_equal(*{ call assert_equal(~{
\ line: 3, \ line: 3,
\ core_line: 5, \ core_line: 5,
\ col: 8, \ col: 8,
@@ -202,11 +203,11 @@ func Test_popup_with_syntax_win_execute()
\ '{', \ '{',
\ ' printf(123);', \ ' printf(123);',
\ '}', \ '}',
\], *{line: 3, col: 25, highlight: 'PopupColor'}) \], ~{line: 3, col: 25, highlight: 'PopupColor'})
call win_execute(winid, 'set syntax=cpp') call win_execute(winid, 'set syntax=cpp')
END END
call writefile(lines, 'XtestPopup') call writefile(lines, 'XtestPopup')
let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopup', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_10', {}) call VerifyScreenDump(buf, 'Test_popupwin_10', {})
" clean up " clean up
@@ -227,11 +228,11 @@ func Test_popup_with_syntax_setbufvar()
\ '{', \ '{',
\ "\tprintf(567);", \ "\tprintf(567);",
\ '}', \ '}',
\], *{line: 3, col: 21, highlight: 'PopupColor'}) \], ~{line: 3, col: 21, highlight: 'PopupColor'})
call setbufvar(winbufnr(winid), '&syntax', 'cpp') call setbufvar(winbufnr(winid), '&syntax', 'cpp')
END END
call writefile(lines, 'XtestPopup') call writefile(lines, 'XtestPopup')
let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopup', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_11', {}) call VerifyScreenDump(buf, 'Test_popupwin_11', {})
" clean up " clean up
@@ -248,7 +249,7 @@ func Test_popup_with_matches()
let winid = popup_create([ let winid = popup_create([
\ '111 222 333', \ '111 222 333',
\ '444 555 666', \ '444 555 666',
\], *{line: 3, col: 10, border: []}) \], ~{line: 3, col: 10, border: []})
set hlsearch set hlsearch
/666 /666
call matchadd('ErrorMsg', '111') call matchadd('ErrorMsg', '111')
@@ -257,7 +258,7 @@ func Test_popup_with_matches()
call win_execute(winid, "call matchadd('ErrorMsg', '555')") call win_execute(winid, "call matchadd('ErrorMsg', '555')")
END END
call writefile(lines, 'XtestPopupMatches') call writefile(lines, 'XtestPopupMatches')
let buf = RunVimInTerminal('-S XtestPopupMatches', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupMatches', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_matches', {}) call VerifyScreenDump(buf, 'Test_popupwin_matches', {})
" clean up " clean up
@@ -273,7 +274,7 @@ func Test_popup_all_corners()
call setline(1, repeat([repeat('-', 60)], 15)) call setline(1, repeat([repeat('-', 60)], 15))
set so=0 set so=0
normal 2G3|r# normal 2G3|r#
let winid1 = popup_create(['first', 'second'], *{ let winid1 = popup_create(['first', 'second'], ~{
\ line: 'cursor+1', \ line: 'cursor+1',
\ col: 'cursor', \ col: 'cursor',
\ pos: 'topleft', \ pos: 'topleft',
@@ -281,7 +282,7 @@ func Test_popup_all_corners()
\ padding: [], \ padding: [],
\ }) \ })
normal 25|r@ normal 25|r@
let winid1 = popup_create(['First', 'SeconD'], *{ let winid1 = popup_create(['First', 'SeconD'], ~{
\ line: 'cursor+1', \ line: 'cursor+1',
\ col: 'cursor', \ col: 'cursor',
\ pos: 'topright', \ pos: 'topright',
@@ -289,7 +290,7 @@ func Test_popup_all_corners()
\ padding: [], \ padding: [],
\ }) \ })
normal 9G29|r% normal 9G29|r%
let winid1 = popup_create(['fiRSt', 'seCOnd'], *{ let winid1 = popup_create(['fiRSt', 'seCOnd'], ~{
\ line: 'cursor-1', \ line: 'cursor-1',
\ col: 'cursor', \ col: 'cursor',
\ pos: 'botleft', \ pos: 'botleft',
@@ -297,7 +298,7 @@ func Test_popup_all_corners()
\ padding: [], \ padding: [],
\ }) \ })
normal 51|r& normal 51|r&
let winid1 = popup_create(['FIrsT', 'SEcoND'], *{ let winid1 = popup_create(['FIrsT', 'SEcoND'], ~{
\ line: 'cursor-1', \ line: 'cursor-1',
\ col: 'cursor', \ col: 'cursor',
\ pos: 'botright', \ pos: 'botright',
@@ -306,7 +307,7 @@ func Test_popup_all_corners()
\ }) \ })
END END
call writefile(lines, 'XtestPopupCorners') call writefile(lines, 'XtestPopupCorners')
let buf = RunVimInTerminal('-S XtestPopupCorners', *{rows: 12}) let buf = RunVimInTerminal('-S XtestPopupCorners', ~{rows: 12})
call VerifyScreenDump(buf, 'Test_popupwin_corners', {}) call VerifyScreenDump(buf, 'Test_popupwin_corners', {})
" clean up " clean up
@@ -320,25 +321,25 @@ func Test_popup_firstline()
endif endif
let lines =<< trim END let lines =<< trim END
call setline(1, range(1, 20)) call setline(1, range(1, 20))
call popup_create(['1111', '222222', '33333', '44', '5', '666666', '77777', '888', '9999999999999999'], *{ call popup_create(['1111', '222222', '33333', '44', '5', '666666', '77777', '888', '9999999999999999'], ~{
\ maxheight: 4, \ maxheight: 4,
\ firstline: 3, \ firstline: 3,
\ }) \ })
END END
call writefile(lines, 'XtestPopupFirstline') call writefile(lines, 'XtestPopupFirstline')
let buf = RunVimInTerminal('-S XtestPopupFirstline', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupFirstline', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_firstline', {}) call VerifyScreenDump(buf, 'Test_popupwin_firstline', {})
" clean up " clean up
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call delete('XtestPopupFirstline') call delete('XtestPopupFirstline')
let winid = popup_create(['1111', '222222', '33333', '44444'], *{ let winid = popup_create(['1111', '222222', '33333', '44444'], ~{
\ maxheight: 2, \ maxheight: 2,
\ firstline: 3, \ firstline: 3,
\ }) \ })
call assert_equal(3, popup_getoptions(winid).firstline) call assert_equal(3, popup_getoptions(winid).firstline)
call popup_setoptions(winid, *{firstline: 1}) call popup_setoptions(winid, ~{firstline: 1})
call assert_equal(1, popup_getoptions(winid).firstline) call assert_equal(1, popup_getoptions(winid).firstline)
call popup_close(winid) call popup_close(winid)
@@ -351,7 +352,7 @@ func Test_popup_drag()
" create a popup that covers the command line " create a popup that covers the command line
let lines =<< trim END let lines =<< trim END
call setline(1, range(1, 20)) call setline(1, range(1, 20))
let winid = popup_create(['1111', '222222', '33333'], *{ let winid = popup_create(['1111', '222222', '33333'], ~{
\ drag: 1, \ drag: 1,
\ border: [], \ border: [],
\ line: &lines - 4, \ line: &lines - 4,
@@ -363,7 +364,7 @@ func Test_popup_drag()
map <silent> <F4> :call test_setmouse(&lines - 8, &columns / 2)<CR> map <silent> <F4> :call test_setmouse(&lines - 8, &columns / 2)<CR>
END END
call writefile(lines, 'XtestPopupDrag') call writefile(lines, 'XtestPopupDrag')
let buf = RunVimInTerminal('-S XtestPopupDrag', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupDrag', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_drag_01', {}) call VerifyScreenDump(buf, 'Test_popupwin_drag_01', {})
call term_sendkeys(buf, ":call Dragit()\<CR>") call term_sendkeys(buf, ":call Dragit()\<CR>")
@@ -381,7 +382,7 @@ func Test_popup_close_with_mouse()
let lines =<< trim END let lines =<< trim END
call setline(1, range(1, 20)) call setline(1, range(1, 20))
" With border, can click on X " With border, can click on X
let winid = popup_create('foobar', *{ let winid = popup_create('foobar', ~{
\ close: 'button', \ close: 'button',
\ border: [], \ border: [],
\ line: 1, \ line: 1,
@@ -390,18 +391,18 @@ func Test_popup_close_with_mouse()
func CloseMsg(id, result) func CloseMsg(id, result)
echomsg 'Popup closed with ' .. a:result echomsg 'Popup closed with ' .. a:result
endfunc endfunc
let winid = popup_create('notification', *{ let winid = popup_create('notification', ~{
\ close: 'click', \ close: 'click',
\ line: 3, \ line: 3,
\ col: 15, \ col: 15,
\ callback: 'CloseMsg', \ callback: 'CloseMsg',
\ }) \ })
let winid = popup_create('no border here', *{ let winid = popup_create('no border here', ~{
\ close: 'button', \ close: 'button',
\ line: 5, \ line: 5,
\ col: 3, \ col: 3,
\ }) \ })
let winid = popup_create('only padding', *{ let winid = popup_create('only padding', ~{
\ close: 'button', \ close: 'button',
\ padding: [], \ padding: [],
\ line: 5, \ line: 5,
@@ -417,7 +418,7 @@ func Test_popup_close_with_mouse()
map <silent> <F4> :call test_setmouse(3, 17)<CR> map <silent> <F4> :call test_setmouse(3, 17)<CR>
END END
call writefile(lines, 'XtestPopupClose') call writefile(lines, 'XtestPopupClose')
let buf = RunVimInTerminal('-S XtestPopupClose', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupClose', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_close_01', {}) call VerifyScreenDump(buf, 'Test_popupwin_close_01', {})
call term_sendkeys(buf, ":call CloseWithX()\<CR>") call term_sendkeys(buf, ":call CloseWithX()\<CR>")
@@ -441,7 +442,7 @@ func Test_popup_with_mask()
let winid = popup_create([ let winid = popup_create([
\ 'some text', \ 'some text',
\ 'another line', \ 'another line',
\], *{ \], ~{
\ line: 1, \ line: 1,
\ col: 10, \ col: 10,
\ wrap: 0, \ wrap: 0,
@@ -453,13 +454,13 @@ func Test_popup_with_mask()
call popup_create([ call popup_create([
\ 'xxxxxxxxx', \ 'xxxxxxxxx',
\ 'yyyyyyyyy', \ 'yyyyyyyyy',
\], *{ \], ~{
\ line: 3, \ line: 3,
\ col: 18, \ col: 18,
\ zindex: 20}) \ zindex: 20})
let winidb = popup_create([ let winidb = popup_create([
\ 'just one line', \ 'just one line',
\], *{ \], ~{
\ line: 7, \ line: 7,
\ col: 10, \ col: 10,
\ wrap: 0, \ wrap: 0,
@@ -471,23 +472,27 @@ func Test_popup_with_mask()
\ mask: [[1,2,1,1], [-5,-1,4,4], [7,9,2,3], [3,5,5,5],[-7,-4,5,5]]}) \ mask: [[1,2,1,1], [-5,-1,4,4], [7,9,2,3], [3,5,5,5],[-7,-4,5,5]]})
END END
call writefile(lines, 'XtestPopupMask') call writefile(lines, 'XtestPopupMask')
let buf = RunVimInTerminal('-S XtestPopupMask', *{rows: 13}) let buf = RunVimInTerminal('-S XtestPopupMask', ~{rows: 13})
call VerifyScreenDump(buf, 'Test_popupwin_mask_1', {}) call VerifyScreenDump(buf, 'Test_popupwin_mask_1', {})
call term_sendkeys(buf, ":call popup_move(winid, *{col: 11, line: 2})\<CR>") call term_sendkeys(buf, ":call popup_move(winid, ~{col: 11, line: 2})\<CR>")
call term_sendkeys(buf, ":call popup_move(winidb, *{col: 12})\<CR>") call term_sendkeys(buf, ":call popup_move(winidb, ~{col: 12})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_mask_2', {}) call VerifyScreenDump(buf, 'Test_popupwin_mask_2', {})
call term_sendkeys(buf, ":call popup_move(winid, *{col: 65, line: 2})\<CR>") call term_sendkeys(buf, ":call popup_move(winid, ~{col: 65, line: 2})\<CR>")
call term_sendkeys(buf, ":call popup_move(winidb, *{col: 63})\<CR>") call term_sendkeys(buf, ":call popup_move(winidb, ~{col: 63})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_mask_3', {}) call VerifyScreenDump(buf, 'Test_popupwin_mask_3', {})
call term_sendkeys(buf, ":call popup_move(winid, *{pos: 'topright', col: 12, line: 2})\<CR>") call term_sendkeys(buf, ":call popup_move(winid, ~{pos: 'topright', col: 12, line: 2})\<CR>")
call term_sendkeys(buf, ":call popup_move(winidb, *{pos: 'topright', col: 12})\<CR>") call term_sendkeys(buf, ":call popup_move(winidb, ~{pos: 'topright', col: 12})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_mask_4', {}) call VerifyScreenDump(buf, 'Test_popupwin_mask_4', {})
call term_sendkeys(buf, ":call popup_move(winid, *{pos: 'topright', col: 12, line: 11})\<CR>") call term_sendkeys(buf, ":call popup_move(winid, ~{pos: 'topright', col: 12, line: 11})\<CR>")
call term_sendkeys(buf, ":call popup_move(winidb, *{pos: 'topleft', col: 42, line: 11})\<CR>") call term_sendkeys(buf, ":call popup_move(winidb, ~{pos: 'topleft', col: 42, line: 11})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_mask_5', {}) call VerifyScreenDump(buf, 'Test_popupwin_mask_5', {})
" clean up " clean up
@@ -506,7 +511,7 @@ func Test_popup_select()
let lines =<< trim END let lines =<< trim END
set clipboard=autoselect set clipboard=autoselect
call setline(1, range(1, 20)) call setline(1, range(1, 20))
let winid = popup_create(['the word', 'some more', 'several words here'], *{ let winid = popup_create(['the word', 'some more', 'several words here'], ~{
\ drag: 1, \ drag: 1,
\ border: [], \ border: [],
\ line: 3, \ line: 3,
@@ -519,7 +524,7 @@ func Test_popup_select()
map <silent> <F4> :call test_setmouse(6, 23)<CR> map <silent> <F4> :call test_setmouse(6, 23)<CR>
END END
call writefile(lines, 'XtestPopupSelect') call writefile(lines, 'XtestPopupSelect')
let buf = RunVimInTerminal('-S XtestPopupSelect', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupSelect', ~{rows: 10})
call term_sendkeys(buf, ":call Select1()\<CR>") call term_sendkeys(buf, ":call Select1()\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_select_01', {}) call VerifyScreenDump(buf, 'Test_popupwin_select_01', {})
@@ -553,7 +558,7 @@ func Test_popup_in_tab()
call assert_equal(0, bufexists(bufnr)) call assert_equal(0, bufexists(bufnr))
" global popup is visible in any tab " global popup is visible in any tab
let winid = popup_create("text", *{tabpage: -1}) let winid = popup_create("text", ~{tabpage: -1})
call assert_equal(1, popup_getpos(winid).visible) call assert_equal(1, popup_getpos(winid).visible)
call assert_equal(-1, popup_getoptions(winid).tabpage) call assert_equal(-1, popup_getoptions(winid).tabpage)
tabnew tabnew
@@ -565,7 +570,7 @@ func Test_popup_in_tab()
" create popup in other tab " create popup in other tab
tabnew tabnew
let winid = popup_create("text", *{tabpage: 1}) let winid = popup_create("text", ~{tabpage: 1})
call assert_equal(0, popup_getpos(winid).visible) call assert_equal(0, popup_getpos(winid).visible)
call assert_equal(1, popup_getoptions(winid).tabpage) call assert_equal(1, popup_getoptions(winid).tabpage)
quit quit
@@ -576,19 +581,19 @@ endfunc
func Test_popup_valid_arguments() func Test_popup_valid_arguments()
" Zero value is like the property wasn't there " Zero value is like the property wasn't there
let winid = popup_create("text", *{col: 0}) let winid = popup_create("text", ~{col: 0})
let pos = popup_getpos(winid) let pos = popup_getpos(winid)
call assert_inrange(&columns / 2 - 1, &columns / 2 + 1, pos.col) call assert_inrange(&columns / 2 - 1, &columns / 2 + 1, pos.col)
call popup_clear() call popup_clear()
" using cursor column has minimum value of 1 " using cursor column has minimum value of 1
let winid = popup_create("text", *{col: 'cursor-100'}) let winid = popup_create("text", ~{col: 'cursor-100'})
let pos = popup_getpos(winid) let pos = popup_getpos(winid)
call assert_equal(1, pos.col) call assert_equal(1, pos.col)
call popup_clear() call popup_clear()
" center " center
let winid = popup_create("text", *{pos: 'center'}) let winid = popup_create("text", ~{pos: 'center'})
let pos = popup_getpos(winid) let pos = popup_getpos(winid)
let around = (&columns - pos.width) / 2 let around = (&columns - pos.width) / 2
call assert_inrange(around - 1, around + 1, pos.col) call assert_inrange(around - 1, around + 1, pos.col)
@@ -603,40 +608,40 @@ func Test_popup_invalid_arguments()
call assert_fails('call popup_create("text", "none")', 'E715:') call assert_fails('call popup_create("text", "none")', 'E715:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{col: "xxx"})', 'E475:') call assert_fails('call popup_create("text", ~{col: "xxx"})', 'E475:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{col: "cursor8"})', 'E15:') call assert_fails('call popup_create("text", ~{col: "cursor8"})', 'E15:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{col: "cursor+x"})', 'E15:') call assert_fails('call popup_create("text", ~{col: "cursor+x"})', 'E15:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{col: "cursor+8x"})', 'E15:') call assert_fails('call popup_create("text", ~{col: "cursor+8x"})', 'E15:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{line: "xxx"})', 'E475:') call assert_fails('call popup_create("text", ~{line: "xxx"})', 'E475:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{line: "cursor8"})', 'E15:') call assert_fails('call popup_create("text", ~{line: "cursor8"})', 'E15:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{line: "cursor+x"})', 'E15:') call assert_fails('call popup_create("text", ~{line: "cursor+x"})', 'E15:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{line: "cursor+8x"})', 'E15:') call assert_fails('call popup_create("text", ~{line: "cursor+8x"})', 'E15:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{pos: "there"})', 'E475:') call assert_fails('call popup_create("text", ~{pos: "there"})', 'E475:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{padding: "none"})', 'E714:') call assert_fails('call popup_create("text", ~{padding: "none"})', 'E714:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{border: "none"})', 'E714:') call assert_fails('call popup_create("text", ~{border: "none"})', 'E714:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{borderhighlight: "none"})', 'E714:') call assert_fails('call popup_create("text", ~{borderhighlight: "none"})', 'E714:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create("text", *{borderchars: "none"})', 'E714:') call assert_fails('call popup_create("text", ~{borderchars: "none"})', 'E714:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create([*{text: "text"}, 666], {})', 'E715:') call assert_fails('call popup_create([~{text: "text"}, 666], {})', 'E715:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create([*{text: "text", props: "none"}], {})', 'E714:') call assert_fails('call popup_create([~{text: "text", props: "none"}], {})', 'E714:')
call popup_clear() call popup_clear()
call assert_fails('call popup_create([*{text: "text", props: ["none"]}], {})', 'E715:') call assert_fails('call popup_create([~{text: "text", props: ["none"]}], {})', 'E715:')
call popup_clear() call popup_clear()
endfunc endfunc
@@ -676,10 +681,10 @@ func Test_popup_with_wrap()
call setline(1, range(1, 100)) call setline(1, range(1, 100))
let winid = popup_create( let winid = popup_create(
\ 'a long line that wont fit', \ 'a long line that wont fit',
\ *{line: 3, col: 20, maxwidth: 10, wrap: 1}) \ ~{line: 3, col: 20, maxwidth: 10, wrap: 1})
END END
call writefile(lines, 'XtestPopup') call writefile(lines, 'XtestPopup')
let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopup', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_wrap', {}) call VerifyScreenDump(buf, 'Test_popupwin_wrap', {})
" clean up " clean up
@@ -695,10 +700,10 @@ func Test_popup_without_wrap()
call setline(1, range(1, 100)) call setline(1, range(1, 100))
let winid = popup_create( let winid = popup_create(
\ 'a long line that wont fit', \ 'a long line that wont fit',
\ *{line: 3, col: 20, maxwidth: 10, wrap: 0}) \ ~{line: 3, col: 20, maxwidth: 10, wrap: 0})
END END
call writefile(lines, 'XtestPopup') call writefile(lines, 'XtestPopup')
let buf = RunVimInTerminal('-S XtestPopup', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopup', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_nowrap', {}) call VerifyScreenDump(buf, 'Test_popupwin_nowrap', {})
" clean up " clean up
@@ -713,7 +718,7 @@ func Test_popup_time()
topleft vnew topleft vnew
call setline(1, 'hello') call setline(1, 'hello')
let winid = popup_create('world', *{ let winid = popup_create('world', ~{
\ line: 1, \ line: 1,
\ col: 1, \ col: 1,
\ minwidth: 20, \ minwidth: 20,
@@ -733,7 +738,7 @@ func Test_popup_time()
let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '') let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
call assert_equal('hello', line) call assert_equal('hello', line)
call popup_create('on the command line', *{ call popup_create('on the command line', ~{
\ line: &lines, \ line: &lines,
\ col: 10, \ col: 10,
\ minwidth: 20, \ minwidth: 20,
@@ -755,7 +760,7 @@ func Test_popup_hide()
topleft vnew topleft vnew
call setline(1, 'hello') call setline(1, 'hello')
let winid = popup_create('world', *{ let winid = popup_create('world', ~{
\ line: 1, \ line: 1,
\ col: 1, \ col: 1,
\ minwidth: 20, \ minwidth: 20,
@@ -801,7 +806,7 @@ func Test_popup_move()
topleft vnew topleft vnew
call setline(1, 'hello') call setline(1, 'hello')
let winid = popup_create('world', *{ let winid = popup_create('world', ~{
\ line: 1, \ line: 1,
\ col: 1, \ col: 1,
\ minwidth: 20, \ minwidth: 20,
@@ -810,14 +815,14 @@ func Test_popup_move()
let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '')
call assert_equal('world ', line) call assert_equal('world ', line)
call popup_move(winid, *{line: 2, col: 2}) call popup_move(winid, ~{line: 2, col: 2})
redraw redraw
let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '')
call assert_equal('hello ', line) call assert_equal('hello ', line)
let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '') let line = join(map(range(1, 6), 'screenstring(2, v:val)'), '')
call assert_equal('~world', line) call assert_equal('~world', line)
call popup_move(winid, *{line: 1}) call popup_move(winid, ~{line: 1})
redraw redraw
let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '') let line = join(map(range(1, 6), 'screenstring(1, v:val)'), '')
call assert_equal('hworld', line) call assert_equal('hworld', line)
@@ -828,7 +833,7 @@ func Test_popup_move()
endfunc endfunc
func Test_popup_getpos() func Test_popup_getpos()
let winid = popup_create('hello', *{ let winid = popup_create('hello', ~{
\ line: 2, \ line: 2,
\ col: 3, \ col: 3,
\ minwidth: 10, \ minwidth: 10,
@@ -855,7 +860,7 @@ func Test_popup_width_longest()
\ ] \ ]
for test in tests for test in tests
let winid = popup_create(test[0], *{line: 2, col: 3}) let winid = popup_create(test[0], ~{line: 2, col: 3})
redraw redraw
let position = popup_getpos(winid) let position = popup_getpos(winid)
call assert_equal(test[1], position.width) call assert_equal(test[1], position.width)
@@ -871,7 +876,7 @@ func Test_popup_wraps()
\ ] \ ]
for test in tests for test in tests
let winid = popup_create(test[0], let winid = popup_create(test[0],
\ *{line: 2, col: 3, maxwidth: 12}) \ ~{line: 2, col: 3, maxwidth: 12})
redraw redraw
let position = popup_getpos(winid) let position = popup_getpos(winid)
call assert_equal(test[1], position.width) call assert_equal(test[1], position.width)
@@ -883,7 +888,7 @@ func Test_popup_wraps()
endfunc endfunc
func Test_popup_getoptions() func Test_popup_getoptions()
let winid = popup_create('hello', *{ let winid = popup_create('hello', ~{
\ line: 2, \ line: 2,
\ col: 3, \ col: 3,
\ minwidth: 10, \ minwidth: 10,
@@ -976,7 +981,7 @@ func Test_popup_atcursor()
call cursor(1, 1) call cursor(1, 1)
redraw redraw
let winid = popup_create('vim', *{ let winid = popup_create('vim', ~{
\ line: 'cursor+2', \ line: 'cursor+2',
\ col: 'cursor+1', \ col: 'cursor+1',
\}) \})
@@ -987,7 +992,7 @@ func Test_popup_atcursor()
call cursor(3, 3) call cursor(3, 3)
redraw redraw
let winid = popup_create('vim', *{ let winid = popup_create('vim', ~{
\ line: 'cursor-2', \ line: 'cursor-2',
\ col: 'cursor-1', \ col: 'cursor-1',
\}) \})
@@ -1056,7 +1061,7 @@ func Test_popup_beval()
endfunc endfunc
END END
call writefile(lines, 'XtestPopupBeval') call writefile(lines, 'XtestPopupBeval')
let buf = RunVimInTerminal('-S XtestPopupBeval', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupBeval', ~{rows: 10})
call term_wait(buf, 100) call term_wait(buf, 100)
call term_sendkeys(buf, 'j') call term_sendkeys(buf, 'j')
call term_sendkeys(buf, ":call Hover()\<CR>") call term_sendkeys(buf, ":call Hover()\<CR>")
@@ -1093,7 +1098,7 @@ func Test_popup_filter()
return 0 return 0
endfunc endfunc
let winid = popup_create('something', *{filter: 'MyPopupFilter'}) let winid = popup_create('something', ~{filter: 'MyPopupFilter'})
redraw redraw
" e is consumed by the filter " e is consumed by the filter
@@ -1118,7 +1123,7 @@ endfunc
func ShowDialog(key, result) func ShowDialog(key, result)
let s:cb_res = 999 let s:cb_res = 999
let winid = popup_dialog('do you want to quit (Yes/no)?', *{ let winid = popup_dialog('do you want to quit (Yes/no)?', ~{
\ filter: 'popup_filter_yesno', \ filter: 'popup_filter_yesno',
\ callback: 'QuitCallback', \ callback: 'QuitCallback',
\ }) \ })
@@ -1148,7 +1153,7 @@ endfunc
func ShowMenu(key, result) func ShowMenu(key, result)
let s:cb_res = 999 let s:cb_res = 999
let winid = popup_menu(['one', 'two', 'something else'], *{ let winid = popup_menu(['one', 'two', 'something else'], ~{
\ callback: 'QuitCallback', \ callback: 'QuitCallback',
\ }) \ })
redraw redraw
@@ -1184,13 +1189,13 @@ func Test_popup_menu_screenshot()
let lines =<< trim END let lines =<< trim END
call setline(1, range(1, 20)) call setline(1, range(1, 20))
hi PopupSelected ctermbg=lightblue hi PopupSelected ctermbg=lightblue
call popup_menu(['one', 'two', 'another'], *{callback: 'MenuDone', title: ' make a choice from the list '}) call popup_menu(['one', 'two', 'another'], ~{callback: 'MenuDone', title: ' make a choice from the list '})
func MenuDone(id, res) func MenuDone(id, res)
echomsg "selected " .. a:res echomsg "selected " .. a:res
endfunc endfunc
END END
call writefile(lines, 'XtestPopupMenu') call writefile(lines, 'XtestPopupMenu')
let buf = RunVimInTerminal('-S XtestPopupMenu', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupMenu', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_menu_01', {}) call VerifyScreenDump(buf, 'Test_popupwin_menu_01', {})
call term_sendkeys(buf, "jj") call term_sendkeys(buf, "jj")
@@ -1213,19 +1218,19 @@ func Test_popup_title()
" put the title on. " put the title on.
let lines =<< trim END let lines =<< trim END
call setline(1, range(1, 20)) call setline(1, range(1, 20))
call popup_create(['one', 'two', 'another'], *{title: 'Title String'}) call popup_create(['one', 'two', 'another'], ~{title: 'Title String'})
END END
call writefile(lines, 'XtestPopupTitle') call writefile(lines, 'XtestPopupTitle')
let buf = RunVimInTerminal('-S XtestPopupTitle', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupTitle', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_title', {}) call VerifyScreenDump(buf, 'Test_popupwin_title', {})
" clean up " clean up
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call delete('XtestPopupTitle') call delete('XtestPopupTitle')
let winid = popup_create('something', *{title: 'Some Title'}) let winid = popup_create('something', ~{title: 'Some Title'})
call assert_equal('Some Title', popup_getoptions(winid).title) call assert_equal('Some Title', popup_getoptions(winid).title)
call popup_setoptions(winid, *{title: 'Another Title'}) call popup_setoptions(winid, ~{title: 'Another Title'})
call assert_equal('Another Title', popup_getoptions(winid).title) call assert_equal('Another Title', popup_getoptions(winid).title)
call popup_clear() call popup_clear()
@@ -1235,20 +1240,20 @@ func Test_popup_close_callback()
func PopupDone(id, result) func PopupDone(id, result)
let g:result = a:result let g:result = a:result
endfunc endfunc
let winid = popup_create('something', *{callback: 'PopupDone'}) let winid = popup_create('something', ~{callback: 'PopupDone'})
redraw redraw
call popup_close(winid, 'done') call popup_close(winid, 'done')
call assert_equal('done', g:result) call assert_equal('done', g:result)
endfunc endfunc
func Test_popup_empty() func Test_popup_empty()
let winid = popup_create('', *{padding: [2,2,2,2]}) let winid = popup_create('', ~{padding: [2,2,2,2]})
redraw redraw
let pos = popup_getpos(winid) let pos = popup_getpos(winid)
call assert_equal(5, pos.width) call assert_equal(5, pos.width)
call assert_equal(5, pos.height) call assert_equal(5, pos.height)
let winid = popup_create([], *{border: []}) let winid = popup_create([], ~{border: []})
redraw redraw
let pos = popup_getpos(winid) let pos = popup_getpos(winid)
call assert_equal(3, pos.width) call assert_equal(3, pos.width)
@@ -1277,13 +1282,13 @@ func Test_popup_never_behind()
let info_window1 = getwininfo()[0] let info_window1 = getwininfo()[0]
let line = info_window1['height'] let line = info_window1['height']
let col = info_window1['width'] let col = info_window1['width']
call popup_create(['line1', 'line2', 'line3', 'line4'], *{ call popup_create(['line1', 'line2', 'line3', 'line4'], ~{
\ line : line, \ line : line,
\ col : col, \ col : col,
\ }) \ })
END END
call writefile(lines, 'XtestPopupBehind') call writefile(lines, 'XtestPopupBehind')
let buf = RunVimInTerminal('-S XtestPopupBehind', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupBehind', ~{rows: 10})
call term_sendkeys(buf, "\<C-W>w") call term_sendkeys(buf, "\<C-W>w")
call VerifyScreenDump(buf, 'Test_popupwin_behind', {}) call VerifyScreenDump(buf, 'Test_popupwin_behind', {})
@@ -1340,9 +1345,9 @@ func Test_popup_position_adjust()
" - expected width " - expected width
" - expected height " - expected height
let tests = [ let tests = [
\ *{ \ ~{
\ comment: 'left-aligned with wrapping', \ comment: 'left-aligned with wrapping',
\ options: *{ \ options: ~{
\ wrap: 1, \ wrap: 1,
\ pos: 'botleft', \ pos: 'botleft',
\ }, \ },
@@ -1354,9 +1359,9 @@ func Test_popup_position_adjust()
\ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ], \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ],
\ ], \ ],
\ }, \ },
\ *{ \ ~{
\ comment: 'left aligned without wrapping', \ comment: 'left aligned without wrapping',
\ options: *{ \ options: ~{
\ wrap: 0, \ wrap: 0,
\ pos: 'botleft', \ pos: 'botleft',
\ }, \ },
@@ -1368,9 +1373,9 @@ func Test_popup_position_adjust()
\ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ], \ [ 'eeee', 5, &columns - 3, 5, &columns - 3, 4, 1 ],
\ ], \ ],
\ }, \ },
\ *{ \ ~{
\ comment: 'left aligned with fixed position', \ comment: 'left aligned with fixed position',
\ options: *{ \ options: ~{
\ wrap: 0, \ wrap: 0,
\ fixed: 1, \ fixed: 1,
\ pos: 'botleft', \ pos: 'botleft',
@@ -1388,7 +1393,7 @@ func Test_popup_position_adjust()
for test_group in tests for test_group in tests
for test in test_group.tests for test in test_group.tests
let [ text, line, col, e_line, e_col, e_width, e_height ] = test let [ text, line, col, e_line, e_col, e_width, e_height ] = test
let options = *{ let options = ~{
\ line: line, \ line: line,
\ col: col, \ col: col,
\ } \ }
@@ -1396,7 +1401,7 @@ func Test_popup_position_adjust()
let p = popup_create( text, options ) let p = popup_create( text, options )
let msg = string(extend(options, *{text: text})) let msg = string(extend(options, ~{text: text}))
call s:VerifyPosition(p, msg, e_line, e_col, e_width, e_height) call s:VerifyPosition(p, msg, e_line, e_col, e_width, e_height)
call popup_close(p) call popup_close(p)
endfor endfor
@@ -1410,7 +1415,7 @@ func Test_adjust_left_past_screen_width()
" width of screen " width of screen
let X = join(map(range(&columns), {->'X'}), '') let X = join(map(range(&columns), {->'X'}), '')
let p = popup_create( X, *{line: 1, col: 1, wrap: 0}) let p = popup_create( X, ~{line: 1, col: 1, wrap: 0})
call s:VerifyPosition( p, 'full width topleft', 1, 1, &columns, 1 ) call s:VerifyPosition( p, 'full width topleft', 1, 1, &columns, 1 )
redraw redraw
@@ -1421,7 +1426,7 @@ func Test_adjust_left_past_screen_width()
redraw redraw
" Same if placed on the right hand side " Same if placed on the right hand side
let p = popup_create( X, *{line: 1, col: &columns, wrap: 0}) let p = popup_create( X, ~{line: 1, col: &columns, wrap: 0})
call s:VerifyPosition( p, 'full width topright', 1, 1, &columns, 1 ) call s:VerifyPosition( p, 'full width topright', 1, 1, &columns, 1 )
redraw redraw
@@ -1434,7 +1439,7 @@ func Test_adjust_left_past_screen_width()
" Extend so > window width " Extend so > window width
let X .= 'x' let X .= 'x'
let p = popup_create( X, *{line: 1, col: 1, wrap: 0}) let p = popup_create( X, ~{line: 1, col: 1, wrap: 0})
call s:VerifyPosition( p, 'full width + 1 topleft', 1, 1, &columns, 1 ) call s:VerifyPosition( p, 'full width + 1 topleft', 1, 1, &columns, 1 )
redraw redraw
@@ -1445,7 +1450,7 @@ func Test_adjust_left_past_screen_width()
redraw redraw
" Shifted then truncated (the x is not visible) " Shifted then truncated (the x is not visible)
let p = popup_create( X, *{line: 1, col: &columns - 3, wrap: 0}) let p = popup_create( X, ~{line: 1, col: &columns - 3, wrap: 0})
call s:VerifyPosition( p, 'full width + 1 topright', 1, 1, &columns, 1 ) call s:VerifyPosition( p, 'full width + 1 topright', 1, 1, &columns, 1 )
redraw redraw
@@ -1457,7 +1462,7 @@ func Test_adjust_left_past_screen_width()
" Not shifted, just truncated " Not shifted, just truncated
let p = popup_create( X, let p = popup_create( X,
\ *{line: 1, col: 2, wrap: 0, fixed: 1}) \ ~{line: 1, col: 2, wrap: 0, fixed: 1})
call s:VerifyPosition( p, 'full width + 1 fixed', 1, 2, &columns - 1, 1) call s:VerifyPosition( p, 'full width + 1 fixed', 1, 2, &columns - 1, 1)
redraw redraw
@@ -1478,7 +1483,7 @@ func Test_popup_moved()
call setline(1, ['one word to move around', 'a WORD.and->some thing']) call setline(1, ['one word to move around', 'a WORD.and->some thing'])
exe "normal gg0/word\<CR>" exe "normal gg0/word\<CR>"
let winid = popup_atcursor('text', *{moved: 'any'}) let winid = popup_atcursor('text', ~{moved: 'any'})
redraw redraw
call assert_equal(1, popup_getpos(winid).visible) call assert_equal(1, popup_getpos(winid).visible)
call assert_equal([1, 4, 4], popup_getoptions(winid).moved) call assert_equal([1, 4, 4], popup_getoptions(winid).moved)
@@ -1488,7 +1493,7 @@ func Test_popup_moved()
call popup_clear() call popup_clear()
exe "normal gg0/word\<CR>" exe "normal gg0/word\<CR>"
let winid = popup_atcursor('text', *{moved: 'word'}) let winid = popup_atcursor('text', ~{moved: 'word'})
redraw redraw
call assert_equal(1, popup_getpos(winid).visible) call assert_equal(1, popup_getpos(winid).visible)
call assert_equal([1, 4, 7], popup_getoptions(winid).moved) call assert_equal([1, 4, 7], popup_getoptions(winid).moved)
@@ -1497,7 +1502,7 @@ func Test_popup_moved()
call popup_clear() call popup_clear()
exe "normal gg0/word\<CR>" exe "normal gg0/word\<CR>"
let winid = popup_atcursor('text', *{moved: 'word'}) let winid = popup_atcursor('text', ~{moved: 'word'})
redraw redraw
call assert_equal(1, popup_getpos(winid).visible) call assert_equal(1, popup_getpos(winid).visible)
call assert_equal([1, 4, 7], popup_getoptions(winid).moved) call assert_equal([1, 4, 7], popup_getoptions(winid).moved)
@@ -1524,7 +1529,7 @@ func Test_popup_moved()
call popup_clear() call popup_clear()
exe "normal gg0/word\<CR>" exe "normal gg0/word\<CR>"
let winid = popup_atcursor('text', *{moved: [5, 10]}) let winid = popup_atcursor('text', ~{moved: [5, 10]})
redraw redraw
call assert_equal(1, popup_getpos(winid).visible) call assert_equal(1, popup_getpos(winid).visible)
call feedkeys("eli\<Esc>", 'xt') call feedkeys("eli\<Esc>", 'xt')
@@ -1551,7 +1556,7 @@ func Test_notifications()
\ "hi Notification ctermbg=lightblue", \ "hi Notification ctermbg=lightblue",
\ "call popup_notification('first notification', {})", \ "call popup_notification('first notification', {})",
\], 'XtestNotifications') \], 'XtestNotifications')
let buf = RunVimInTerminal('-S XtestNotifications', *{rows: 10}) let buf = RunVimInTerminal('-S XtestNotifications', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_notify_01', {}) call VerifyScreenDump(buf, 'Test_popupwin_notify_01', {})
" second one goes below the first one " second one goes below the first one
@@ -1574,7 +1579,7 @@ func Test_popup_scrollbar()
hi ScrollThumb ctermbg=blue hi ScrollThumb ctermbg=blue
hi ScrollBar ctermbg=red hi ScrollBar ctermbg=red
let winid = popup_create(['one', 'two', 'three', 'four', 'five', let winid = popup_create(['one', 'two', 'three', 'four', 'five',
\ 'six', 'seven', 'eight', 'nine'], *{ \ 'six', 'seven', 'eight', 'nine'], ~{
\ minwidth: 8, \ minwidth: 8,
\ maxheight: 4, \ maxheight: 4,
\ }) \ })
@@ -1588,7 +1593,7 @@ func Test_popup_scrollbar()
call feedkeys("\<F4>\<LeftMouse>", "xt") call feedkeys("\<F4>\<LeftMouse>", "xt")
endfunc endfunc
func ClickBot() func ClickBot()
call popup_setoptions(g:winid, *{border: [], close: 'button'}) call popup_setoptions(g:winid, ~{border: [], close: 'button'})
call feedkeys("\<F5>\<LeftMouse>", "xt") call feedkeys("\<F5>\<LeftMouse>", "xt")
endfunc endfunc
map <silent> <F3> :call test_setmouse(5, 36)<CR> map <silent> <F3> :call test_setmouse(5, 36)<CR>
@@ -1596,19 +1601,22 @@ func Test_popup_scrollbar()
map <silent> <F5> :call test_setmouse(7, 42)<CR> map <silent> <F5> :call test_setmouse(7, 42)<CR>
END END
call writefile(lines, 'XtestPopupScroll') call writefile(lines, 'XtestPopupScroll')
let buf = RunVimInTerminal('-S XtestPopupScroll', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupScroll', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popupwin_scroll_1', {}) call VerifyScreenDump(buf, 'Test_popupwin_scroll_1', {})
call term_sendkeys(buf, ":call popup_setoptions(winid, *{firstline: 2})\<CR>") call term_sendkeys(buf, ":call popup_setoptions(winid, ~{firstline: 2})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_scroll_2', {}) call VerifyScreenDump(buf, 'Test_popupwin_scroll_2', {})
call term_sendkeys(buf, ":call popup_setoptions(winid, *{firstline: 6})\<CR>") call term_sendkeys(buf, ":call popup_setoptions(winid, ~{firstline: 6})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_scroll_3', {}) call VerifyScreenDump(buf, 'Test_popupwin_scroll_3', {})
call term_sendkeys(buf, ":call popup_setoptions(winid, *{firstline: 9})\<CR>") call term_sendkeys(buf, ":call popup_setoptions(winid, ~{firstline: 9})\<CR>")
call term_sendkeys(buf, ":\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_scroll_4', {}) call VerifyScreenDump(buf, 'Test_popupwin_scroll_4', {})
call term_sendkeys(buf, ":call popup_setoptions(winid, *{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb'})\<CR>") call term_sendkeys(buf, ":call popup_setoptions(winid, ~{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb'})\<CR>")
call term_sendkeys(buf, ":call ScrollUp()\<CR>") call term_sendkeys(buf, ":call ScrollUp()\<CR>")
call VerifyScreenDump(buf, 'Test_popupwin_scroll_5', {}) call VerifyScreenDump(buf, 'Test_popupwin_scroll_5', {})
@@ -1637,7 +1645,7 @@ endfunc
func Test_popup_fitting_scrollbar() func Test_popup_fitting_scrollbar()
" this was causing a crash, divide by zero " this was causing a crash, divide by zero
let winid = popup_create([ let winid = popup_create([
\ 'one', 'two', 'longer line that wraps', 'four', 'five'], *{ \ 'one', 'two', 'longer line that wraps', 'four', 'five'], ~{
\ scrollbar: 1, \ scrollbar: 1,
\ maxwidth: 10, \ maxwidth: 10,
\ maxheight: 5, \ maxheight: 5,
@@ -1652,13 +1660,13 @@ func Test_popup_settext()
endif endif
let lines =<< trim END let lines =<< trim END
let opts = *{wrap: 0} let opts = ~{wrap: 0}
let p = popup_create('test', opts) let p = popup_create('test', opts)
call popup_settext(p, 'this is a text') call popup_settext(p, 'this is a text')
END END
call writefile( lines, 'XtestPopupSetText' ) call writefile( lines, 'XtestPopupSetText' )
let buf = RunVimInTerminal('-S XtestPopupSetText', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupSetText', ~{rows: 10})
call VerifyScreenDump(buf, 'Test_popup_settext_01', {}) call VerifyScreenDump(buf, 'Test_popup_settext_01', {})
" Setting to empty string clears it " Setting to empty string clears it
@@ -1682,7 +1690,7 @@ func Test_popup_settext()
call VerifyScreenDump(buf, 'Test_popup_settext_05', {}) call VerifyScreenDump(buf, 'Test_popup_settext_05', {})
" Dicts " Dicts
call term_sendkeys(buf, ":call popup_settext(p, [*{text: 'aaaa'}, *{text: 'bbbb'}, *{text: 'cccc'}])\<CR>") call term_sendkeys(buf, ":call popup_settext(p, [~{text: 'aaaa'}, ~{text: 'bbbb'}, ~{text: 'cccc'}])\<CR>")
call VerifyScreenDump(buf, 'Test_popup_settext_06', {}) call VerifyScreenDump(buf, 'Test_popup_settext_06', {})
" clean up " clean up
@@ -1693,12 +1701,12 @@ endfunc
func Test_popup_hidden() func Test_popup_hidden()
new new
let winid = popup_atcursor('text', *{hidden: 1}) let winid = popup_atcursor('text', ~{hidden: 1})
redraw redraw
call assert_equal(0, popup_getpos(winid).visible) call assert_equal(0, popup_getpos(winid).visible)
call popup_close(winid) call popup_close(winid)
let winid = popup_create('text', *{hidden: 1}) let winid = popup_create('text', ~{hidden: 1})
redraw redraw
call assert_equal(0, popup_getpos(winid).visible) call assert_equal(0, popup_getpos(winid).visible)
call popup_close(winid) call popup_close(winid)
@@ -1707,7 +1715,7 @@ func Test_popup_hidden()
let s:cb_winid = a:id let s:cb_winid = a:id
let s:cb_res = a:res let s:cb_res = a:res
endfunc endfunc
let winid = popup_dialog('make a choice', *{hidden: 1, let winid = popup_dialog('make a choice', ~{hidden: 1,
\ filter: 'popup_filter_yesno', \ filter: 'popup_filter_yesno',
\ callback: 'QuitCallback', \ callback: 'QuitCallback',
\ }) \ })
@@ -1728,13 +1736,13 @@ endfunc
" Test options not checked elsewhere " Test options not checked elsewhere
func Test_set_get_options() func Test_set_get_options()
let winid = popup_create('some text', *{highlight: 'Beautiful'}) let winid = popup_create('some text', ~{highlight: 'Beautiful'})
let options = popup_getoptions(winid) let options = popup_getoptions(winid)
call assert_equal(1, options.wrap) call assert_equal(1, options.wrap)
call assert_equal(0, options.drag) call assert_equal(0, options.drag)
call assert_equal('Beautiful', options.highlight) call assert_equal('Beautiful', options.highlight)
call popup_setoptions(winid, *{wrap: 0, drag: 1, highlight: 'Another'}) call popup_setoptions(winid, ~{wrap: 0, drag: 1, highlight: 'Another'})
let options = popup_getoptions(winid) let options = popup_getoptions(winid)
call assert_equal(0, options.wrap) call assert_equal(0, options.wrap)
call assert_equal(1, options.drag) call assert_equal(1, options.drag)
@@ -1748,7 +1756,7 @@ func Test_popupwin_garbage_collect()
" NOP " NOP
endfunc endfunc
let winid = popup_create('something', *{filter: function('MyPopupFilter', [{}])}) let winid = popup_create('something', ~{filter: function('MyPopupFilter', [{}])})
call test_garbagecollect_now() call test_garbagecollect_now()
redraw redraw
" Must not crach caused by invalid memory access " Must not crach caused by invalid memory access
@@ -1781,12 +1789,12 @@ func Test_popupwin_with_buffer()
endfunc endfunc
func Test_popupwin_width() func Test_popupwin_width()
let winid = popup_create(repeat(['short', 'long long long line', 'medium width'], 50), *{ let winid = popup_create(repeat(['short', 'long long long line', 'medium width'], 50), ~{
\ maxwidth: 40, \ maxwidth: 40,
\ maxheight: 10, \ maxheight: 10,
\ }) \ })
for top in range(1, 20) for top in range(1, 20)
call popup_setoptions(winid, *{firstline: top}) call popup_setoptions(winid, ~{firstline: top})
redraw redraw
call assert_equal(19, popup_getpos(winid).width) call assert_equal(19, popup_getpos(winid).width)
endfor endfor
@@ -1830,7 +1838,7 @@ func Test_popup_menu_with_maxwidth()
hi ScrollThumb ctermbg=blue hi ScrollThumb ctermbg=blue
hi ScrollBar ctermbg=red hi ScrollBar ctermbg=red
func PopupMenu(lines, line, col, scrollbar = 0) func PopupMenu(lines, line, col, scrollbar = 0)
return popup_menu(a:lines, *{ return popup_menu(a:lines, ~{
\ maxwidth: 10, \ maxwidth: 10,
\ maxheight: 3, \ maxheight: 3,
\ pos : 'topleft', \ pos : 'topleft',
@@ -1846,7 +1854,7 @@ func Test_popup_menu_with_maxwidth()
call PopupMenu(repeat(['123456789|' .. ' '], 5), 1, 33, 1) call PopupMenu(repeat(['123456789|' .. ' '], 5), 1, 33, 1)
END END
call writefile(lines, 'XtestPopupMenuMaxWidth') call writefile(lines, 'XtestPopupMenuMaxWidth')
let buf = RunVimInTerminal('-S XtestPopupMenuMaxWidth', *{rows: 13}) let buf = RunVimInTerminal('-S XtestPopupMenuMaxWidth', ~{rows: 13})
call VerifyScreenDump(buf, 'Test_popupwin_menu_maxwidth_1', {}) call VerifyScreenDump(buf, 'Test_popupwin_menu_maxwidth_1', {})
" close the menu popupwin. " close the menu popupwin.
@@ -1871,13 +1879,13 @@ func Test_popup_menu_with_scrollbar()
hi ScrollThumb ctermbg=blue hi ScrollThumb ctermbg=blue
hi ScrollBar ctermbg=red hi ScrollBar ctermbg=red
call popup_menu(['one', 'two', 'three', 'four', 'five', call popup_menu(['one', 'two', 'three', 'four', 'five',
\ 'six', 'seven', 'eight', 'nine'], *{ \ 'six', 'seven', 'eight', 'nine'], ~{
\ minwidth: 8, \ minwidth: 8,
\ maxheight: 3, \ maxheight: 3,
\ }) \ })
END END
call writefile(lines, 'XtestPopupMenuScroll') call writefile(lines, 'XtestPopupMenuScroll')
let buf = RunVimInTerminal('-S XtestPopupMenuScroll', *{rows: 10}) let buf = RunVimInTerminal('-S XtestPopupMenuScroll', ~{rows: 10})
call term_sendkeys(buf, "j") call term_sendkeys(buf, "j")
call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_1', {}) call VerifyScreenDump(buf, 'Test_popupwin_menu_scroll_1', {})

View File

@@ -777,6 +777,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1692,
/**/ /**/
1691, 1691,
/**/ /**/