mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 16:58:17 +00:00
'guicursor': Disable by default for unknown terminals.
User can still set guicursor explicitly in init.vim. Closes #5990 Closes #6403
This commit is contained in:
@@ -2796,7 +2796,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
-blinkwait175-blinkoff150-blinkon175")
|
||||
global
|
||||
Configures the cursor style for each mode. Works in the GUI and some
|
||||
terminals. Empty means "non-blinking block cursor in all modes": >
|
||||
terminals. Unset to disable: >
|
||||
:set guicursor=
|
||||
<
|
||||
With tmux you might need this in ~/.tmux.conf (see terminal-overrides
|
||||
|
@@ -283,7 +283,7 @@ int main(int argc, char **argv)
|
||||
cmdline_row = (int)(Rows - p_ch);
|
||||
msg_row = cmdline_row;
|
||||
screenalloc(false); /* allocate screen buffers */
|
||||
set_init_2();
|
||||
set_init_2(params.headless);
|
||||
TIME_MSG("inits 2");
|
||||
|
||||
msg_scroll = TRUE;
|
||||
|
@@ -939,11 +939,8 @@ void free_all_options(void)
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Initialize the options, part two: After getting Rows and Columns and
|
||||
* setting 'term'.
|
||||
*/
|
||||
void set_init_2(void)
|
||||
/// Initialize the options, part two: After getting Rows and Columns.
|
||||
void set_init_2(bool headless)
|
||||
{
|
||||
int idx;
|
||||
|
||||
@@ -966,8 +963,12 @@ void set_init_2(void)
|
||||
p_window = Rows - 1;
|
||||
}
|
||||
set_number_default("window", Rows - 1);
|
||||
parse_shape_opt(SHAPE_CURSOR); /* set cursor shapes from 'guicursor' */
|
||||
(void)parse_printoptions(); /* parse 'printoptions' default value */
|
||||
if (!headless && !os_term_is_nice()) {
|
||||
set_string_option_direct((char_u *)"guicursor", -1, (char_u *)"",
|
||||
OPT_GLOBAL, SID_NONE);
|
||||
}
|
||||
parse_shape_opt(SHAPE_CURSOR); // set cursor shapes from 'guicursor'
|
||||
(void)parse_printoptions(); // parse 'printoptions' default value
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -2842,9 +2843,10 @@ did_set_string_option (
|
||||
}
|
||||
}
|
||||
|
||||
/* 'guicursor' */
|
||||
else if (varp == &p_guicursor)
|
||||
// 'guicursor'
|
||||
else if (varp == &p_guicursor) {
|
||||
errmsg = parse_shape_opt(SHAPE_CURSOR);
|
||||
}
|
||||
|
||||
else if (varp == &p_popt)
|
||||
errmsg = parse_printoptions();
|
||||
|
@@ -889,3 +889,17 @@ bool os_setenv_append_path(const char *fname)
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Returns true if the terminal can be assumed to silently ignore unknown
|
||||
/// control codes.
|
||||
bool os_term_is_nice(void)
|
||||
{
|
||||
#if defined(__APPLE__) || defined(WIN32)
|
||||
return true;
|
||||
#else
|
||||
const char *vte_version = os_getenv("VTE_VERSION");
|
||||
return (vte_version && atoi(vte_version) >= 3900)
|
||||
|| NULL != os_getenv("KONSOLE_PROFILE_NAME")
|
||||
|| NULL != os_getenv("KONSOLE_DBUS_SESSION");
|
||||
#endif
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen')
|
||||
local clear, meths = helpers.clear, helpers.meths
|
||||
local eq = helpers.eq
|
||||
local command = helpers.command
|
||||
local wait = helpers.wait
|
||||
|
||||
describe('ui/cursor', function()
|
||||
local screen
|
||||
@@ -18,7 +19,7 @@ describe('ui/cursor', function()
|
||||
end)
|
||||
|
||||
it("'guicursor' is published as a UI event", function()
|
||||
command('redraw')
|
||||
wait()
|
||||
screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
|
||||
local expected_cursor_style = {
|
||||
cmdline_hover = {
|
||||
@@ -149,13 +150,13 @@ describe('ui/cursor', function()
|
||||
|
||||
-- Event is published ONLY if the cursor style changed.
|
||||
screen._cursor_style = nil
|
||||
command('redraw')
|
||||
wait()
|
||||
screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
|
||||
eq(nil, screen._cursor_style)
|
||||
|
||||
-- Change the cursor style.
|
||||
meths.set_option('guicursor', 'n-v-c:ver35-blinkwait171-blinkoff172-blinkon173,ve:hor35,o:ver50,i-ci:block,r-cr:hor90,sm:ver42')
|
||||
command('redraw')
|
||||
wait()
|
||||
screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
|
||||
eq('vertical', screen._cursor_style.normal.cursor_shape)
|
||||
eq('horizontal', screen._cursor_style.visual_select.cursor_shape)
|
||||
@@ -171,6 +172,8 @@ describe('ui/cursor', function()
|
||||
meths.set_option('guicursor', '')
|
||||
command('redraw')
|
||||
screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
|
||||
-- Empty 'guicursor' sets enabled=false.
|
||||
eq(false, screen._cursor_style_enabled)
|
||||
for _, m in ipairs({ 'cmdline_insert', 'cmdline_normal', 'cmdline_replace', 'insert',
|
||||
'showmatch', 'normal', 'replace', 'visual',
|
||||
'visual_select', }) do
|
||||
|
Reference in New Issue
Block a user