Merge pull request #14937 from dstein64/vim-8.1.2304

vim-patch:8.1.2304,8.1.2309,8.1.2319,8.1.2321
This commit is contained in:
Jan Edmund Lazo
2021-09-29 20:59:53 -04:00
committed by GitHub
4 changed files with 210 additions and 1 deletions

View File

@@ -162,6 +162,7 @@ return {
getloclist={args={1, 2}},
getmarklist={args={0, 1}},
getmatches={args={0, 1}},
getmousepos={},
getpid={},
getpos={args=1},
getqflist={args={0, 1}},

View File

@@ -3750,6 +3750,59 @@ static void f_getmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr)
}
}
// "getmousepos()" function
void f_getmousepos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_T *d;
win_T *wp;
int row = mouse_row;
int col = mouse_col;
int grid = mouse_grid;
varnumber_T winid = 0;
varnumber_T winrow = 0;
varnumber_T wincol = 0;
linenr_T line = 0;
varnumber_T column = 0;
tv_dict_alloc_ret(rettv);
d = rettv->vval.v_dict;
tv_dict_add_nr(d, S_LEN("screenrow"), (varnumber_T)mouse_row + 1);
tv_dict_add_nr(d, S_LEN("screencol"), (varnumber_T)mouse_col + 1);
wp = mouse_find_win(&grid, &row, &col);
if (wp != NULL) {
int height = wp->w_height + wp->w_status_height;
// The height is adjusted by 1 when there is a bottom border. This is not
// necessary for a top border since `row` starts at -1 in that case.
if (row < height + wp->w_border_adj[2]) {
winid = wp->handle;
winrow = row + 1 + wp->w_border_adj[0]; // Adjust by 1 for top border
wincol = col + 1 + wp->w_border_adj[3]; // Adjust by 1 for left border
if (row >= 0 && row < wp->w_height && col >= 0 && col < wp->w_width) {
char_u *p;
int count;
mouse_comp_pos(wp, &row, &col, &line);
// limit to text length plus one
p = ml_get_buf(wp->w_buffer, line, false);
count = (int)STRLEN(p);
if (col > count) {
col = count;
}
column = col + 1;
}
}
}
tv_dict_add_nr(d, S_LEN("winid"), winid);
tv_dict_add_nr(d, S_LEN("winrow"), winrow);
tv_dict_add_nr(d, S_LEN("wincol"), wincol);
tv_dict_add_nr(d, S_LEN("line"), (varnumber_T)line);
tv_dict_add_nr(d, S_LEN("column"), column);
}
/*
* "getpid()" function
*/