api/cursor_style_set: mode descriptions

This commit is contained in:
Justin M. Keyes
2017-04-01 22:32:16 +02:00
parent c2826a7830
commit 3a69dbfca6
5 changed files with 55 additions and 63 deletions

View File

@@ -13,35 +13,25 @@
/// Handling of cursor and mouse pointer shapes in various modes. /// Handling of cursor and mouse pointer shapes in various modes.
static cursorentry_T shape_table[SHAPE_IDX_COUNT] = static cursorentry_T shape_table[SHAPE_IDX_COUNT] =
{ {
// The values will be filled in from the 'guicursor' and 'mouseshape' // Values are set by 'guicursor' and 'mouseshape'.
// defaults when Vim starts. // Adjust the SHAPE_IDX_ defines when changing this!
// Adjust the SHAPE_IDX_ defines when making changes! { "normal", 0, 0, 0, 700L, 400L, 250L, 0, 0, "n", SHAPE_CURSOR+SHAPE_MOUSE },
{ "normal", { "visual", 0, 0, 0, 700L, 400L, 250L, 0, 0, "v", SHAPE_CURSOR+SHAPE_MOUSE },
0, 0, 0, 700L, 400L, 250L, 0, 0, "n", SHAPE_CURSOR+SHAPE_MOUSE }, { "insert", 0, 0, 0, 700L, 400L, 250L, 0, 0, "i", SHAPE_CURSOR+SHAPE_MOUSE },
{ "visual", { "replace", 0, 0, 0, 700L, 400L, 250L, 0, 0, "r", SHAPE_CURSOR+SHAPE_MOUSE },
0, 0, 0, 700L, 400L, 250L, 0, 0, "v", SHAPE_CURSOR+SHAPE_MOUSE }, { "cmdline_normal", 0, 0, 0, 700L, 400L, 250L, 0, 0, "c", SHAPE_CURSOR+SHAPE_MOUSE },
{ "insert", { "cmdline_insert", 0, 0, 0, 700L, 400L, 250L, 0, 0, "ci", SHAPE_CURSOR+SHAPE_MOUSE },
0, 0, 0, 700L, 400L, 250L, 0, 0, "i", SHAPE_CURSOR+SHAPE_MOUSE }, { "cmdline_replace", 0, 0, 0, 700L, 400L, 250L, 0, 0, "cr", SHAPE_CURSOR+SHAPE_MOUSE },
{ "replace", { "operator", 0, 0, 0, 700L, 400L, 250L, 0, 0, "o", SHAPE_CURSOR+SHAPE_MOUSE },
0, 0, 0, 700L, 400L, 250L, 0, 0, "r", SHAPE_CURSOR+SHAPE_MOUSE }, { "visual_select", 0, 0, 0, 700L, 400L, 250L, 0, 0, "ve", SHAPE_CURSOR+SHAPE_MOUSE },
{ "cmd_normal", { "cmdline_hover", 0, 0, 0, 0L, 0L, 0L, 0, 0, "e", SHAPE_MOUSE },
0, 0, 0, 700L, 400L, 250L, 0, 0, "c", SHAPE_CURSOR+SHAPE_MOUSE }, { "statusline_hover", 0, 0, 0, 0L, 0L, 0L, 0, 0, "s", SHAPE_MOUSE },
{ "cmd_insert", 0, { "statusline_drag", 0, 0, 0, 0L, 0L, 0L, 0, 0, "sd", SHAPE_MOUSE },
0, 0, 700L, 400L, 250L, 0, 0, "ci", SHAPE_CURSOR+SHAPE_MOUSE }, { "vsep_hover", 0, 0, 0, 0L, 0L, 0L, 0, 0, "vs", SHAPE_MOUSE },
{ "cmd_replace", { "vsep_drag", 0, 0, 0, 0L, 0L, 0L, 0, 0, "vd", SHAPE_MOUSE },
0, 0, 0, 700L, 400L, 250L, 0, 0, "cr", SHAPE_CURSOR+SHAPE_MOUSE },
{ "pending",
0, 0, 0, 700L, 400L, 250L, 0, 0, "o", SHAPE_CURSOR+SHAPE_MOUSE },
{ "visual_select",
0, 0, 0, 700L, 400L, 250L, 0, 0, "ve", SHAPE_CURSOR+SHAPE_MOUSE },
{ "cmd_line", 0, 0, 0, 0L, 0L, 0L, 0, 0, "e", SHAPE_MOUSE },
{ "statusline", 0, 0, 0, 0L, 0L, 0L, 0, 0, "s", SHAPE_MOUSE },
{ "drag_statusline", 0, 0, 0, 0L, 0L, 0L, 0, 0, "sd", SHAPE_MOUSE },
{ "vsep", 0, 0, 0, 0L, 0L, 0L, 0, 0, "vs", SHAPE_MOUSE },
{ "vdrag", 0, 0, 0, 0L, 0L, 0L, 0, 0, "vd", SHAPE_MOUSE },
{ "more", 0, 0, 0, 0L, 0L, 0L, 0, 0, "m", SHAPE_MOUSE }, { "more", 0, 0, 0, 0L, 0L, 0L, 0, 0, "m", SHAPE_MOUSE },
{ "more_lastline", 0, 0, 0, 0L, 0L, 0L, 0, 0, "ml", SHAPE_MOUSE }, { "more_lastline", 0, 0, 0, 0L, 0L, 0L, 0, 0, "ml", SHAPE_MOUSE },
{ "match_paren", 0, 0, 0, 100L, 100L, 100L, 0, 0, "sm", SHAPE_CURSOR }, { "showmatch", 0, 0, 0, 100L, 100L, 100L, 0, 0, "sm", SHAPE_CURSOR },
}; };
/// Converts cursor_shapes into a Dictionary of dictionaries /// Converts cursor_shapes into a Dictionary of dictionaries

