79 lines
2.1 KiB
VimL
79 lines
2.1 KiB
VimL
|
|
let g:vim_tmux_clipboard#loadb_option = get(g:, 'vim_tmux_clipboard#loadb_option', '')
|
|
|
|
func! s:TmuxBufferName()
|
|
let l:list = systemlist('tmux list-buffers -F"#{buffer_name}"')
|
|
if len(l:list)==0
|
|
return ""
|
|
else
|
|
return l:list[0]
|
|
endif
|
|
endfunc
|
|
|
|
function! s:on_stdout(job_id, data, event)
|
|
let @" = join(a:data, "\n")
|
|
endfunction
|
|
|
|
func! s:AsyncTmuxBuffer()
|
|
call jobstart('tmux show-buffer', {'on_stdout': function('s:on_stdout'), 'stdout_buffered': 1})
|
|
endfunc
|
|
|
|
func! s:TmuxBuffer()
|
|
return system('tmux show-buffer')
|
|
endfunc
|
|
|
|
func! s:Enable()
|
|
|
|
if $TMUX==''
|
|
" not in tmux session
|
|
return
|
|
endif
|
|
|
|
let s:lastbname=""
|
|
|
|
" if support TextYankPost
|
|
if exists('##TextYankPost')==1
|
|
" @"
|
|
augroup vimtmuxclipboard
|
|
autocmd!
|
|
autocmd FocusLost * call s:update_from_tmux()
|
|
autocmd FocusGained * call s:update_from_tmux()
|
|
autocmd TextYankPost * silent! call system('tmux loadb ' . g:vim_tmux_clipboard#loadb_option . ' -',join(v:event["regcontents"],"\n"))
|
|
augroup END
|
|
if exists('*jobstart')==1 " Only supported on Neovim
|
|
call s:AsyncTmuxBuffer()
|
|
else
|
|
let @" = s:TmuxBuffer()
|
|
endif
|
|
else
|
|
" vim doesn't support TextYankPost event
|
|
" This is a workaround for vim
|
|
augroup vimtmuxclipboard
|
|
autocmd!
|
|
autocmd FocusLost * silent! call system('tmux loadb ' . g:vim_tmux_clipboard#loadb_option . ' -',@")
|
|
autocmd FocusGained * let @" = s:TmuxBuffer()
|
|
augroup END
|
|
let @" = s:TmuxBuffer()
|
|
endif
|
|
|
|
endfunc
|
|
|
|
func! s:update_from_tmux()
|
|
let buffer_name = s:TmuxBufferName()
|
|
if s:lastbname != buffer_name
|
|
let @" = s:TmuxBuffer()
|
|
endif
|
|
let s:lastbname=s:TmuxBufferName()
|
|
endfunc
|
|
|
|
call s:Enable()
|
|
|
|
" " workaround for this bug
|
|
" if shellescape("\n")=="'\\\n'"
|
|
" let l:s=substitute(l:s,'\\\n',"\n","g")
|
|
" let g:tmp_s=substitute(l:s,'\\\n',"\n","g")
|
|
" ");
|
|
" let g:tmp_cmd='tmux set-buffer ' . l:s
|
|
" endif
|
|
" silent! call system('tmux loadb -w -',l:s)
|