dotfiles/.vim/pack/plugins/start/vim-improve-diff/autoload/improve_diff.vim
2024-12-15 14:45:59 +01:00

82 lines
2.5 KiB
VimL

let s:save_cpo = &cpo
set cpo&vim
function! improve_diff#diffoff(...) abort " {{{
let expr = get(a:000, 0, '%')
if getwinvar(bufwinnr(expr), '&diff')
call setwinvar(bufwinnr(expr), '&diff', 0)
endif
endfunction " }}}
function! improve_diff#diffupdate(...) abort " {{{
let expr = get(a:000, 0, '%')
if getwinvar(bufwinnr(expr), '&diff')
diffupdate
endif
endfunction " }}}
function! improve_diff#difforig(...) abort " {{{
let horizontal = get(a:000, 0, 0)
let bufnum = bufnr('%')
let filetype = &filetype
let filename = expand('%')
let sep = has('unix') ? ':' : '-'
if horizontal
noautocmd execute printf('new ORIG%s%s', sep, filename)
else
noautocmd execute printf('vnew ORIG%s%s', sep, filename)
endif
r # | normal! 1Gdd
silent execute printf('setlocal filetype=%s', filetype)
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile
setlocal readonly nomodifiable
diffthis
silent execute printf('%swincmd w', bufwinnr(bufnum))
diffthis
diffupdate
endfunction " }}}
function! improve_diff#enable_auto_diffupdate() abort " {{{
augroup vim-improve-diff-auto-diffupdate
autocmd! *
autocmd InsertLeave * call improve_diff#diffupdate()
augroup END
endfunction " }}}
function! improve_diff#enable_auto_diffoff() abort " {{{
augroup vim-improve-diff-auto-diffoff
autocmd! *
autocmd BufWinLeave * call improve_diff#diffoff(expand('<afile>'))
augroup END
endfunction " }}}
function! improve_diff#enable() abort " {{{
call improve_diff#enable_auto_diffupdate()
call improve_diff#enable_auto_diffoff()
endfunction " }}}
function! improve_diff#disable_auto_diffupdate() abort " {{{
augroup vim-improve-diff-auto-diffupdate
autocmd! *
augroup END
endfunction " }}}
function! improve_diff#disable_auto_diffoff() abort " {{{
augroup vim-improve-diff-auto-diffoff
autocmd! *
augroup END
endfunction " }}}
function! improve_diff#disable() abort " {{{
call improve_diff#disable_auto_diffupdate()
call improve_diff#disable_auto_diffoff()
endfunction " }}}
nnoremap <silent> <Plug>(improve-diff-diffupdate)
\ :<C-u>call improve_diff#diffupdate()<CR>
nnoremap <silent> <Plug>(improve-diff-diffoff)
\ :<C-u>call improve_diff#diffoff()<CR>
nnoremap <silent> <Plug>(improve-diff-difforig-h)
\ :<C-u>call improve_diff#difforig(1)<CR>
nnoremap <silent> <Plug>(improve-diff-difforig-v)
\ :<C-u>call improve_diff#difforig(0)<CR>
let &cpo = s:save_cpo
" vim:set et ts=2 sts=2 sw=2 tw=0 fdm=marker: