first commit
This commit is contained in:
78
profiles/base/.vim/plugin/vimtmuxclipboard.vim
Normal file
78
profiles/base/.vim/plugin/vimtmuxclipboard.vim
Normal file
@@ -0,0 +1,78 @@
|
||||
|
||||
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)
|
||||
Reference in New Issue
Block a user