aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-11-25 01:32:48 -0500
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2020-11-25 02:10:44 -0500
commitede747c2cc84382e8746df8992ef0e403647ffde (patch)
tree852fb497e457dd60c9b3d07fd905e69b85e8aa82 /src
parenta9186501f6070a655f96207881a54bf509bd79ce (diff)
downloadrneovim-ede747c2cc84382e8746df8992ef0e403647ffde.tar.gz
rneovim-ede747c2cc84382e8746df8992ef0e403647ffde.tar.bz2
rneovim-ede747c2cc84382e8746df8992ef0e403647ffde.zip
vim-patch:8.2.0257: cannot recognize a terminal in a popup window
Problem: Cannot recognize a terminal in a popup window. Solution: Add the win_gettype() function. https://github.com/vim/vim/commit/00f3b4e007af07870168bf044cecc9d544483953
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval.lua1
-rw-r--r--src/nvim/eval/funcs.c21
-rw-r--r--src/nvim/testdir/test_cmdline.vim2
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