From e496ccc5939d9cd7e2b6456340e832fed8549155 Mon Sep 17 00:00:00 2001 From: Chris Toomey Date: Sat, 24 Nov 2012 11:29:28 -0500 Subject: [PATCH] Add guard functions to require pane, window --- plugin/vim-tmux-runner.vim | 54 +++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/plugin/vim-tmux-runner.vim b/plugin/vim-tmux-runner.vim index eaef096..40c6782 100644 --- a/plugin/vim-tmux-runner.vim +++ b/plugin/vim-tmux-runner.vim @@ -1,11 +1,12 @@ -" TODO: guards on methods that expect pane, window to exist " TODO: full command and option docs " TODO: maximize command " TODO: unlet s:pane on anything the detaches, kills, etc " TODO: create pane if not already available when running sendcommand -" TODO: reattach pane rather than create if s:detach_window is set +" TODO: reattach pane rather than create if s:detached_window is set " TODO: normalize naming, 'runner' not 'pane' " TODO: update the clear sequence to use '^U^L' +" TODO: update KillRunnerPane to kill detached as well as local +" TODO: investigate occasional '[lost Server]' error from tmux function! s:InitVariable(var, value) if !exists(a:var) @@ -45,12 +46,34 @@ function! s:OpenRunnerPane() endfunction function! s:DetachRunnerPane() + if !s:RequireRunnerPane() + return + endif call s:BreakRunnerPaneToTempWindow() let cmd = join(["rename-window -t", s:detached_window, g:VtrDetachedName]) call s:SendTmuxCommand(cmd) endfunction +function! s:RequireRunnerPane() + if !exists("s:runner_pane") + echohl ErrorMsg | echom "VTR: No runner pane attached." | echohl None + return 0 + endif + return 1 +endfunction + +function! s:RequireDetachedPane() + if !exists("s:detached_window") + echohl ErrorMsg | echom "VTR: No detached runner pane." | echohl None + return 0 + endif + return 1 +endfunction + function! s:KillRunnerPane() + if !s:RequireRunnerPane() + return + endif let targeted_cmd = s:TargetedTmuxCommand("kill-pane", s:runner_pane) call s:SendTmuxCommand(targeted_cmd) unlet s:runner_pane @@ -86,6 +109,9 @@ function! s:RunnerPaneDimensions() endfunction function! s:ResizeRunnerPane() + if !s:RequireRunnerPane() + return + endif let new_percent = s:HighlightedPrompt("Runner screen percentage: ") let pane_dimensions = s:RunnerPaneDimensions() let expand = (eval(join([new_percent, '>', g:VtrPercentage]))) @@ -110,6 +136,7 @@ function! s:ResizeRunnerPane() endfunction function! s:FocusRunnerPane() + call s:EnsureRunnerPane() call s:FocusTmuxPane(s:runner_pane) endfunction @@ -138,6 +165,9 @@ function! s:SendEnterSequence() endfunction function! s:SendClearSequence() + if !s:RequireRunnerPane() + return + endif call s:SendKeys("clear") sleep 50m endfunction @@ -177,6 +207,9 @@ function! s:_ReattachPane() endfunction function! s:ReattachPane() + if !s:RequireDetachedPane() + return + endif call s:_ReattachPane() call s:FocusVimPane() if g:VtrClearOnReattach @@ -185,6 +218,9 @@ function! s:ReattachPane() endfunction function! s:ReorientRunner() + if !s:RequireRunnerPane() + return + endif let temp_window = s:BreakRunnerPaneToTempWindow() call s:ToggleOrientationVariable() call s:_ReattachPane() @@ -206,6 +242,7 @@ function! s:FlushCommand() endfunction function! s:SendCommandToRunner() + call s:EnsureRunnerPane() if !exists("s:user_command") let s:user_command = s:HighlightedPrompt(g:VtrPrompt) endif @@ -216,7 +253,7 @@ function! s:SendCommandToRunner() endfunction function! s:DefineCommands() - command! VTROpenRunner :call s:OpenRunnerPane() + command! VTROpenRunner :call s:EnsureRunnerPane() command! VTRKillRunner :call s:KillRunnerPane() command! VTRFocusRunnerPane :call s:FocusRunnerPane() command! VTRSendCommandToRunner :call s:SendCommandToRunner() @@ -243,7 +280,18 @@ function! s:DefineKeymaps() endif endfunction +function! s:EnsureRunnerPane() + if exists('s:detached_window') + call s:ReattachPane() + elseif exists('s:runner_pane') + return + else + call s:OpenRunnerPane() + endif +endfunction + function! VTRSendCommand(command) + call s:EnsureRunnerPane() let escaped_command = shellescape(a:command) call s:SendKeys(escaped_command) endfunction