aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2019-07-08 15:16:17 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2019-09-04 23:57:02 +0200
commitd5162afa2aee6609bf5d4f818639235b70c57a9a (patch)
tree7d0992010b1b1548e3189f46c1aa8b4c5c67cbb6 /src/nvim/eval.c
parentd7aea13fee879a5e7854f2ebe9b7321cd8daf84f (diff)
downloadrneovim-d5162afa2aee6609bf5d4f818639235b70c57a9a.tar.gz
rneovim-d5162afa2aee6609bf5d4f818639235b70c57a9a.tar.bz2
rneovim-d5162afa2aee6609bf5d4f818639235b70c57a9a.zip
anchor float to buffer position
vim-patch:8.1.1645: cannot use a popup window for a balloon
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index fa9777b651..70f38b793d 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -14781,6 +14781,32 @@ static void f_screencol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
rettv->vval.v_number = ui_current_col() + 1;
}
+/// "screenpos({winid}, {lnum}, {col})" function
+static void f_screenpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ pos_T pos;
+ int row = 0;
+ int scol = 0, ccol = 0, ecol = 0;
+
+ tv_dict_alloc_ret(rettv);
+ dict_T *dict = rettv->vval.v_dict;
+
+ win_T *wp = find_win_by_nr_or_id(&argvars[0]);
+ if (wp == NULL) {
+ return;
+ }
+
+ pos.lnum = tv_get_number(&argvars[1]);
+ pos.col = tv_get_number(&argvars[2]) - 1;
+ pos.coladd = 0;
+ textpos2screenpos(wp, &pos, &row, &scol, &ccol, &ecol, false);
+
+ tv_dict_add_nr(dict, S_LEN("row"), row);
+ tv_dict_add_nr(dict, S_LEN("col"), scol);
+ tv_dict_add_nr(dict, S_LEN("curscol"), ccol);
+ tv_dict_add_nr(dict, S_LEN("endcol"), ecol);
+}
+
/*
* "screenrow()" function
*/