mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.0.0881: cannot get the currently showing mouse shape
Problem: Cannot get the currently showing mouse shape. Solution: Add getmouseshape().
This commit is contained in:
parent
161b6ac04f
commit
24dc19cdb2
@ -246,6 +246,7 @@ getloclist({nr}, {what}) Dict get specific location list properties
|
|||||||
getmarklist([{buf}]) List list of global/local marks
|
getmarklist([{buf}]) List list of global/local marks
|
||||||
getmatches([{win}]) List list of current matches
|
getmatches([{win}]) List list of current matches
|
||||||
getmousepos() Dict last known mouse position
|
getmousepos() Dict last known mouse position
|
||||||
|
getmouseshape() String current mouse shape name
|
||||||
getpid() Number process ID of Vim
|
getpid() Number process ID of Vim
|
||||||
getpos({expr}) List position of cursor, mark, etc.
|
getpos({expr}) List position of cursor, mark, etc.
|
||||||
getqflist() List list of quickfix items
|
getqflist() List list of quickfix items
|
||||||
@ -3879,6 +3880,12 @@ getmousepos() *getmousepos()*
|
|||||||
When using |getchar()| the Vim variables |v:mouse_lnum|,
|
When using |getchar()| the Vim variables |v:mouse_lnum|,
|
||||||
|v:mouse_col| and |v:mouse_winid| also provide these values.
|
|v:mouse_col| and |v:mouse_winid| also provide these values.
|
||||||
|
|
||||||
|
getmouseshape() *getmouseshape()*
|
||||||
|
Returns the name of the currently showing mouse pointer.
|
||||||
|
When the |+mouseshape| feature is not supported or the shape
|
||||||
|
is unknown an empty string is returned.
|
||||||
|
This function is mainly intended for testing.
|
||||||
|
|
||||||
*getpid()*
|
*getpid()*
|
||||||
getpid() Return a Number which is the process ID of the Vim process.
|
getpid() Return a Number which is the process ID of the Vim process.
|
||||||
On Unix and MS-Windows this is a unique number, until Vim
|
On Unix and MS-Windows this is a unique number, until Vim
|
||||||
|
@ -1110,6 +1110,7 @@ Interactive: *interactive-functions*
|
|||||||
getcharstr() get a character from the user as a string
|
getcharstr() get a character from the user as a string
|
||||||
getcharmod() get modifiers for the last typed character
|
getcharmod() get modifiers for the last typed character
|
||||||
getmousepos() get last known mouse position
|
getmousepos() get last known mouse position
|
||||||
|
getmouseshape() get name of the current mouse shape
|
||||||
echoraw() output characters as-is
|
echoraw() output characters as-is
|
||||||
feedkeys() put characters in the typeahead queue
|
feedkeys() put characters in the typeahead queue
|
||||||
input() get a line from the user
|
input() get a line from the user
|
||||||
|
@ -1983,6 +1983,8 @@ static funcentry_T global_functions[] =
|
|||||||
ret_list_dict_any, f_getmatches},
|
ret_list_dict_any, f_getmatches},
|
||||||
{"getmousepos", 0, 0, 0, NULL,
|
{"getmousepos", 0, 0, 0, NULL,
|
||||||
ret_dict_number, f_getmousepos},
|
ret_dict_number, f_getmousepos},
|
||||||
|
{"getmouseshape", 0, 0, 0, NULL,
|
||||||
|
ret_string, f_getmouseshape},
|
||||||
{"getpid", 0, 0, 0, NULL,
|
{"getpid", 0, 0, 0, NULL,
|
||||||
ret_number, f_getpid},
|
ret_number, f_getpid},
|
||||||
{"getpos", 1, 1, FEARG_1, arg1_string,
|
{"getpos", 1, 1, FEARG_1, arg1_string,
|
||||||
|
39
src/misc2.c
39
src/misc2.c
@ -2027,12 +2027,12 @@ cursorentry_T shape_table[SHAPE_IDX_COUNT] =
|
|||||||
{0, 0, 0, 100L, 100L, 100L, 0, 0, "sm", SHAPE_CURSOR},
|
{0, 0, 0, 100L, 100L, 100L, 0, 0, "sm", SHAPE_CURSOR},
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef FEAT_MOUSESHAPE
|
# ifdef FEAT_MOUSESHAPE
|
||||||
/*
|
/*
|
||||||
* Table with names for mouse shapes. Keep in sync with all the tables for
|
* Table with names for mouse shapes. Keep in sync with all the tables for
|
||||||
* mch_set_mouse_shape()!.
|
* mch_set_mouse_shape()!.
|
||||||
*/
|
*/
|
||||||
static char * mshape_names[] =
|
static char *mshape_names[] =
|
||||||
{
|
{
|
||||||
"arrow", // default, must be the first one
|
"arrow", // default, must be the first one
|
||||||
"blank", // hidden
|
"blank", // hidden
|
||||||
@ -2052,7 +2052,9 @@ static char * mshape_names[] =
|
|||||||
"up-arrow",
|
"up-arrow",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
# define MSHAPE_NAMES_COUNT (ARRAY_LENGTH(mshape_names) - 1)
|
||||||
|
# endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse the 'guicursor' option ("what" is SHAPE_CURSOR) or 'mouseshape'
|
* Parse the 'guicursor' option ("what" is SHAPE_CURSOR) or 'mouseshape'
|
||||||
@ -2355,7 +2357,7 @@ get_shape_idx(int mouse)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
# if defined(FEAT_MOUSESHAPE) || defined(PROTO)
|
# if defined(FEAT_MOUSESHAPE) || defined(PROTO)
|
||||||
static int old_mouse_shape = 0;
|
static int current_mouse_shape = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the mouse shape:
|
* Set the mouse shape:
|
||||||
@ -2389,18 +2391,18 @@ update_mouseshape(int shape_idx)
|
|||||||
shape_idx = -2;
|
shape_idx = -2;
|
||||||
|
|
||||||
if (shape_idx == -2
|
if (shape_idx == -2
|
||||||
&& old_mouse_shape != shape_table[SHAPE_IDX_CLINE].mshape
|
&& current_mouse_shape != shape_table[SHAPE_IDX_CLINE].mshape
|
||||||
&& old_mouse_shape != shape_table[SHAPE_IDX_STATUS].mshape
|
&& current_mouse_shape != shape_table[SHAPE_IDX_STATUS].mshape
|
||||||
&& old_mouse_shape != shape_table[SHAPE_IDX_VSEP].mshape)
|
&& current_mouse_shape != shape_table[SHAPE_IDX_VSEP].mshape)
|
||||||
return;
|
return;
|
||||||
if (shape_idx < 0)
|
if (shape_idx < 0)
|
||||||
new_mouse_shape = shape_table[get_shape_idx(TRUE)].mshape;
|
new_mouse_shape = shape_table[get_shape_idx(TRUE)].mshape;
|
||||||
else
|
else
|
||||||
new_mouse_shape = shape_table[shape_idx].mshape;
|
new_mouse_shape = shape_table[shape_idx].mshape;
|
||||||
if (new_mouse_shape != old_mouse_shape)
|
if (new_mouse_shape != current_mouse_shape)
|
||||||
{
|
{
|
||||||
mch_set_mouse_shape(new_mouse_shape);
|
mch_set_mouse_shape(new_mouse_shape);
|
||||||
old_mouse_shape = new_mouse_shape;
|
current_mouse_shape = new_mouse_shape;
|
||||||
}
|
}
|
||||||
postponed_mouseshape = FALSE;
|
postponed_mouseshape = FALSE;
|
||||||
}
|
}
|
||||||
@ -2408,6 +2410,25 @@ update_mouseshape(int shape_idx)
|
|||||||
|
|
||||||
#endif // CURSOR_SHAPE
|
#endif // CURSOR_SHAPE
|
||||||
|
|
||||||
|
#if defined(FEAT_EVAL) || defined(PROTO)
|
||||||
|
/*
|
||||||
|
* Mainly for tests: get the name of the current mouse shape.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
f_getmouseshape(typval_T *argvars UNUSED, typval_T *rettv)
|
||||||
|
{
|
||||||
|
rettv->v_type = VAR_STRING;
|
||||||
|
rettv->vval.v_string = NULL;
|
||||||
|
# if defined(FEAT_MOUSESHAPE) || defined(PROTO)
|
||||||
|
if (current_mouse_shape >= 0
|
||||||
|
&& current_mouse_shape < (int)MSHAPE_NAMES_COUNT)
|
||||||
|
rettv->vval.v_string = vim_strsave(
|
||||||
|
(char_u *)mshape_names[current_mouse_shape]);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change directory to "new_dir". Search 'cdpath' for relative directory
|
* Change directory to "new_dir". Search 'cdpath' for relative directory
|
||||||
|
@ -3,8 +3,8 @@ int virtual_active(void);
|
|||||||
int getviscol(void);
|
int getviscol(void);
|
||||||
int coladvance_force(colnr_T wcol);
|
int coladvance_force(colnr_T wcol);
|
||||||
int getviscol2(colnr_T col, colnr_T coladd);
|
int getviscol2(colnr_T col, colnr_T coladd);
|
||||||
int coladvance(colnr_T wcol);
|
int coladvance(colnr_T wantcol);
|
||||||
int getvpos(pos_T *pos, colnr_T wcol);
|
int getvpos(pos_T *pos, colnr_T wantcol);
|
||||||
int inc_cursor(void);
|
int inc_cursor(void);
|
||||||
int inc(pos_T *lp);
|
int inc(pos_T *lp);
|
||||||
int incl(pos_T *lp);
|
int incl(pos_T *lp);
|
||||||
@ -47,6 +47,7 @@ int vim_stat(const char *name, stat_T *stp);
|
|||||||
char *parse_shape_opt(int what);
|
char *parse_shape_opt(int what);
|
||||||
int get_shape_idx(int mouse);
|
int get_shape_idx(int mouse);
|
||||||
void update_mouseshape(int shape_idx);
|
void update_mouseshape(int shape_idx);
|
||||||
|
void f_getmouseshape(typval_T *argvars, typval_T *rettv);
|
||||||
int vim_chdir(char_u *new_dir);
|
int vim_chdir(char_u *new_dir);
|
||||||
int get_user_name(char_u *buf, int len);
|
int get_user_name(char_u *buf, int len);
|
||||||
void free_username(void);
|
void free_username(void);
|
||||||
|
@ -2890,6 +2890,12 @@ func Test_getmousepos()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_getmouseshape()
|
||||||
|
CheckFeature mouseshape
|
||||||
|
|
||||||
|
call assert_equal('arrow', getmouseshape())
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test for glob()
|
" Test for glob()
|
||||||
func Test_glob()
|
func Test_glob()
|
||||||
call assert_equal('', glob(test_null_string()))
|
call assert_equal('', glob(test_null_string()))
|
||||||
|
@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
881,
|
||||||
/**/
|
/**/
|
||||||
880,
|
880,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user