mirror of
https://github.com/neovim/neovim.git
synced 2025-09-16 00:08:19 +00:00
vim-patch:8.1.2062: the mouse code is spread out (#24817)
Problem: The mouse code is spread out. Solution: Move all the mouse code to mouse.c. (Yegappan Lakshmanan, closes vim/vim#4959)b20b9e14dd
Also move getmousepos() there. N/A patches for version.c: vim-patch:8.1.2070: mouse code is spread out Problem: Mouse code is spread out. Solution: Move mouse terminal code parsing to mouse.c. (Yegappan Lakshmanan, closes vim/vim#4966)b8ff5c271e
Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
@@ -2750,47 +2750,6 @@ static void f_getmarklist(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
get_buf_local_marks(buf, rettv->vval.v_list);
|
||||
}
|
||||
|
||||
/// "getmousepos()" function
|
||||
static void f_getmousepos(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
{
|
||||
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 lnum = 0;
|
||||
varnumber_T column = 0;
|
||||
|
||||
tv_dict_alloc_ret(rettv);
|
||||
dict_T *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);
|
||||
|
||||
win_T *wp = mouse_find_win(&grid, &row, &col);
|
||||
if (wp != NULL) {
|
||||
int height = wp->w_height + wp->w_hsep_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_winrow_off; // Adjust by 1 for top border
|
||||
wincol = col + 1 + wp->w_wincol_off; // Adjust by 1 for left border
|
||||
if (row >= 0 && row < wp->w_height && col >= 0 && col < wp->w_width) {
|
||||
(void)mouse_comp_pos(wp, &row, &col, &lnum);
|
||||
col = vcol2col(wp, lnum, col);
|
||||
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)lnum);
|
||||
tv_dict_add_nr(d, S_LEN("column"), column);
|
||||
}
|
||||
|
||||
/// "getpid()" function
|
||||
static void f_getpid(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
|
||||
{
|
||||
|
Reference in New Issue
Block a user