28 lines
1.0 KiB
VimL
28 lines
1.0 KiB
VimL
" Use the OSC 52 escape sequence to copy text to the local system clipboard
|
|
" when connected to a remote machine.
|
|
|
|
" Add an autocmd to run after text is yanked.
|
|
function! osc52#autocmd()
|
|
augroup osc52
|
|
autocmd!
|
|
autocmd TextYankPost * call osc52#copy()
|
|
augroup END
|
|
endfunction
|
|
|
|
function! osc52#copy()
|
|
" Only use OSC 52 when text is yanked with the z register.
|
|
if v:event['regname'] ==# 'z'
|
|
" Get the register contents and join the list into a string.
|
|
let l:content = join(v:event['regcontents'], "\n")
|
|
if v:event['regtype'] ==# 'V'
|
|
" Append a new line in linewise-visual mode to avoid surprises.
|
|
let l:content = l:content."\n"
|
|
endif
|
|
" Get the parent tty while being compatible with vim and neovim, originally
|
|
" from https://github.com/greymd/oscyank.vim
|
|
let l:tty = system('(tty || tty < /proc/$PPID/fd/0) 2> /dev/null | grep /dev/')
|
|
" Base 64 encode the content, and print OSC 52 escape sequence to the tty.
|
|
call system('base64 | xargs -0 printf "\\033]52;c;%s\\a" > '.l:tty, l:content)
|
|
endif
|
|
endfunction
|