diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/cursor_shape.c | 6 | ||||
-rw-r--r-- | src/nvim/options.lua | 2 | ||||
-rw-r--r-- | src/nvim/tui/tui.c | 29 |
3 files changed, 19 insertions, 18 deletions
diff --git a/src/nvim/cursor_shape.c b/src/nvim/cursor_shape.c index dcc680f806..e302d5aa4c 100644 --- a/src/nvim/cursor_shape.c +++ b/src/nvim/cursor_shape.c @@ -142,9 +142,9 @@ char_u *parse_shape_opt(int what) { // Set the defaults, for the missing parts shape_table[idx].shape = SHAPE_BLOCK; - shape_table[idx].blinkwait = 700L; - shape_table[idx].blinkon = 400L; - shape_table[idx].blinkoff = 250L; + shape_table[idx].blinkwait = 0L; + shape_table[idx].blinkon = 0L; + shape_table[idx].blinkoff = 0L; } } diff --git a/src/nvim/options.lua b/src/nvim/options.lua index 4e7be63b63..ba7bf5bafb 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -1000,7 +1000,7 @@ return { deny_duplicates=true, vi_def=true, varname='p_guicursor', - defaults={if_true={vi="n-v-c:block-Cursor/lCursor,ve:ver35-Cursor,o:hor50-Cursor,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor,sm:block-Cursor-blinkwait175-blinkoff150-blinkon175"}} + defaults={if_true={vi="n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20"}} }, { full_name='guifont', abbreviation='gfn', diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 5653924154..522f7d59f2 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -44,6 +44,7 @@ #define TOO_MANY_EVENTS 1000000 #define STARTS_WITH(str, prefix) (!memcmp(str, prefix, sizeof(prefix) - 1)) +#define TMUX_WRAP(seq) (is_tmux ? "\x1bPtmux;\x1b" seq "\x1b\\" : seq) typedef enum TermType { kTermUnknown, @@ -95,6 +96,7 @@ typedef struct { static bool volatile got_winch = false; static bool cursor_style_enabled = false; +static bool is_tmux = false; #ifdef INCLUDE_GENERATED_DECLARATIONS # include "tui/tui.c.generated.h" @@ -545,13 +547,20 @@ static void tui_set_mode(UI *ui, ModeShape mode) TUIData *data = ui->data; cursorentry_T c = data->cursor_shapes[mode]; int shape = c.shape; - bool is_tmux = os_getenv("TMUX") != NULL; unibi_var_t vars[26 + 26] = { { 0 } }; -# define TMUX_WRAP(seq) (is_tmux ? "\x1bPtmux;\x1b" seq "\x1b\\" : seq) // Support changing cursor shape on some popular terminals. const char *vte_version = os_getenv("VTE_VERSION"); + if (c.id != 0 && ui->rgb) { + int attr = syn_id2attr(c.id); + if (attr > 0) { + attrentry_T *aep = syn_cterm_attr2entry(attr); + data->params[0].i = aep->rgb_bg_color; + unibi_out(ui, data->unibi_ext.set_cursor_color); + } + } + if (data->term == kTermKonsole) { // Konsole uses a proprietary escape code to set the cursor shape // and does not support DECSCUSR. @@ -575,23 +584,14 @@ static void tui_set_mode(UI *ui, ModeShape mode) switch (shape) { case SHAPE_BLOCK: shape = 1; break; - case SHAPE_VER: shape = 5; break; case SHAPE_HOR: shape = 3; break; + case SHAPE_VER: shape = 5; break; default: WLOG("Unknown shape value %d", shape); break; } - data->params[0].i = shape + (c.blinkon ==0); + data->params[0].i = shape + (int)(c.blinkon == 0); unibi_format(vars, vars + 26, "\x1b[%p1%d q", data->params, out, ui, NULL, NULL); } - - if (c.id != 0 && ui->rgb) { - int attr = syn_id2attr(c.id); - if (attr > 0) { - attrentry_T *aep = syn_cterm_attr2entry(attr); - data->params[0].i = aep->rgb_bg_color; - unibi_out(ui, data->unibi_ext.set_cursor_color); - } - } } /// @param mode editor mode @@ -952,6 +952,7 @@ static TermType detect_term(const char *term, const char *colorterm) static void fix_terminfo(TUIData *data) { unibi_term *ut = data->ut; + is_tmux = os_getenv("TMUX") != NULL; const char *term = os_getenv("TERM"); const char *colorterm = os_getenv("COLORTERM"); @@ -1019,7 +1020,7 @@ end: // Fill some empty slots with common terminal strings if (data->term == kTermiTerm) { data->unibi_ext.set_cursor_color = (int)unibi_add_ext_str( - ut, NULL, "\033]Pl%p1%06x\033\\"); + ut, NULL, TMUX_WRAP("\033]Pl%p1%06x\033\\")); } else { data->unibi_ext.set_cursor_color = (int)unibi_add_ext_str( ut, NULL, "\033]12;#%p1%06x\007"); |