mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	Merge pull request #26279 from agraven/x1-x2-mouse-api
feat(api): add forward and back mouse buttons
This commit is contained in:
		| @@ -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') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bfredl
					bfredl