@@ -322,6 +322,10 @@ let g:scrollview_ins_mode_buf_lines = 0
322322" escaping.
323323let g: scrollview_echo_string = v: null
324324
325+ " Keep track of the initial mouse settings. These are only used for nvim<0.11.
326+ let g: scrollview_init_mouse_primary = g: scrollview_mouse_primary
327+ let g: scrollview_init_mouse_secondary = g: scrollview_mouse_secondary
328+
325329" *************************************************
326330" * Versioning
327331" *************************************************
@@ -432,6 +436,23 @@ endif
432436" * Mappings
433437" *************************************************
434438
439+ function ! scrollview#HandleMouseFromMapping (button, is_primary) abort
440+ let l: button_repr = nvim_replace_termcodes (
441+ \ printf (' <%smouse>' , a: button ), v: true , v: true , v: true )
442+ let l: packed = luaeval (
443+ \ ' {require("scrollview").should_handle_mouse(_A)}' , l: button_repr )
444+ let l: should_handle = l: packed [0 ]
445+ if l: should_handle
446+ let l: data = l: packed [1 ]
447+ call luaeval (
448+ \ ' require("scrollview").handle_mouse('
449+ \ .. ' _A.button, _A.is_primary, _A.props, _A.mousepos)' , l: data )
450+ else
451+ " Process the click as it would ordinarily be processed.
452+ call feedkeys (l: button_repr , ' ni' )
453+ endif
454+ endfunction
455+
435456function ! s: SetUpMouseMappings (button, primary) abort
436457 if a: button isnot # v: null
437458 " Create a mouse mapping only if mappings don't already exist and "!" is
@@ -447,25 +468,28 @@ function! s:SetUpMouseMappings(button, primary) abort
447468 let l: button =
448469 \ strcharpart (l: button , 0 , strchars (l: button , 1 ) - 1 )
449470 endif
450- " scrollview mouse handling is not supported in select-mode. #140
451- for l: mapmode in [' n' , ' x' , ' i' ]
471+ for l: mapmode in [' n' , ' v' , ' i' ]
452472 execute printf (
453473 \ ' silent! %snoremap %s <silent> <%smouse>'
454- \ .. ' <cmd>lua require(" scrollview").handle_mouse ("%s", %s)<cr>' ,
474+ \ .. ' <cmd>call scrollview#HandleMouseFromMapping ("%s", %s)<cr>' ,
455475 \ l: mapmode ,
456476 \ l: force ? ' ' : ' <unique>' ,
457477 \ l: button ,
458478 \ l: button ,
459- \ a: primary ? ' true ' : ' false ' ,
479+ \ a: primary ,
460480 \ )
461481 endfor
462482 endif
463483endfunction
464484
465- call s: SetUpMouseMappings (g: scrollview_mouse_primary , v: true )
466- " :popup doesn't work for nvim<0.8.
467- if has (' nvim-0.8' )
468- call s: SetUpMouseMappings (g: scrollview_mouse_secondary , v: false )
485+ " With Neovim 0.11, mouse functionality is handled with vim.on_key, not
486+ " mappings.
487+ if ! has (' nvim-0.11' )
488+ call s: SetUpMouseMappings (g: scrollview_mouse_primary , v: true )
489+ " :popup doesn't work for nvim<0.8.
490+ if has (' nvim-0.8' )
491+ call s: SetUpMouseMappings (g: scrollview_mouse_secondary , v: false )
492+ endif
469493endif
470494
471495" Additional <plug> mappings are defined for convenience of creating
0 commit comments