diff options
author | Omar Sandoval <osandov@osandov.com> | 2015-05-17 01:39:22 -0700 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2015-07-26 23:45:41 -0400 |
commit | f79025b9dea8e46afa0f10884a1759744ada5940 (patch) | |
tree | a24026900b0cc1b5cef58892a89532816f97e002 /src | |
parent | fa48fc667a1d27db6826075e23caff4f396f191a (diff) | |
download | rneovim-f79025b9dea8e46afa0f10884a1759744ada5940.tar.gz rneovim-f79025b9dea8e46afa0f10884a1759744ada5940.tar.bz2 rneovim-f79025b9dea8e46afa0f10884a1759744ada5940.zip |
tui: Use underline cursor in Replace mode
This is a port of my original contribution to Vim, added in 7.4.687
(https://github.com/vim/vim/commit/v7-4-687). The TUI code has been
heavily refactored (see esp. 25ceadab37edba13f5afa78d8b4723da03ef35f0),
so this required some translation, but the logic is the same.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/msgpack_rpc/remote_ui.c | 2 | ||||
-rw-r--r-- | src/nvim/tui/tui.c | 11 | ||||
-rw-r--r-- | src/nvim/ui.c | 4 |
3 files changed, 15 insertions, 2 deletions
diff --git a/src/nvim/msgpack_rpc/remote_ui.c b/src/nvim/msgpack_rpc/remote_ui.c index 35a76ac901..e582bf9550 100644 --- a/src/nvim/msgpack_rpc/remote_ui.c +++ b/src/nvim/msgpack_rpc/remote_ui.c @@ -218,6 +218,8 @@ static void remote_ui_mode_change(UI *ui, int mode) Array args = ARRAY_DICT_INIT; if (mode == INSERT) { ADD(args, STRING_OBJ(cstr_to_string("insert"))); + } else if (mode == REPLACE) { + ADD(args, STRING_OBJ(cstr_to_string("replace"))); } else { assert(mode == NORMAL); ADD(args, STRING_OBJ(cstr_to_string("normal"))); diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 7baff1318e..2659125d2d 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -61,7 +61,7 @@ typedef struct { struct { int enable_mouse, disable_mouse; int enable_bracketed_paste, disable_bracketed_paste; - int enter_insert_mode, exit_insert_mode; + int enter_insert_mode, enter_replace_mode, exit_insert_mode; int set_rgb_foreground, set_rgb_background; } unibi_ext; } TUIData; @@ -105,6 +105,7 @@ UI *tui_start(void) data->unibi_ext.enable_bracketed_paste = -1; data->unibi_ext.disable_bracketed_paste = -1; data->unibi_ext.enter_insert_mode = -1; + data->unibi_ext.enter_replace_mode = -1; data->unibi_ext.exit_insert_mode = -1; // write output to stderr if stdout is not a tty @@ -413,6 +414,10 @@ static void tui_mode_change(UI *ui, int mode) if (data->showing_mode != INSERT) { unibi_out(ui, data->unibi_ext.enter_insert_mode); } + } else if (mode == REPLACE) { + if (data->showing_mode != REPLACE) { + unibi_out(ui, data->unibi_ext.enter_replace_mode); + } } else { assert(mode == NORMAL); if (data->showing_mode != NORMAL) { @@ -810,12 +815,16 @@ static void fix_terminfo(TUIData *data) // iterm data->unibi_ext.enter_insert_mode = (int)unibi_add_ext_str(ut, NULL, TMUX_WRAP("\x1b]50;CursorShape=1;BlinkingCursorEnabled=1\x07")); + data->unibi_ext.enter_replace_mode = (int)unibi_add_ext_str(ut, NULL, + TMUX_WRAP("\x1b]50;CursorShape=2;BlinkingCursorEnabled=1\x07")); data->unibi_ext.exit_insert_mode = (int)unibi_add_ext_str(ut, NULL, TMUX_WRAP("\x1b]50;CursorShape=0;BlinkingCursorEnabled=0\x07")); } else { // xterm-like sequences for blinking bar and solid block data->unibi_ext.enter_insert_mode = (int)unibi_add_ext_str(ut, NULL, TMUX_WRAP("\x1b[5 q")); + data->unibi_ext.enter_replace_mode = (int)unibi_add_ext_str(ut, NULL, + TMUX_WRAP("\x1b[3 q")); data->unibi_ext.exit_insert_mode = (int)unibi_add_ext_str(ut, NULL, TMUX_WRAP("\x1b[2 q")); } diff --git a/src/nvim/ui.c b/src/nvim/ui.c index 2e8fc7a6bb..7e155f9b4f 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -476,7 +476,9 @@ static void ui_mode_change(void) return; } /* Get a simple UI mode out of State. */ - if (State & INSERT) + if ((State & REPLACE) == REPLACE) + mode = REPLACE; + else if (State & INSERT) mode = INSERT; else mode = NORMAL; |