diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-07-08 15:16:17 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2019-09-04 23:57:02 +0200 |
commit | d5162afa2aee6609bf5d4f818639235b70c57a9a (patch) | |
tree | 7d0992010b1b1548e3189f46c1aa8b4c5c67cbb6 /src/nvim/eval.c | |
parent | d7aea13fee879a5e7854f2ebe9b7321cd8daf84f (diff) | |
download | rneovim-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.c | 26 |
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 */ |