mirror of
https://github.com/preservim/nerdtree.git
synced 2024-11-25 09:41:03 +08:00
Repair the broken middle mouse click handler
Issues #597, #642, and #650 all report problems with the NERDTree handler function for middle mouse clicks. In all cases, the problems arose from the use of a function that didn't exist and from the use of a bad argument in the call to the "g:NERDTreeAddKeyMap" function. The fix for the first problem is obvious, but the solution to the second bug merits explanation. Previously, middle click events in the NERDTree window were triggered with the "<MiddleRelease>" Vim key code. Since "<MiddleMouse>" is always triggered before "<MiddleRelease>", The error in #642 was bound to occur (because of the default behavior for middle mouse clicks). Thus, the problem was easily solved by using "<MiddleMouse>" instead of "<MiddleRelease>" in the mapping. As an enhancement, I added the trigger of a "<LeftMouse>" event as the first command in the handler function. This will cause the middle click to reposition the cursor below the pointer before continuing with its normal behavior. The benefits of this are clear. This mapping has no defined behavior for bookmarks. Unless an issue is raised to address this, it will be left just so for now. Fixes #597, fixes #642, and fixes #650.
This commit is contained in:
parent
5ce9bda392
commit
c934b50c0d
|
@ -7,7 +7,7 @@ let g:loaded_nerdtree_ui_glue_autoload = 1
|
|||
function! nerdtree#ui_glue#createDefaultBindings()
|
||||
let s = '<SNR>' . s:SID() . '_'
|
||||
|
||||
call NERDTreeAddKeyMap({ 'key': '<MiddleRelease>', 'scope': "all", 'callback': s."handleMiddleMouse" })
|
||||
call NERDTreeAddKeyMap({ 'key': '<MiddleMouse>', 'scope': 'all', 'callback': s . 'handleMiddleMouse' })
|
||||
call NERDTreeAddKeyMap({ 'key': '<LeftRelease>', 'scope': "all", 'callback': s."handleLeftClick" })
|
||||
call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "DirNode", 'callback': s."activateDirNode" })
|
||||
call NERDTreeAddKeyMap({ 'key': '<2-LeftMouse>', 'scope': "FileNode", 'callback': s."activateFileNode" })
|
||||
|
@ -336,16 +336,22 @@ endfunction
|
|||
|
||||
" FUNCTION: s:handleMiddleMouse() {{{1
|
||||
function! s:handleMiddleMouse()
|
||||
let curNode = g:NERDTreeFileNode.GetSelected()
|
||||
if curNode ==# {}
|
||||
call nerdtree#echo("Put the cursor on a node first" )
|
||||
|
||||
" A middle mouse click does not automatically position the cursor as one
|
||||
" would expect. Forcing the execution of a regular left mouse click here
|
||||
" fixes this problem.
|
||||
execute "normal! \<LeftMouse>"
|
||||
|
||||
let l:currentNode = g:NERDTreeFileNode.GetSelected()
|
||||
if empty(l:currentNode)
|
||||
call nerdtree#echoError('use the pointer to select a node')
|
||||
return
|
||||
endif
|
||||
|
||||
if curNode.path.isDirectory
|
||||
call nerdtree#openExplorer(curNode)
|
||||
if l:currentNode.path.isDirectory
|
||||
call l:currentNode.openExplorer()
|
||||
else
|
||||
call curNode.open({'where': 'h'})
|
||||
call l:currentNode.open({'where': 'h'})
|
||||
endif
|
||||
endfunction
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user