mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
vim-patch:9.1.0754: fixed order of items in insert-mode completion menu (#30619)
Problem: fixed order of items in insert-mode completion menu
Solution: Introduce the 'completeitemalign' option with default
value "abbr,kind,menu" (glepnir).
Adding an new option `completeitemalign` abbr is `cia` to custom
the complete-item order in popupmenu.
closes: vim/vim#14006
closes: vim/vim#15760
6a89c94a9e
This commit is contained in:
@@ -1529,6 +1529,16 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
|
*'completeitemalign'* *'cia'*
|
||||||
|
'completeitemalign' 'cia' string (default "abbr,kind,menu")
|
||||||
|
global
|
||||||
|
A comma-separated list of |complete-items| that controls the alignment
|
||||||
|
and display order of items in the popup menu during Insert mode
|
||||||
|
completion. The supported values are abbr, kind, and menu. These
|
||||||
|
options allow to customize how the completion items are shown in the
|
||||||
|
popup menu. Note: must always contain those three values in any
|
||||||
|
order.
|
||||||
|
|
||||||
*'completeopt'* *'cot'*
|
*'completeopt'* *'cot'*
|
||||||
'completeopt' 'cot' string (default "menu,preview")
|
'completeopt' 'cot' string (default "menu,preview")
|
||||||
global or local to buffer |global-local|
|
global or local to buffer |global-local|
|
||||||
|
13
runtime/lua/vim/_meta/options.lua
generated
13
runtime/lua/vim/_meta/options.lua
generated
@@ -1055,6 +1055,19 @@ vim.o.cfu = vim.o.completefunc
|
|||||||
vim.bo.completefunc = vim.o.completefunc
|
vim.bo.completefunc = vim.o.completefunc
|
||||||
vim.bo.cfu = vim.bo.completefunc
|
vim.bo.cfu = vim.bo.completefunc
|
||||||
|
|
||||||
|
--- A comma-separated list of `complete-items` that controls the alignment
|
||||||
|
--- and display order of items in the popup menu during Insert mode
|
||||||
|
--- completion. The supported values are abbr, kind, and menu. These
|
||||||
|
--- options allow to customize how the completion items are shown in the
|
||||||
|
--- popup menu. Note: must always contain those three values in any
|
||||||
|
--- order.
|
||||||
|
---
|
||||||
|
--- @type string
|
||||||
|
vim.o.completeitemalign = "abbr,kind,menu"
|
||||||
|
vim.o.cia = vim.o.completeitemalign
|
||||||
|
vim.go.completeitemalign = vim.o.completeitemalign
|
||||||
|
vim.go.cia = vim.go.completeitemalign
|
||||||
|
|
||||||
--- A comma-separated list of options for Insert mode completion
|
--- A comma-separated list of options for Insert mode completion
|
||||||
--- `ins-completion`. The supported values are:
|
--- `ins-completion`. The supported values are:
|
||||||
---
|
---
|
||||||
|
@@ -726,6 +726,8 @@ if has("insert_expand")
|
|||||||
call <SID>OptionL("cpt")
|
call <SID>OptionL("cpt")
|
||||||
call <SID>AddOption("completeopt", gettext("whether to use a popup menu for Insert mode completion"))
|
call <SID>AddOption("completeopt", gettext("whether to use a popup menu for Insert mode completion"))
|
||||||
call <SID>OptionL("cot")
|
call <SID>OptionL("cot")
|
||||||
|
call <SID>AddOption("completeitemalign", gettext("popup menu item align order"))
|
||||||
|
call <SID>OptionG("cia", &cia)
|
||||||
call <SID>AddOption("pumheight", gettext("maximum height of the popup menu"))
|
call <SID>AddOption("pumheight", gettext("maximum height of the popup menu"))
|
||||||
call <SID>OptionG("ph", &ph)
|
call <SID>OptionG("ph", &ph)
|
||||||
call <SID>AddOption("pumwidth", gettext("minimum width of the popup menu"))
|
call <SID>AddOption("pumwidth", gettext("minimum width of the popup menu"))
|
||||||
|
@@ -151,13 +151,6 @@ static char *ctrl_x_mode_names[] = {
|
|||||||
"cmdline",
|
"cmdline",
|
||||||
};
|
};
|
||||||
|
|
||||||
// Array indexes used for cp_text[].
|
|
||||||
#define CPT_ABBR 0 ///< "abbr"
|
|
||||||
#define CPT_MENU 1 ///< "menu"
|
|
||||||
#define CPT_KIND 2 ///< "kind"
|
|
||||||
#define CPT_INFO 3 ///< "info"
|
|
||||||
#define CPT_COUNT 4 ///< Number of entries
|
|
||||||
|
|
||||||
/// Structure used to store one match for insert completion.
|
/// Structure used to store one match for insert completion.
|
||||||
typedef struct compl_S compl_T;
|
typedef struct compl_S compl_T;
|
||||||
struct compl_S {
|
struct compl_S {
|
||||||
|
@@ -8,3 +8,12 @@
|
|||||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||||
# include "insexpand.h.generated.h"
|
# include "insexpand.h.generated.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/// Array indexes used for cp_text[].
|
||||||
|
typedef enum {
|
||||||
|
CPT_ABBR, ///< "abbr"
|
||||||
|
CPT_KIND, ///< "kind"
|
||||||
|
CPT_MENU, ///< "menu"
|
||||||
|
CPT_INFO, ///< "info"
|
||||||
|
CPT_COUNT, ///< Number of entries
|
||||||
|
} cpitem_T;
|
||||||
|
@@ -429,6 +429,8 @@ EXTERN char *p_cms; ///< 'commentstring'
|
|||||||
EXTERN char *p_cpt; ///< 'complete'
|
EXTERN char *p_cpt; ///< 'complete'
|
||||||
EXTERN OptInt p_columns; ///< 'columns'
|
EXTERN OptInt p_columns; ///< 'columns'
|
||||||
EXTERN int p_confirm; ///< 'confirm'
|
EXTERN int p_confirm; ///< 'confirm'
|
||||||
|
EXTERN char *p_cia; ///< 'completeitemalign'
|
||||||
|
EXTERN unsigned cia_flags; ///< order flags of 'completeitemalign'
|
||||||
EXTERN char *p_cot; ///< 'completeopt'
|
EXTERN char *p_cot; ///< 'completeopt'
|
||||||
EXTERN unsigned cot_flags; ///< flags from 'completeopt'
|
EXTERN unsigned cot_flags; ///< flags from 'completeopt'
|
||||||
// Keep in sync with p_cot_values in optionstr.c
|
// Keep in sync with p_cot_values in optionstr.c
|
||||||
|
@@ -1426,6 +1426,26 @@ return {
|
|||||||
type = 'string',
|
type = 'string',
|
||||||
varname = 'p_cfu',
|
varname = 'p_cfu',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
abbreviation = 'cia',
|
||||||
|
cb = 'did_set_completeitemalign',
|
||||||
|
defaults = { if_true = 'abbr,kind,menu' },
|
||||||
|
deny_duplicates = true,
|
||||||
|
desc = [=[
|
||||||
|
A comma-separated list of |complete-items| that controls the alignment
|
||||||
|
and display order of items in the popup menu during Insert mode
|
||||||
|
completion. The supported values are abbr, kind, and menu. These
|
||||||
|
options allow to customize how the completion items are shown in the
|
||||||
|
popup menu. Note: must always contain those three values in any
|
||||||
|
order.
|
||||||
|
]=],
|
||||||
|
full_name = 'completeitemalign',
|
||||||
|
list = 'onecomma',
|
||||||
|
scope = { 'global' },
|
||||||
|
short_desc = N_('Insert mode completion item align order'),
|
||||||
|
type = 'string',
|
||||||
|
varname = 'p_cia',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
abbreviation = 'cot',
|
abbreviation = 'cot',
|
||||||
cb = 'did_set_completeopt',
|
cb = 'did_set_completeopt',
|
||||||
|
@@ -995,6 +995,51 @@ int expand_set_complete(optexpand_T *args, int *numMatches, char ***matches)
|
|||||||
matches);
|
matches);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The 'completeitemalign' option is changed.
|
||||||
|
const char *did_set_completeitemalign(optset_T *args)
|
||||||
|
{
|
||||||
|
char *p = p_cia;
|
||||||
|
unsigned new_cia_flags = 0;
|
||||||
|
bool seen[3] = { false, false, false };
|
||||||
|
int count = 0;
|
||||||
|
char buf[10];
|
||||||
|
while (*p) {
|
||||||
|
copy_option_part(&p, buf, sizeof(buf), ",");
|
||||||
|
if (count >= 3) {
|
||||||
|
return e_invarg;
|
||||||
|
}
|
||||||
|
if (strequal(buf, "abbr")) {
|
||||||
|
if (seen[CPT_ABBR]) {
|
||||||
|
return e_invarg;
|
||||||
|
}
|
||||||
|
new_cia_flags = new_cia_flags * 10 + CPT_ABBR;
|
||||||
|
seen[CPT_ABBR] = true;
|
||||||
|
count++;
|
||||||
|
} else if (strequal(buf, "kind")) {
|
||||||
|
if (seen[CPT_KIND]) {
|
||||||
|
return e_invarg;
|
||||||
|
}
|
||||||
|
new_cia_flags = new_cia_flags * 10 + CPT_KIND;
|
||||||
|
seen[CPT_KIND] = true;
|
||||||
|
count++;
|
||||||
|
} else if (strequal(buf, "menu")) {
|
||||||
|
if (seen[CPT_MENU]) {
|
||||||
|
return e_invarg;
|
||||||
|
}
|
||||||
|
new_cia_flags = new_cia_flags * 10 + CPT_MENU;
|
||||||
|
seen[CPT_MENU] = true;
|
||||||
|
count++;
|
||||||
|
} else {
|
||||||
|
return e_invarg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (new_cia_flags == 0 || count != 3) {
|
||||||
|
return e_invarg;
|
||||||
|
}
|
||||||
|
cia_flags = new_cia_flags;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/// The 'completeopt' option is changed.
|
/// The 'completeopt' option is changed.
|
||||||
const char *did_set_completeopt(optset_T *args FUNC_ATTR_UNUSED)
|
const char *did_set_completeopt(optset_T *args FUNC_ATTR_UNUSED)
|
||||||
{
|
{
|
||||||
|
@@ -525,6 +525,27 @@ static void pum_grid_puts_with_attrs(int col, int cells, const char *text, int t
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void pum_align_order(int *order)
|
||||||
|
{
|
||||||
|
bool is_default = cia_flags == 0;
|
||||||
|
order[0] = is_default ? CPT_ABBR : cia_flags / 100;
|
||||||
|
order[1] = is_default ? CPT_KIND : (cia_flags / 10) % 10;
|
||||||
|
order[2] = is_default ? CPT_MENU : cia_flags % 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline char *pum_get_item(int index, int type)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
case CPT_ABBR:
|
||||||
|
return pum_array[index].pum_text;
|
||||||
|
case CPT_KIND:
|
||||||
|
return pum_array[index].pum_kind;
|
||||||
|
case CPT_MENU:
|
||||||
|
return pum_array[index].pum_extra;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/// Redraw the popup menu, using "pum_first" and "pum_selected".
|
/// Redraw the popup menu, using "pum_first" and "pum_selected".
|
||||||
void pum_redraw(void)
|
void pum_redraw(void)
|
||||||
{
|
{
|
||||||
@@ -621,34 +642,27 @@ void pum_redraw(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Display each entry, use two spaces for a Tab.
|
// Display each entry, use two spaces for a Tab.
|
||||||
// Do this 3 times:
|
// Do this 3 times and order from p_cia
|
||||||
// 0 - main text
|
|
||||||
// 1 - kind
|
|
||||||
// 2 - extra info
|
|
||||||
int grid_col = col_off;
|
int grid_col = col_off;
|
||||||
int totwidth = 0;
|
int totwidth = 0;
|
||||||
|
int order[3];
|
||||||
for (int round = 0; round < 3; round++) {
|
int items_width_array[3] = { pum_base_width, pum_kind_width, pum_extra_width };
|
||||||
hlf = hlfs[round];
|
pum_align_order(order);
|
||||||
|
int basic_width = items_width_array[order[0]]; // first item width
|
||||||
|
bool last_isabbr = order[2] == CPT_ABBR;
|
||||||
|
for (int j = 0; j < 3; j++) {
|
||||||
|
int item_type = order[j];
|
||||||
|
hlf = hlfs[item_type];
|
||||||
attr = win_hl_attr(curwin, (int)hlf);
|
attr = win_hl_attr(curwin, (int)hlf);
|
||||||
if (pum_array[idx].pum_user_hlattr > 0) {
|
if (pum_array[idx].pum_user_hlattr > 0) {
|
||||||
attr = hl_combine_attr(attr, pum_array[idx].pum_user_hlattr);
|
attr = hl_combine_attr(attr, pum_array[idx].pum_user_hlattr);
|
||||||
}
|
}
|
||||||
if (round == 1 && pum_array[idx].pum_user_kind_hlattr > 0) {
|
if (item_type == CPT_KIND && pum_array[idx].pum_user_kind_hlattr > 0) {
|
||||||
attr = hl_combine_attr(attr, pum_array[idx].pum_user_kind_hlattr);
|
attr = hl_combine_attr(attr, pum_array[idx].pum_user_kind_hlattr);
|
||||||
}
|
}
|
||||||
int width = 0;
|
int width = 0;
|
||||||
char *s = NULL;
|
char *s = NULL;
|
||||||
|
p = pum_get_item(idx, item_type);
|
||||||
switch (round) {
|
|
||||||
case 0:
|
|
||||||
p = pum_array[idx].pum_text; break;
|
|
||||||
case 1:
|
|
||||||
p = pum_array[idx].pum_kind; break;
|
|
||||||
case 2:
|
|
||||||
p = pum_array[idx].pum_extra; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
for (;; MB_PTR_ADV(p)) {
|
for (;; MB_PTR_ADV(p)) {
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
@@ -737,31 +751,31 @@ void pum_redraw(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (round > 0) {
|
if (j > 0) {
|
||||||
n = pum_kind_width + 1;
|
n = items_width_array[order[1]] + (last_isabbr ? 0 : 1);
|
||||||
} else {
|
} else {
|
||||||
n = 1;
|
n = order[j] == CPT_ABBR ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool next_isempty = false;
|
||||||
|
if (j + 1 < 3) {
|
||||||
|
next_isempty = pum_get_item(idx, order[j + 1]) == NULL;
|
||||||
|
}
|
||||||
// Stop when there is nothing more to display.
|
// Stop when there is nothing more to display.
|
||||||
if ((round == 2)
|
if ((j == 2)
|
||||||
|| ((round == 1)
|
|| (next_isempty && (j == 1 || (j == 0 && pum_get_item(idx, order[j + 2]) == NULL)))
|
||||||
&& (pum_array[idx].pum_extra == NULL))
|
|
||||||
|| ((round == 0)
|
|
||||||
&& (pum_array[idx].pum_kind == NULL)
|
|
||||||
&& (pum_array[idx].pum_extra == NULL))
|
|
||||||
|| (pum_base_width + n >= pum_width)) {
|
|| (pum_base_width + n >= pum_width)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pum_rl) {
|
if (pum_rl) {
|
||||||
grid_line_fill(col_off - pum_base_width - n + 1, grid_col + 1, schar_from_ascii(' '), attr);
|
grid_line_fill(col_off - basic_width - n + 1, grid_col + 1, schar_from_ascii(' '), attr);
|
||||||
grid_col = col_off - pum_base_width - n;
|
grid_col = col_off - basic_width - n;
|
||||||
} else {
|
} else {
|
||||||
grid_line_fill(grid_col, col_off + pum_base_width + n, schar_from_ascii(' '), attr);
|
grid_line_fill(grid_col, col_off + basic_width + n, schar_from_ascii(' '), attr);
|
||||||
grid_col = col_off + pum_base_width + n;
|
grid_col = col_off + basic_width + n;
|
||||||
}
|
}
|
||||||
totwidth = pum_base_width + n;
|
totwidth = basic_width + n;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pum_rl) {
|
if (pum_rl) {
|
||||||
|
@@ -5061,6 +5061,108 @@ describe('builtin popupmenu', function()
|
|||||||
]])
|
]])
|
||||||
feed('<C-E><Esc>')
|
feed('<C-E><Esc>')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- oldtest: Test_pum_completeitemalign()
|
||||||
|
it('completeitemalign option', function()
|
||||||
|
screen:try_resize(30, 15)
|
||||||
|
exec([[
|
||||||
|
func Omni_test(findstart, base)
|
||||||
|
if a:findstart
|
||||||
|
return col(".")
|
||||||
|
endif
|
||||||
|
return {
|
||||||
|
\ 'words': [
|
||||||
|
\ { 'word': 'foo', 'kind': 'S', 'menu': 'menu' },
|
||||||
|
\ { 'word': 'bar', 'kind': 'T', 'menu': 'menu' },
|
||||||
|
\ { 'word': '你好', 'kind': 'C', 'menu': '中文' },
|
||||||
|
\]}
|
||||||
|
endfunc
|
||||||
|
set omnifunc=Omni_test
|
||||||
|
]])
|
||||||
|
-- T1
|
||||||
|
command('set cia=abbr,kind,menu')
|
||||||
|
feed('S<C-X><C-O>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{s:foo S menu }{1: }|
|
||||||
|
{n:bar T menu }{1: }|
|
||||||
|
{n:你好 C 中文 }{1: }|
|
||||||
|
{1:~ }|*10
|
||||||
|
{2:-- }{5:match 1 of 3} |
|
||||||
|
]])
|
||||||
|
feed('<C-E><ESC>')
|
||||||
|
-- T2
|
||||||
|
command('set cia=abbr,menu,kind')
|
||||||
|
feed('S<C-X><C-O>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{s:foo menu S }{1: }|
|
||||||
|
{n:bar menu T }{1: }|
|
||||||
|
{n:你好 中文 C }{1: }|
|
||||||
|
{1:~ }|*10
|
||||||
|
{2:-- }{5:match 1 of 3} |
|
||||||
|
]])
|
||||||
|
feed('<C-E><ESC>')
|
||||||
|
-- T3
|
||||||
|
command('set cia=kind,abbr,menu')
|
||||||
|
feed('S<C-X><C-O>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{s:S foo menu }{1: }|
|
||||||
|
{n:T bar menu }{1: }|
|
||||||
|
{n:C 你好 中文 }{1: }|
|
||||||
|
{1:~ }|*10
|
||||||
|
{2:-- }{5:match 1 of 3} |
|
||||||
|
]])
|
||||||
|
feed('<C-E><ESC>')
|
||||||
|
-- T4
|
||||||
|
command('set cia=kind,menu,abbr')
|
||||||
|
feed('S<C-X><C-O>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{s:S menu foo }{1: }|
|
||||||
|
{n:T menu bar }{1: }|
|
||||||
|
{n:C 中文 你好 }{1: }|
|
||||||
|
{1:~ }|*10
|
||||||
|
{2:-- }{5:match 1 of 3} |
|
||||||
|
]])
|
||||||
|
feed('<C-E><ESC>')
|
||||||
|
-- T5
|
||||||
|
command('set cia=menu,abbr,kind')
|
||||||
|
feed('S<C-X><C-O>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{s:menu foo S }{1: }|
|
||||||
|
{n:menu bar T }{1: }|
|
||||||
|
{n:中文 你好 C }{1: }|
|
||||||
|
{1:~ }|*10
|
||||||
|
{2:-- }{5:match 1 of 3} |
|
||||||
|
]])
|
||||||
|
feed('<C-E><ESC>')
|
||||||
|
-- T6
|
||||||
|
command('set cia=menu,kind,abbr')
|
||||||
|
feed('S<C-X><C-O>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{s:menu S foo }{1: }|
|
||||||
|
{n:menu T bar }{1: }|
|
||||||
|
{n:中文 C 你好 }{1: }|
|
||||||
|
{1:~ }|*10
|
||||||
|
{2:-- }{5:match 1 of 3} |
|
||||||
|
]])
|
||||||
|
feed('<C-E><ESC>')
|
||||||
|
-- T7
|
||||||
|
command('set cia&')
|
||||||
|
feed('S<C-X><C-O>')
|
||||||
|
screen:expect([[
|
||||||
|
foo^ |
|
||||||
|
{s:foo S menu }{1: }|
|
||||||
|
{n:bar T menu }{1: }|
|
||||||
|
{n:你好 C 中文 }{1: }|
|
||||||
|
{1:~ }|*10
|
||||||
|
{2:-- }{5:match 1 of 3} |
|
||||||
|
]])
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@@ -1583,4 +1583,64 @@ func Test_pum_user_kind_hlgroup()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_pum_completeitemalign()
|
||||||
|
CheckScreendump
|
||||||
|
let lines =<< trim END
|
||||||
|
func Omni_test(findstart, base)
|
||||||
|
if a:findstart
|
||||||
|
return col(".")
|
||||||
|
endif
|
||||||
|
return {
|
||||||
|
\ 'words': [
|
||||||
|
\ { 'word': 'foo', 'kind': 'S', 'menu': 'menu' },
|
||||||
|
\ { 'word': 'bar', 'kind': 'T', 'menu': 'menu' },
|
||||||
|
\ { 'word': '你好', 'kind': 'C', 'menu': '中文' },
|
||||||
|
\]}
|
||||||
|
endfunc
|
||||||
|
set omnifunc=Omni_test
|
||||||
|
command! -nargs=0 T1 set cia=abbr,kind,menu
|
||||||
|
command! -nargs=0 T2 set cia=abbr,menu,kind
|
||||||
|
command! -nargs=0 T3 set cia=kind,abbr,menu
|
||||||
|
command! -nargs=0 T4 set cia=kind,menu,abbr
|
||||||
|
command! -nargs=0 T5 set cia=menu,abbr,kind
|
||||||
|
command! -nargs=0 T6 set cia=menu,kind,abbr
|
||||||
|
command! -nargs=0 T7 set cia&
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xscript', 'D')
|
||||||
|
let buf = RunVimInTerminal('-S Xscript', {})
|
||||||
|
call TermWait(buf)
|
||||||
|
|
||||||
|
" T1 is default
|
||||||
|
call term_sendkeys(buf, ":T1\<CR>S\<C-X>\<C-O>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_pum_completeitemalign_01', {})
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
||||||
|
|
||||||
|
" T2
|
||||||
|
call term_sendkeys(buf, ":T2\<CR>S\<C-X>\<C-O>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_pum_completeitemalign_02', {})
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
||||||
|
|
||||||
|
" T3
|
||||||
|
call term_sendkeys(buf, ":T3\<CR>S\<C-X>\<C-O>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_pum_completeitemalign_03', {})
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
||||||
|
|
||||||
|
" T4
|
||||||
|
call term_sendkeys(buf, ":T4\<CR>S\<C-X>\<C-O>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_pum_completeitemalign_04', {})
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
||||||
|
|
||||||
|
" T5
|
||||||
|
call term_sendkeys(buf, ":T5\<CR>S\<C-X>\<C-O>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_pum_completeitemalign_05', {})
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<Esc>")
|
||||||
|
|
||||||
|
" T6
|
||||||
|
call term_sendkeys(buf, ":T6\<CR>S\<C-X>\<C-O>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_pum_completeitemalign_06', {})
|
||||||
|
call term_sendkeys(buf, "\<C-E>\<Esc>:T7\<CR>")
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Reference in New Issue
Block a user