mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15:14 -07:00
vim-patch:7.4.569/573
vim-patch:7.4.569 vim-patch:7.4.573 Helped-by: @glts https://github.com/neovim/neovim/pull/2621 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)651863c94a
Problem: Mapping CTRL-C in Visual mode doesn't work. (Ingo Karkat) Solution: Call get_real_state() instead of using State directly.5000869712
This commit is contained in:
parent
420fe1fe73
commit
3dfbeabf35
@ -751,6 +751,8 @@ struct file_buffer {
|
||||
Terminal *terminal; // Terminal instance associated with the buffer
|
||||
|
||||
dict_T *additional_data; // Additional data from shada file if any.
|
||||
|
||||
int b_mapped_ctrl_c; // modes where CTRL-C is mapped
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -2941,7 +2941,10 @@ do_map (
|
||||
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;
|
||||
}
|
||||
@ -2966,9 +2969,13 @@ do_map (
|
||||
*/
|
||||
mp = xmalloc(sizeof(mapblock_T));
|
||||
|
||||
/* If CTRL-C has been mapped, don't always use it for Interrupting. */
|
||||
if (*keys == Ctrl_C)
|
||||
mapped_ctrl_c = TRUE;
|
||||
// If CTRL-C has been mapped, don't always use it for Interrupting.
|
||||
if (*keys == Ctrl_C) {
|
||||
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);
|
||||
|
@ -887,7 +887,7 @@ EXTERN int ctrl_x_mode INIT(= 0); /* Which Ctrl-X mode are we in? */
|
||||
|
||||
EXTERN int no_abbr INIT(= TRUE); /* TRUE when no abbreviations loaded */
|
||||
|
||||
EXTERN int mapped_ctrl_c INIT(= FALSE); /* CTRL-C is mapped */
|
||||
EXTERN int mapped_ctrl_c INIT(= 0); /* modes where CTRL-C is mapped */
|
||||
|
||||
EXTERN cmdmod_T cmdmod; /* Ex command modifiers */
|
||||
|
||||
|
@ -2352,7 +2352,7 @@ int get_keystroke(void)
|
||||
int save_mapped_ctrl_c = mapped_ctrl_c;
|
||||
int waited = 0;
|
||||
|
||||
mapped_ctrl_c = FALSE; /* mappings are not used here */
|
||||
mapped_ctrl_c = 0; // mappings are not used here
|
||||
for (;; ) {
|
||||
// flush output before waiting
|
||||
ui_flush();
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "nvim/getchar.h"
|
||||
#include "nvim/main.h"
|
||||
#include "nvim/misc1.h"
|
||||
#include "nvim/misc2.h"
|
||||
|
||||
#define READ_BUFFER_SIZE 0xfff
|
||||
#define INPUT_BUFFER_SIZE (READ_BUFFER_SIZE * 4)
|
||||
@ -357,7 +358,7 @@ static void read_cb(Stream *stream, RBuffer *buf, size_t c, void *data,
|
||||
|
||||
static void process_interrupts(void)
|
||||
{
|
||||
if (mapped_ctrl_c) {
|
||||
if ((mapped_ctrl_c | curbuf->b_mapped_ctrl_c) & get_real_state()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ typedef struct terminal_state {
|
||||
Terminal *term;
|
||||
int save_state; // saved value of State
|
||||
int save_rd; // saved value of RedrawingDisabled
|
||||
bool save_mapped_ctrl_c; // saved value of mapped_ctrl_c;
|
||||
int save_mapped_ctrl_c; // saved value of mapped_ctrl_c;
|
||||
bool close;
|
||||
bool got_bs; // if the last input was <C-\>
|
||||
} TerminalState;
|
||||
@ -367,7 +367,7 @@ void terminal_enter(void)
|
||||
State = TERM_FOCUS;
|
||||
RedrawingDisabled = false;
|
||||
s->save_mapped_ctrl_c = mapped_ctrl_c;
|
||||
mapped_ctrl_c = true;
|
||||
mapped_ctrl_c = MAP_ALL_MODES;
|
||||
// go to the bottom when the terminal is focused
|
||||
adjust_topline(s->term, buf, false);
|
||||
// erase the unfocused cursor
|
||||
|
@ -551,11 +551,11 @@ static int included_patches[] = {
|
||||
576,
|
||||
575,
|
||||
574,
|
||||
// 573,
|
||||
573,
|
||||
572,
|
||||
// 571 NA
|
||||
// 570 NA
|
||||
// 569,
|
||||
569,
|
||||
568,
|
||||
567,
|
||||
566,
|
||||
|
@ -2,12 +2,12 @@
|
||||
|
||||
local helpers = require('test.functional.helpers')
|
||||
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
|
||||
local execute, expect = helpers.execute, helpers.expect
|
||||
local execute, expect, wait = helpers.execute, helpers.expect, helpers.wait
|
||||
|
||||
describe('mapping', function()
|
||||
before_each(clear)
|
||||
|
||||
it('is working', function()
|
||||
it('abbreviations with р (0x80)', function()
|
||||
insert([[
|
||||
test starts here:
|
||||
]])
|
||||
@ -16,6 +16,49 @@ describe('mapping', function()
|
||||
execute('inoreab чкпр vim')
|
||||
feed('GAчкпр <esc>')
|
||||
|
||||
expect([[
|
||||
test starts here:
|
||||
vim ]])
|
||||
end)
|
||||
|
||||
it('works with Ctrl-c in Insert mode', function()
|
||||
-- Mapping of ctrl-c in insert mode
|
||||
execute('set cpo-=< cpo-=k')
|
||||
execute('inoremap <c-c> <ctrl-c>')
|
||||
execute('cnoremap <c-c> dummy')
|
||||
execute('cunmap <c-c>')
|
||||
feed('GA<cr>')
|
||||
feed('TEST2: CTRL-C |')
|
||||
wait()
|
||||
feed('<c-c>A|<cr><esc>')
|
||||
wait()
|
||||
execute('unmap <c-c>')
|
||||
execute('unmap! <c-c>')
|
||||
|
||||
expect([[
|
||||
|
||||
TEST2: CTRL-C |<ctrl-c>A|
|
||||
]])
|
||||
end)
|
||||
|
||||
it('works with Ctrl-c in Visual mode', function()
|
||||
-- Mapping of ctrl-c in Visual mode.
|
||||
execute([[vnoremap <c-c> :<C-u>$put ='vmap works']])
|
||||
feed('GV')
|
||||
-- For some reason the mapping is only triggered when <C-c> is entered in a
|
||||
-- separate feed command.
|
||||
wait()
|
||||
feed('<c-c>')
|
||||
wait()
|
||||
feed('<cr>')
|
||||
execute('vunmap <c-c>')
|
||||
|
||||
expect([[
|
||||
|
||||
vmap works]])
|
||||
end)
|
||||
|
||||
it('works with Ctrl-c in Insert mode with langmap', function()
|
||||
-- langmap should not get remapped in insert mode.
|
||||
execute('inoremap { FAIL_ilangmap')
|
||||
execute('set langmap=+{ langnoremap')
|
||||
@ -37,8 +80,7 @@ describe('mapping', function()
|
||||
|
||||
-- Assert buffer contents.
|
||||
expect([[
|
||||
test starts here:
|
||||
vim
|
||||
|
||||
+
|
||||
+
|
||||
+
|
||||
|
Loading…
Reference in New Issue
Block a user