mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.2728: special key names don't work if 'isident' is cleared
Problem: Special key names don't work if 'isident' is cleared. Solution: Add vim_isNormalIDc() and use it for special key names. (closes #2389)
This commit is contained in:
@@ -834,6 +834,16 @@ vim_isIDc(int c)
|
|||||||
return (c > 0 && c < 0x100 && (g_chartab[c] & CT_ID_CHAR));
|
return (c > 0 && c < 0x100 && (g_chartab[c] & CT_ID_CHAR));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Like vim_isIDc() but not using the 'isident' option: letters, numbers and
|
||||||
|
* underscore.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vim_isNormalIDc(int c)
|
||||||
|
{
|
||||||
|
return ASCII_ISALNUM(c) || c == '_';
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* return TRUE if 'c' is a keyword character: Letters and characters from
|
* return TRUE if 'c' is a keyword character: Letters and characters from
|
||||||
* 'iskeyword' option for the current buffer.
|
* 'iskeyword' option for the current buffer.
|
||||||
|
@@ -2826,7 +2826,7 @@ find_special_key(
|
|||||||
|
|
||||||
// Find end of modifier list
|
// Find end of modifier list
|
||||||
last_dash = src;
|
last_dash = src;
|
||||||
for (bp = src + 1; *bp == '-' || vim_isIDc(*bp); bp++)
|
for (bp = src + 1; *bp == '-' || vim_isNormalIDc(*bp); bp++)
|
||||||
{
|
{
|
||||||
if (*bp == '-')
|
if (*bp == '-')
|
||||||
{
|
{
|
||||||
@@ -3121,10 +3121,10 @@ get_special_key_code(char_u *name)
|
|||||||
for (i = 0; key_names_table[i].name != NULL; i++)
|
for (i = 0; key_names_table[i].name != NULL; i++)
|
||||||
{
|
{
|
||||||
table_name = key_names_table[i].name;
|
table_name = key_names_table[i].name;
|
||||||
for (j = 0; vim_isIDc(name[j]) && table_name[j] != NUL; j++)
|
for (j = 0; vim_isNormalIDc(name[j]) && table_name[j] != NUL; j++)
|
||||||
if (TOLOWER_ASC(table_name[j]) != TOLOWER_ASC(name[j]))
|
if (TOLOWER_ASC(table_name[j]) != TOLOWER_ASC(name[j]))
|
||||||
break;
|
break;
|
||||||
if (!vim_isIDc(name[j]) && table_name[j] == NUL)
|
if (!vim_isNormalIDc(name[j]) && table_name[j] == NUL)
|
||||||
return key_names_table[i].key;
|
return key_names_table[i].key;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -19,6 +19,7 @@ int linetabsize(char_u *s);
|
|||||||
int linetabsize_col(int startcol, char_u *s);
|
int linetabsize_col(int startcol, char_u *s);
|
||||||
int win_linetabsize(win_T *wp, char_u *line, colnr_T len);
|
int win_linetabsize(win_T *wp, char_u *line, colnr_T len);
|
||||||
int vim_isIDc(int c);
|
int vim_isIDc(int c);
|
||||||
|
int vim_isNormalIDc(int c);
|
||||||
int vim_iswordc(int c);
|
int vim_iswordc(int c);
|
||||||
int vim_iswordc_buf(int c, buf_T *buf);
|
int vim_iswordc_buf(int c, buf_T *buf);
|
||||||
int vim_iswordp(char_u *p);
|
int vim_iswordp(char_u *p);
|
||||||
|
@@ -445,9 +445,12 @@ func Test_list_mappings()
|
|||||||
" Remove default mappings
|
" Remove default mappings
|
||||||
imapclear
|
imapclear
|
||||||
|
|
||||||
inoremap <C-M> CtrlM
|
" reset 'isident' to check it isn't used
|
||||||
|
set isident=
|
||||||
|
inoremap <C-m> CtrlM
|
||||||
inoremap <A-S> AltS
|
inoremap <A-S> AltS
|
||||||
inoremap <S-/> ShiftSlash
|
inoremap <S-/> ShiftSlash
|
||||||
|
set isident&
|
||||||
call assert_equal([
|
call assert_equal([
|
||||||
\ 'i <S-/> * ShiftSlash',
|
\ 'i <S-/> * ShiftSlash',
|
||||||
\ 'i <M-S> * AltS',
|
\ 'i <M-S> * AltS',
|
||||||
|
@@ -750,6 +750,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 */
|
||||||
|
/**/
|
||||||
|
2728,
|
||||||
/**/
|
/**/
|
||||||
2727,
|
2727,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user