dotfiles/symlinks/vim/plugin/fugitive.vim

45 lines
1.5 KiB
VimL

" -----------------------------------------------------------------------------
" - Fugitive.vim setup and extra mappings -
" -----------------------------------------------------------------------------
" Shorcut to push directly to current branch on origin
" Similar to `ggpush` in fish config
function! s:PushOrigin()
execute 'Gpush origin ' . FugitiveHead()
endfunction
" Generates url for creating PR for current branch
" Tested only with github.com
" Works regardless of ssh or https for origin config
" Hardcoded to use 'origin' remote
function! s:GetPrUrl()
let origin_url = fugitive#RemoteUrl('origin')
let origin_url = substitute(l:origin_url, ':', '/', '')
let origin_url = substitute(l:origin_url, 'git@', 'https://', '')
let pr_url = l:origin_url . '/compare/' . FugitiveHead() . '?expand=1'
return l:pr_url
endfunction
" Prints current branches PR url (not saved to :messages)
" Makes it easy to use terminal for opening url on click
function! s:PrintPrUrl()
echo s:GetPrUrl()
endfunction
" Copies current branches PR url to system clipboard
function! s:CopyPrUrl()
let @+ = s:GetPrUrl()
endfunction
" Opens current banches PR url in default browser
" Utilizes netrw browse, meaning it should behave same as netrw
function! s:OpenNewPr()
call netrw#BrowseX(s:GetPrUrl(), 0)
endfunction
command! -nargs=0 Ggpush :call s:PushOrigin()
command! -nargs=0 Gpr :call s:OpenNewPr()
command! -nargs=0 Gpropen :call s:OpenNewPr()
command! -nargs=0 Gprprint :call s:PrintPrUrl()
command! -nargs=0 Gprcopy :call s:CopyPrUrl()