Skip to content

Instantly share code, notes, and snippets.

@bentglasstube
Created July 22, 2014 21:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bentglasstube/637e3e83cd5f4a6b3e8f to your computer and use it in GitHub Desktop.
Save bentglasstube/637e3e83cd5f4a6b3e8f to your computer and use it in GitHub Desktop.
" Defines functions for moving windows or forwarding the move on to bspwm
if exists("g:loaded_bspwm_nav") || &cp || v:version < 700
finish
endif
let g:loaded_bspwm_nav = 1
function! s:InBspwmSession()
" TODO check return of bspc query -M
return 1
endfunction
function! s:BspwmWinCmd(dir)
if s:InBspwmSession()
call s:BspwmNavigate(a:dir)
else
call s:VimNavigate(a:dir)
endif
endfunction
function! s:BspwmNavigate(dir)
let nr = winnr()
call s:VimNavigate(a:dir)
if nr == winnr()
let cmd = 'bspc window -f '
if a:dir == 'h'
let cmd = cmd . 'left'
elseif a:dir == 'j'
let cmd = cmd . 'down'
elseif a:dir == 'k'
let cmd = cmd . 'up'
elseif a:dir == 'l'
let cmd = cmd . 'right'
else
" TODO throw error
endif
silent call system(cmd)
endif
endfunction
function! s:VimNavigate(dir)
try
execute 'wincmd ' . a:dir
catch
echohl ErrorMsg | echo 'E11: Invalid in command-line window; <CR> executes, CTRL-C quits: wincmd k' | echohl None
endtry
endfunction
command! BspwmNavigateLeft call <SID>BspwmWinCmd('h')
command! BspwmNavigateDown call <SID>BspwmWinCmd('j')
command! BspwmNavigateUp call <SID>BspwmWinCmd('k')
command! BspwmNavigateRight call <SID>BspwmWinCmd('l')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment