mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
Merge pull request #26279 from agraven/x1-x2-mouse-api
feat(api): add forward and back mouse buttons
This commit is contained in:
commit
80f75d063d
@ -1145,7 +1145,7 @@ nvim_input_mouse({button}, {action}, {modifier}, {grid}, {row}, {col})
|
||||
|
||||
Parameters: ~
|
||||
• {button} Mouse button: one of "left", "right", "middle", "wheel",
|
||||
"move".
|
||||
"move", "x1", "x2".
|
||||
• {action} For ordinary buttons, one of "press", "drag", "release".
|
||||
For the wheel, one of "up", "down", "left", "right".
|
||||
Ignored for "move".
|
||||
|
@ -268,6 +268,8 @@ The following new APIs and features were added.
|
||||
• 'completeopt' option supports "popup" flags to show extra information in
|
||||
in floating window.
|
||||
|
||||
• Added `x1` and `x2` mouse buttons as possible arguments to |nvim_input_mouse()|
|
||||
|
||||
==============================================================================
|
||||
CHANGED FEATURES *news-changed*
|
||||
|
||||
|
2
runtime/lua/vim/_meta/api.lua
generated
2
runtime/lua/vim/_meta/api.lua
generated
@ -1375,7 +1375,7 @@ function vim.api.nvim_input(keys) end
|
||||
--- processed soon by the event loop.
|
||||
---
|
||||
--- @param button string Mouse button: one of "left", "right", "middle", "wheel",
|
||||
--- "move".
|
||||
--- "move", "x1", "x2".
|
||||
--- @param action string For ordinary buttons, one of "press", "drag", "release".
|
||||
--- For the wheel, one of "up", "down", "left", "right".
|
||||
--- Ignored for "move".
|
||||
|
@ -345,7 +345,8 @@ Integer nvim_input(String keys)
|
||||
/// mouse input in a GUI. The deprecated pseudokey form
|
||||
/// ("<LeftMouse><col,row>") of |nvim_input()| has the same limitation.
|
||||
///
|
||||
/// @param button Mouse button: one of "left", "right", "middle", "wheel", "move".
|
||||
/// @param button Mouse button: one of "left", "right", "middle", "wheel", "move",
|
||||
/// "x1", "x2".
|
||||
/// @param action For ordinary buttons, one of "press", "drag", "release".
|
||||
/// For the wheel, one of "up", "down", "left", "right". Ignored for "move".
|
||||
/// @param modifier String of modifiers each represented by a single char.
|
||||
@ -376,6 +377,10 @@ void nvim_input_mouse(String button, String action, String modifier, Integer gri
|
||||
code = KE_RIGHTMOUSE;
|
||||
} else if (strequal(button.data, "wheel")) {
|
||||
code = KE_MOUSEDOWN;
|
||||
} else if (strequal(button.data, "x1")) {
|
||||
code = KE_X1MOUSE;
|
||||
} else if (strequal(button.data, "x2")) {
|
||||
code = KE_X2MOUSE;
|
||||
} else if (strequal(button.data, "move")) {
|
||||
code = KE_MOUSEMOVE;
|
||||
} else {
|
||||
|
@ -311,7 +311,8 @@ static uint8_t check_multiclick(int code, int grid, int row, int col)
|
||||
}
|
||||
|
||||
// For click events the number of clicks is updated.
|
||||
if (code == KE_LEFTMOUSE || code == KE_RIGHTMOUSE || code == KE_MIDDLEMOUSE) {
|
||||
if (code == KE_LEFTMOUSE || code == KE_RIGHTMOUSE || code == KE_MIDDLEMOUSE
|
||||
|| code == KE_X1MOUSE || code == KE_X2MOUSE) {
|
||||
uint64_t mouse_time = os_hrtime(); // time of current mouse click (ns)
|
||||
// compute the time elapsed since the previous mouse click and
|
||||
// convert p_mouse from ms to ns
|
||||
|
@ -758,6 +758,25 @@ describe('ui/mouse/input', function()
|
||||
feed('<cr>')
|
||||
end)
|
||||
|
||||
it('x1 and x2 can be triggered by api', function()
|
||||
meths.set_var('x1_pressed', 0)
|
||||
meths.set_var('x1_released', 0)
|
||||
meths.set_var('x2_pressed', 0)
|
||||
meths.set_var('x2_released', 0)
|
||||
command('nnoremap <X1Mouse> <Cmd>let g:x1_pressed += 1<CR>')
|
||||
command('nnoremap <X1Release> <Cmd>let g:x1_released += 1<CR>')
|
||||
command('nnoremap <X2Mouse> <Cmd>let g:x2_pressed += 1<CR>')
|
||||
command('nnoremap <X2Release> <Cmd>let g:x2_released += 1<CR>')
|
||||
meths.input_mouse('x1', 'press', '', 0, 0, 0)
|
||||
meths.input_mouse('x1', 'release', '', 0, 0, 0)
|
||||
meths.input_mouse('x2', 'press', '', 0, 0, 0)
|
||||
meths.input_mouse('x2', 'release', '', 0, 0, 0)
|
||||
eq(1, meths.get_var('x1_pressed'), 'x1 pressed once')
|
||||
eq(1, meths.get_var('x1_released'), 'x1 released once')
|
||||
eq(1, meths.get_var('x2_pressed'), 'x2 pressed once')
|
||||
eq(1, meths.get_var('x2_released'), 'x2 released once')
|
||||
end)
|
||||
|
||||
it('dragging vertical separator', function()
|
||||
screen:try_resize(45, 5)
|
||||
command('setlocal nowrap')
|
||||
|
Loading…
Reference in New Issue
Block a user