From a4801b803439d0bfa412383462af69f8d7e56835 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Tue, 5 Jul 2022 20:57:01 +0800 Subject: vim-patch:8.0.1562: the terminal debugger can't set a breakpoint with the mouse (#19234) Problem: The terminal debugger can't set a breakpoint with the mouse. Solution: Add popup menu entries. https://github.com/vim/vim/commit/71137fed4d77e985d49ca32c79f030512767b8ce This ports missing popup menu code to termdebug plugin. Despite the commit message, the code is copied from latest Vim. WinBar code is commented out and WinBar docs is not ported. --- runtime/doc/nvim_terminal_emulator.txt | 14 +++++++ .../pack/dist/opt/termdebug/plugin/termdebug.vim | 49 +++++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) (limited to 'runtime') diff --git a/runtime/doc/nvim_terminal_emulator.txt b/runtime/doc/nvim_terminal_emulator.txt index 487ccdb0c5..a7be9ff98f 100644 --- a/runtime/doc/nvim_terminal_emulator.txt +++ b/runtime/doc/nvim_terminal_emulator.txt @@ -472,6 +472,20 @@ any window, using the TermDebugSendCommand() function. Example: > The argument is the gdb command. +Popup menu ~ + *termdebug_popup* + +By default the Termdebug plugin sets 'mousemodel' to "popup_setpos" and adds +these entries to the popup menu: + Set breakpoint `:Break` + Clear breakpoint `:Clear` + Evaluate `:Evaluate` +If you don't want this then disable it with: > + let g:termdebug_config['popup'] = 0 +or if there is no g:termdebug_config: > + let g:termdebug_popup = 0 + + Vim window width ~ *termdebug_wide* diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim index c4e90eb373..802ebd42b5 100644 --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -37,7 +37,7 @@ " " For neovim compatibility, the vim specific calls were replaced with neovim " specific calls: -" term_start -> term_open +" term_start -> termopen " term_sendkeys -> chansend " term_getline -> getbufline " job_info && term_getjob -> using linux command ps to get the tty @@ -902,6 +902,26 @@ func s:InstallCommands() nnoremap K :Evaluate endif + if has('menu') && &mouse != '' + call s:InstallWinbar() + + let popup = 1 + if exists('g:termdebug_config') + let popup = get(g:termdebug_config, 'popup', 1) + elseif exists('g:termdebug_popup') + let popup = g:termdebug_popup + endif + if popup + let s:saved_mousemodel = &mousemodel + let &mousemodel = 'popup_setpos' + an 1.200 PopUp.-SEP3- + an 1.210 PopUp.Set\ breakpoint :Break + an 1.220 PopUp.Clear\ breakpoint :Clear + an 1.230 PopUp.Run\ until :Until + an 1.240 PopUp.Evaluate :Evaluate + endif + endif + let &cpo = save_cpo endfunc @@ -956,6 +976,33 @@ func s:DeleteCommands() unlet s:k_map_saved endif + if has('menu') + " Remove the WinBar entries from all windows where it was added. + " let curwinid = win_getid(winnr()) + " for winid in s:winbar_winids + " if win_gotoid(winid) + " aunmenu WinBar.Step + " aunmenu WinBar.Next + " aunmenu WinBar.Finish + " aunmenu WinBar.Cont + " aunmenu WinBar.Stop + " aunmenu WinBar.Eval + " endif + " endfor + " call win_gotoid(curwinid) + " let s:winbar_winids = [] + + if exists('s:saved_mousemodel') + let &mousemodel = s:saved_mousemodel + unlet s:saved_mousemodel + aunmenu PopUp.-SEP3- + aunmenu PopUp.Set\ breakpoint + aunmenu PopUp.Clear\ breakpoint + aunmenu PopUp.Run\ until + aunmenu PopUp.Evaluate + endif + endif + call sign_unplace('TermDebug') unlet s:breakpoints unlet s:breakpoint_locations -- cgit