View File

@@ -14,9 +14,9 @@ SHAPE_IDX_CR = 6, ///< Command line Replace mode
SHAPE_IDX_O = 7, ///< Operator-pending mode SHAPE_IDX_O = 7, ///< Operator-pending mode
SHAPE_IDX_VE = 8, ///< Visual mode with 'selection' exclusive SHAPE_IDX_VE = 8, ///< Visual mode with 'selection' exclusive
SHAPE_IDX_CLINE = 9, ///< On command line SHAPE_IDX_CLINE = 9, ///< On command line
SHAPE_IDX_STATUS = 10, ///< status line SHAPE_IDX_STATUS = 10, ///< On status line
SHAPE_IDX_SDRAG = 11, ///< dragging a status line SHAPE_IDX_SDRAG = 11, ///< dragging a status line
SHAPE_IDX_VSEP = 12, ///< A vertical separator line SHAPE_IDX_VSEP = 12, ///< On vertical separator line
SHAPE_IDX_VDRAG = 13, ///< dragging a vertical separator line SHAPE_IDX_VDRAG = 13, ///< dragging a vertical separator line
SHAPE_IDX_MORE = 14, ///< Hit-return or More SHAPE_IDX_MORE = 14, ///< Hit-return or More
SHAPE_IDX_MOREL = 15, ///< Hit-return or More in last line SHAPE_IDX_MOREL = 15, ///< Hit-return or More in last line

View File

