mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -04:00
updated for version 7.4.569
Problem: Having CTRL-C interrupt or not does not check the mode of the mapping. (Ingo Karkat) Solution: Use a bitmask with the map mode. (Christian Brabandt)
This commit is contained in:
parent
8be6388b76
commit
651863c94a
@ -3708,8 +3708,13 @@ do_map(maptype, arg, mode, abbrev)
|
||||
if (!did_it)
|
||||
retval = 2; /* no match */
|
||||
else if (*keys == Ctrl_C)
|
||||
{
|
||||
/* If CTRL-C has been unmapped, reuse it for Interrupting. */
|
||||
mapped_ctrl_c = FALSE;
|
||||
if (map_table == curbuf->b_maphash)
|
||||
curbuf->b_mapped_ctrl_c &= ~mode;
|
||||
else
|
||||
mapped_ctrl_c &= ~mode;
|
||||
}
|
||||
goto theend;
|
||||
}
|
||||
|
||||
@ -3744,7 +3749,12 @@ do_map(maptype, arg, mode, abbrev)
|
||||
|
||||
/* If CTRL-C has been mapped, don't always use it for Interrupting. */
|
||||
if (*keys == Ctrl_C)
|
||||
mapped_ctrl_c = TRUE;
|
||||
{
|
||||
if (map_table == curbuf->b_maphash)
|
||||
curbuf->b_mapped_ctrl_c |= mode;
|
||||
else
|
||||
mapped_ctrl_c |= mode;
|
||||
}
|
||||
|
||||
mp->m_keys = vim_strsave(keys);
|
||||
mp->m_str = vim_strsave(rhs);
|
||||
|
@ -958,7 +958,7 @@ EXTERN char_u *exe_name; /* the name of the executable */
|
||||
#ifdef USE_ON_FLY_SCROLL
|
||||
EXTERN int dont_scroll INIT(= FALSE);/* don't use scrollbars when TRUE */
|
||||
#endif
|
||||
EXTERN int mapped_ctrl_c INIT(= FALSE); /* CTRL-C is mapped */
|
||||
EXTERN int mapped_ctrl_c INIT(= FALSE); /* modes where CTRL-C is mapped */
|
||||
EXTERN int ctrl_c_interrupts INIT(= TRUE); /* CTRL-C sets got_int */
|
||||
|
||||
EXTERN cmdmod_T cmdmod; /* Ex command modifiers */
|
||||
|
@ -1802,6 +1802,7 @@ struct file_buffer
|
||||
cryptstate_T *b_cryptstate; /* Encryption state while reading or writing
|
||||
* the file. NULL when not using encryption. */
|
||||
#endif
|
||||
int b_mapped_ctrl_c; /* modes where CTRL-C is mapped */
|
||||
|
||||
}; /* file_buffer */
|
||||
|
||||
|
@ -8,6 +8,15 @@ STARTTEST
|
||||
:inoreab чкпр vim
|
||||
GAчкпр
|
||||
|
||||
:" mapping of ctrl-c in insert mode
|
||||
:set cpo-=< cpo-=k
|
||||
:inoremap <c-c> <ctrl-c>
|
||||
:cnoremap <c-c> dummy
|
||||
:cunmap <c-c>
|
||||
GA
|
||||
TEST2: CTRL-C |A|
|
||||
|
||||
:nunmap <c-c>
|
||||
|
||||
: " langmap should not get remapped in insert mode
|
||||
:inoremap { FAIL_ilangmap
|
||||
|
@ -1,4 +1,6 @@
|
||||
test starts here:
|
||||
vim
|
||||
TEST2: CTRL-C |<ctrl-c>A|
|
||||
|
||||
+
|
||||
+
|
||||
|
2
src/ui.c
2
src/ui.c
@ -180,7 +180,7 @@ ui_inchar(buf, maxlen, wtime, tb_change_cnt)
|
||||
|
||||
/* ... there is no need for CTRL-C to interrupt something, don't let
|
||||
* it set got_int when it was mapped. */
|
||||
if (mapped_ctrl_c)
|
||||
if ((mapped_ctrl_c | curbuf->b_mapped_ctrl_c) & State)
|
||||
ctrl_c_interrupts = FALSE;
|
||||
}
|
||||
|
||||
|
@ -741,6 +741,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
569,
|
||||
/**/
|
||||
568,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user