diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.lua | 1 | ||||
-rw-r--r-- | src/nvim/eval/funcs.c | 21 | ||||
-rw-r--r-- | src/nvim/testdir/test_cmdline.vim | 2 |
3 files changed, 24 insertions, 0 deletions
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua index 6c316bb1fe..9f1994e299 100644 --- a/src/nvim/eval.lua +++ b/src/nvim/eval.lua @@ -385,6 +385,7 @@ return { wildmenumode={}, win_findbuf={args=1}, win_getid={args={0,2}}, + win_gettype={args={0,1}}, win_gotoid={args=1}, win_id2tabwin={args=1}, win_id2win={args=1}, diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 62a8022734..090133c868 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -10992,6 +10992,27 @@ static void f_win_getid(typval_T *argvars, typval_T *rettv, FunPtr fptr) rettv->vval.v_number = win_getid(argvars); } +/// "win_gettype(nr)" function +static void f_win_gettype(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + win_T *wp = curwin; + + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + if (argvars[0].v_type != VAR_UNKNOWN) { + wp = find_win_by_nr_or_id(&argvars[0]); + if (wp == NULL) { + rettv->vval.v_string = vim_strsave((char_u *)"unknown"); + return; + } + } + if (wp->w_floating) { + rettv->vval.v_string = vim_strsave((char_u *)"popup"); + } else if (wp == curwin && cmdwin_type != 0) { + rettv->vval.v_string = vim_strsave((char_u *)"command"); + } +} + /// "win_gotoid()" function static void f_win_gotoid(typval_T *argvars, typval_T *rettv, FunPtr fptr) { diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index 400e53d009..81f653c393 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -806,12 +806,14 @@ func Test_cmdwin_cedit() let g:cmd_wintype = '' func CmdWinType() let g:cmd_wintype = getcmdwintype() + let g:wintype = win_gettype() return '' endfunc call feedkeys("\<C-c>a\<C-R>=CmdWinType()\<CR>\<CR>") echo input('') call assert_equal('@', g:cmd_wintype) + call assert_equal('command', g:wintype) set cedit&vim delfunc CmdWinType |