@@ -487,7 +487,7 @@ static void tui_cursor_style_set(UI *ui, Dictionary args)
data->cursor_shapes[mode_id] = r; data->cursor_shapes[mode_id] = r;
} }
// force redrawal // force redraw
MouseMode cursor_mode = tui_mode2cursor(data->showing_mode); MouseMode cursor_mode = tui_mode2cursor(data->showing_mode);
tui_set_cursor(ui, cursor_mode); tui_set_cursor(ui, cursor_mode);
} }
@@ -550,7 +550,7 @@ static void tui_set_cursor(UI *ui, MouseMode mode)
default: WLOG("Unknown shape value %d", shape); break; default: WLOG("Unknown shape value %d", shape); break;
} }
data->params[0].i = shape; data->params[0].i = shape;
data->params[1].i = (c.blinkon ==0); data->params[1].i = (c.blinkon == 0);
unibi_format(vars, vars + 26, unibi_format(vars, vars + 26,
TMUX_WRAP("\x1b]50;CursorShape=%p1%d;BlinkingCursorEnabled=%p2%d\x07"), TMUX_WRAP("\x1b]50;CursorShape=%p1%d;BlinkingCursorEnabled=%p2%d\x07"),

View File

@@ -5,8 +5,6 @@ local insert, execute = helpers.insert, helpers.execute
local eq, funcs = helpers.eq, helpers.funcs local eq, funcs = helpers.eq, helpers.funcs
local command = helpers.command local command = helpers.command
if helpers.pending_win32(pending) then return end
describe('ui/cursor', function() describe('ui/cursor', function()
local screen local screen
@@ -24,7 +22,10 @@ describe('ui/cursor', function()
command('redraw') command('redraw')
screen:expect('', nil, nil, nil, true) -- Tickle the event-loop. screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
local expected_cursor_style = { local expected_cursor_style = {
cmd_insert = { cmdline_hover = {
mouse_shape = 0,
short_name = 'e' },
cmdline_insert = {
blinkoff = 250, blinkoff = 250,
blinkon = 400, blinkon = 400,
blinkwait = 700, blinkwait = 700,
@@ -34,10 +35,7 @@ describe('ui/cursor', function()
id_lm = 46, id_lm = 46,
mouse_shape = 0, mouse_shape = 0,
short_name = 'ci' }, short_name = 'ci' },
cmd_line = { cmdline_normal = {
mouse_shape = 0,
short_name = 'e' },
cmd_normal = {
blinkoff = 250, blinkoff = 250,
blinkon = 400, blinkon = 400,
blinkwait = 700, blinkwait = 700,
@@ -47,7 +45,7 @@ describe('ui/cursor', function()
id_lm = 46, id_lm = 46,
mouse_shape = 0, mouse_shape = 0,
short_name = 'c' }, short_name = 'c' },
cmd_replace = { cmdline_replace = {
blinkoff = 250, blinkoff = 250,
blinkon = 400, blinkon = 400,
blinkwait = 700, blinkwait = 700,
@@ -57,9 +55,6 @@ describe('ui/cursor', function()
id_lm = 46, id_lm = 46,
mouse_shape = 0, mouse_shape = 0,
short_name = 'cr' }, short_name = 'cr' },
drag_statusline = {
mouse_shape = 0,
short_name = 'sd' },
insert = { insert = {
blinkoff = 250, blinkoff = 250,
blinkon = 400, blinkon = 400,
@@ -70,15 +65,6 @@ describe('ui/cursor', function()
id_lm = 46, id_lm = 46,
mouse_shape = 0, mouse_shape = 0,
short_name = 'i' }, short_name = 'i' },
match_paren = {
blinkoff = 150,
blinkon = 175,
blinkwait = 175,
cell_percentage = 0,
cursor_shape = 'block',
hl_id = 45,
id_lm = 45,
short_name = 'sm' },
more = { more = {
mouse_shape = 0, mouse_shape = 0,
short_name = 'm' }, short_name = 'm' },
@@ -95,7 +81,7 @@ describe('ui/cursor', function()
id_lm = 46, id_lm = 46,
mouse_shape = 0, mouse_shape = 0,
short_name = 'n' }, short_name = 'n' },
pending = { operator = {
blinkoff = 250, blinkoff = 250,
blinkon = 400, blinkon = 400,
blinkwait = 700, blinkwait = 700,
@@ -115,12 +101,21 @@ describe('ui/cursor', function()
id_lm = 46, id_lm = 46,
mouse_shape = 0, mouse_shape = 0,
short_name = 'r' }, short_name = 'r' },
statusline = { showmatch = {
blinkoff = 150,
blinkon = 175,
blinkwait = 175,
cell_percentage = 0,
cursor_shape = 'block',
hl_id = 45,
id_lm = 45,
short_name = 'sm' },
statusline_drag = {
mouse_shape = 0,
short_name = 'sd' },
statusline_hover = {
mouse_shape = 0, mouse_shape = 0,
short_name = 's' }, short_name = 's' },
vdrag = {
mouse_shape = 0,
short_name = 'vd' },
visual = { visual = {
blinkoff = 250, blinkoff = 250,
blinkon = 400, blinkon = 400,
@@ -141,7 +136,10 @@ describe('ui/cursor', function()
id_lm = 45, id_lm = 45,
mouse_shape = 0, mouse_shape = 0,
short_name = 've' }, short_name = 've' },
vsep = { vsep_drag = {
mouse_shape = 0,
short_name = 'vd' },
vsep_hover = {
mouse_shape = 0, mouse_shape = 0,
short_name = 'vs' } short_name = 'vs' }
} }
@@ -161,19 +159,23 @@ describe('ui/cursor', function()
screen:expect('', nil, nil, nil, true) -- Tickle the event-loop. screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
eq('vertical', screen._cursor_style.normal.cursor_shape) eq('vertical', screen._cursor_style.normal.cursor_shape)
eq('horizontal', screen._cursor_style.visual_select.cursor_shape) eq('horizontal', screen._cursor_style.visual_select.cursor_shape)
eq('vertical', screen._cursor_style.pending.cursor_shape) eq('vertical', screen._cursor_style.operator.cursor_shape)
eq('block', screen._cursor_style.insert.cursor_shape) eq('block', screen._cursor_style.insert.cursor_shape)
eq('vertical', screen._cursor_style.match_paren.cursor_shape) eq('vertical', screen._cursor_style.showmatch.cursor_shape)
eq(171, screen._cursor_style.normal.blinkwait)
eq(172, screen._cursor_style.normal.blinkoff)
eq(173, screen._cursor_style.normal.blinkon)
end) end)
it("empty 'guicursor' sets cursor_shape=block in all modes", function() it("empty 'guicursor' sets cursor_shape=block in all modes", function()
meths.set_option('guicursor', '') meths.set_option('guicursor', '')
command('redraw') command('redraw')
screen:expect('', nil, nil, nil, true) -- Tickle the event-loop. screen:expect('', nil, nil, nil, true) -- Tickle the event-loop.
for _, m in ipairs({ 'cmd_insert', 'cmd_normal', 'cmd_replace', 'insert', for _, m in ipairs({ 'cmdline_insert', 'cmdline_normal', 'cmdline_replace', 'insert',
'match_paren', 'normal', 'replace', 'visual', 'showmatch', 'normal', 'replace', 'visual',
'visual_select', }) do 'visual_select', }) do
eq('block', screen._cursor_style[m].cursor_shape) eq('block', screen._cursor_style[m].cursor_shape)
eq(0, screen._cursor_style[m].blinkon)
end end
end) end)

View File

@@ -313,8 +313,8 @@ function Screen:_redraw(updates)
if handler ~= nil then if handler ~= nil then
handler(self, unpack(update[i])) handler(self, unpack(update[i]))
else else
assert(self._on_event, "Either add an Screen:_handle_XXX method ".. assert(self._on_event,
" or call Screen:set_on_event_handler") "Add Screen:_handle_XXX method or call Screen:set_on_event_handler")
self._on_event(method, update[i]) self._on_event(method, update[i])
end end
end end