" 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