aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2016-01-13 00:39:54 -0500
committerJustin M. Keyes <justinkz@gmail.com>2016-01-13 02:40:57 -0500
commit8eeda7169aa47881f0b6d697e291a1ef85c43e4e (patch)
treecbce774bee0feea6769fba009b271af32f53e9c2
parent3dfbeabf35dbfe5494a4adce7b4d94d56bbe0171 (diff)
downloadrneovim-8eeda7169aa47881f0b6d697e291a1ef85c43e4e.tar.gz
rneovim-8eeda7169aa47881f0b6d697e291a1ef85c43e4e.tar.bz2
rneovim-8eeda7169aa47881f0b6d697e291a1ef85c43e4e.zip
terminal: less babysitting of mapped_ctrl_c
process_interrupts() checks get_real_state() so we can avoid some housekeeping of mapped_ctrl_c in terminal-mode.
-rw-r--r--src/nvim/getchar.c12
-rw-r--r--src/nvim/globals.h2
-rw-r--r--src/nvim/terminal.c10
-rw-r--r--test/functional/legacy/mapping_spec.lua15
4 files changed, 17 insertions, 22 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 008c6cecd5..89d22ad811 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -2940,11 +2940,12 @@ do_map (
if (!did_it) {
retval = 2; /* no match */
} else if (*keys == Ctrl_C) {
- /* If CTRL-C has been unmapped, reuse it for Interrupting. */
- if (map_table == curbuf->b_maphash)
+ // If CTRL-C has been unmapped, reuse it for Interrupting.
+ if (map_table == curbuf->b_maphash) {
curbuf->b_mapped_ctrl_c &= ~mode;
- else
+ } else {
mapped_ctrl_c &= ~mode;
+ }
}
goto theend;
}
@@ -2971,10 +2972,11 @@ do_map (
// If CTRL-C has been mapped, don't always use it for Interrupting.
if (*keys == Ctrl_C) {
- if (map_table == curbuf->b_maphash)
+ if (map_table == curbuf->b_maphash) {
curbuf->b_mapped_ctrl_c |= mode;
- else
+ } else {
mapped_ctrl_c |= mode;
+ }
}
mp->m_keys = vim_strsave(keys);
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index da8868d7a0..50eda6cb17 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -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(= 0); /* modes where CTRL-C is mapped */
+EXTERN int mapped_ctrl_c INIT(= 0); // Modes where CTRL-C is mapped.
EXTERN cmdmod_T cmdmod; /* Ex command modifiers */
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index b129a93a05..0a7807d811 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -77,9 +77,7 @@
typedef struct terminal_state {
VimState state;
Terminal *term;
- int save_state; // saved value of State
int save_rd; // saved value of RedrawingDisabled
- int save_mapped_ctrl_c; // saved value of mapped_ctrl_c;
bool close;
bool got_bs; // if the last input was <C-\>
} TerminalState;
@@ -362,12 +360,11 @@ void terminal_enter(void)
checkpcmark();
setpcmark();
- s->save_state = State;
+ int save_state = State;
s->save_rd = RedrawingDisabled;
State = TERM_FOCUS;
+ mapped_ctrl_c |= TERM_FOCUS; // Always map CTRL-C to avoid interrupt.
RedrawingDisabled = false;
- s->save_mapped_ctrl_c = mapped_ctrl_c;
- 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
@@ -380,11 +377,10 @@ void terminal_enter(void)
state_enter(&s->state);
restart_edit = 0;
- State = s->save_state;
+ State = save_state;
RedrawingDisabled = s->save_rd;
// draw the unfocused cursor
invalidate_terminal(s->term, s->term->cursor.row, s->term->cursor.row + 1);
- mapped_ctrl_c = s->save_mapped_ctrl_c;
unshowmode(true);
redraw(curbuf->handle != s->term->buf_handle);
ui_busy_stop();
diff --git a/test/functional/legacy/mapping_spec.lua b/test/functional/legacy/mapping_spec.lua
index f0cef3773d..3f86ec60de 100644
--- a/test/functional/legacy/mapping_spec.lua
+++ b/test/functional/legacy/mapping_spec.lua
@@ -21,7 +21,7 @@ describe('mapping', function()
vim ]])
end)
- it('works with Ctrl-c in Insert mode', function()
+ it('Ctrl-c works in Insert mode', function()
-- Mapping of ctrl-c in insert mode
execute('set cpo-=< cpo-=k')
execute('inoremap <c-c> <ctrl-c>')
@@ -41,16 +41,13 @@ describe('mapping', function()
]])
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']])
+ it('Ctrl-c works in Visual mode', function()
+ execute([[vnoremap <c-c> :<C-u>$put ='vmap works'<cr>]])
feed('GV')
- -- For some reason the mapping is only triggered when <C-c> is entered in a
- -- separate feed command.
+ -- XXX: For some reason the mapping is only triggered
+ -- when <C-c> is in a separate feed command.
wait()
feed('<c-c>')
- wait()
- feed('<cr>')
execute('vunmap <c-c>')
expect([[
@@ -58,7 +55,7 @@ describe('mapping', function()
vmap works]])
end)
- it('works with Ctrl-c in Insert mode with langmap', function()
+ it('langmap', function()
-- langmap should not get remapped in insert mode.
execute('inoremap { FAIL_ilangmap')
execute('set langmap=+{ langnoremap')