diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2016-01-13 00:39:54 -0500 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2016-01-13 02:40:57 -0500 |
commit | 8eeda7169aa47881f0b6d697e291a1ef85c43e4e (patch) | |
tree | cbce774bee0feea6769fba009b271af32f53e9c2 | |
parent | 3dfbeabf35dbfe5494a4adce7b4d94d56bbe0171 (diff) | |
download | rneovim-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.c | 12 | ||||
-rw-r--r-- | src/nvim/globals.h | 2 | ||||
-rw-r--r-- | src/nvim/terminal.c | 10 | ||||
-rw-r--r-- | test/functional/legacy/mapping_spec.lua | 15 |
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') |