diff --git a/autoload/vimspector.vim b/autoload/vimspector.vim index 0250b90..7e71695 100644 --- a/autoload/vimspector.vim +++ b/autoload/vimspector.vim @@ -96,6 +96,11 @@ function! vimspector#AddWatchPrompt( expr ) abort call vimspector#AddWatch( a:expr ) endfunction +function! vimspector#Evaluate( expr ) abort + py3 _vimspector_session.ShowOutput( 'Console' ) + py3 _vimspector_session.EvaluateConsole( vim.eval( 'a:expr' ) ) +endfunction + function! vimspector#EvaluateConsole( expr ) abort stopinsert setlocal nomodified @@ -110,6 +115,14 @@ function! vimspector#ListBreakpoints() abort py3 _vimspector_session.ListBreakpoints() endfunction +function! vimspector#CompleteOutput( ArgLead, CmdLine, CursorPos ) abort + return py3eval( '_vimspector_session.GetOutputBuffers()' ) +endfunction + +function! vimspector#CompleteExpr( ArgLead, CmdLine, CursorPos ) abort + return [] +endfunction + " Boilerplate {{{ let &cpoptions=s:save_cpo unlet s:save_cpo diff --git a/autoload/vimspector/internal/neojob.vim b/autoload/vimspector/internal/neojob.vim index c88a319..3c5e3b1 100644 --- a/autoload/vimspector/internal/neojob.vim +++ b/autoload/vimspector/internal/neojob.vim @@ -126,8 +126,8 @@ function! vimspector#internal#neojob#StartCommandWithLog( cmd, category ) abort let s:commands[ a:category ] = {} endif - let stdout_buf = bufnr( '_vimspector_log_' . a:category . '_out', 1 ) - let stderr_buf = bufnr( '_vimspector_log_' . a:category . '_err', 1 ) + let stdout_buf = bufnr( '_vimspector_log_' . a:category . '_out', v:true ) + let stderr_buf = bufnr( '_vimspector_log_' . a:category . '_err', v:true ) let id = jobstart(a:cmd, \ { diff --git a/plugin/vimspector.vim b/plugin/vimspector.vim index 13ffa3b..10eb374 100644 --- a/plugin/vimspector.vim +++ b/plugin/vimspector.vim @@ -26,6 +26,7 @@ if exists( 'g:loaded_vimpector' ) call s:restore_cpo() finish endif +"}}} " TODO: " - Check Vim version (for jobs) @@ -36,28 +37,54 @@ let g:loaded_vimpector = 1 let s:mappings = get( g:, 'vimspector_enable_mappings', '' ) +nnoremap VimspectorContinue :call vimspector#Continue() +nnoremap VimspectorStop :call vimspector#Stop() +nnoremap VimspectorRestart :call vimspector#Restart() +nnoremap VimspectorPause :call vimspector#Pause() +nnoremap VimspectorToggleBreakpoint + \ :call vimspector#ToggleBreakpoint() +nnoremap VimspectorAddFunctionBreakpoint + \ :call vimspector#AddFunctionBreakpoint( expand( '' ) ) +nnoremap VimspectorStopOver :call vimspector#StepOver() +nnoremap VimspectorStepInto :call vimspector#StepInto() +nnoremap VimspectorStepOut :call vimspector#StepOut() + if s:mappings ==# 'VISUAL_STUDIO' - nnoremap :call vimspector#Continue() - nnoremap :call vimspector#Stop() - nnoremap :call vimspector#Restart() - nnoremap :call vimspector#Pause() - nnoremap :call vimspector#ToggleBreakpoint() - nnoremap :call vimspector#AddFunctionBreakpoint( expand( '' ) ) - nnoremap :call vimspector#StepOver() - nnoremap :call vimspector#StepInto() - nnoremap :call vimspector#StepOut() + nmap VimspectorContinue + nmap VimspectorStop + nmap VimspectorRestart + nmap VimspectorPause + nmap VimspectorToggleBreakpoint + nmap VimspectorAddFunctionBreakpoint + nmap VimspectorStepOver + nmap VimspectorStepInto + nmap VimspectorStepOut elseif s:mappings ==# 'HUMAN' - nnoremap :call vimspector#Continue() - nnoremap :call vimspector#Stop() - nnoremap :call vimspector#Restart() - nnoremap :call vimspector#Pause() - nnoremap :call vimspector#ToggleBreakpoint() - nnoremap :call vimspector#AddFunctionBreakpoint( expand( '' ) ) - nnoremap :call vimspector#StepOver() - nnoremap :call vimspector#StepInto() - nnoremap :call vimspector#StepOut() + nmap VimspectorContinue + nmap VimspectorStop + nmap VimspectorRestart + nmap VimspectorPause + nmap VimspectorToggleBreakpoint + nmap VimspectorAddFunctionBreakpoint + nmap VimspectorStepOver + nmap VimspectorStepInto + nmap VimspectorStepOut endif -"}}} +command! -bar -nargs=1 -complete=customlist,vimspector#CompleteExpr + \ VimspectorWatch + \ call vimspector#AddWatch( ) +command! -bar -nargs=1 -complete=customlist,vimspector#CompleteOutput + \ VimspectorShowOutput + \ call vimspector#ShowOutput( ) +command! -bar -nargs=1 -complete=customlist,vimspector#CompleteExpr + \ VimspectorEval + \ call vimspector#Evaluate( ) +command! -bar + \ VimspectorReset + \ call vimspector#Reset() +" boilerplate {{{ call s:restore_cpo() +" }}} + diff --git a/python3/vimspector/debug_session.py b/python3/vimspector/debug_session.py index 11e602a..a4d801b 100644 --- a/python3/vimspector/debug_session.py +++ b/python3/vimspector/debug_session.py @@ -403,6 +403,9 @@ class DebugSession( object ): def ShowOutput( self, category ): self._outputView.ShowOutput( category ) + def GetOutputBuffers( self ): + return self._outputView.GetCategories() + def _SetUpUI( self ): vim.command( 'tabnew' ) self._uiTab = vim.current.tabpage diff --git a/python3/vimspector/output.py b/python3/vimspector/output.py index dd0c293..fb90929 100644 --- a/python3/vimspector/output.py +++ b/python3/vimspector/output.py @@ -206,3 +206,6 @@ class OutputView( object ): tab_buffer.index, utils.Escape( category ), '*' if tab_buffer.flag else '' ) ) + + def GetCategories( self ): + return [ category for category in self._buffers.keys() ]