mirror of
https://github.com/airblade/vim-gitgutter.git
synced 2025-11-11 13:03:45 -05:00
Add support for fish shell
The `&&` and the `||` operators aren't available in fish. The equivalents are `; and` and `; or`. Also single parentheses are used for command substitution. The fish equivalents are `begin` and `end`. But they aren't needed here.
This commit is contained in:
committed by
Andy Stewart
parent
fe10e6474d
commit
0ca15c8ad2
@@ -11,13 +11,21 @@ let s:hunk_re = '^@@ -\(\d\+\),\?\(\d*\) +\(\d\+\),\?\(\d*\) @@'
|
|||||||
|
|
||||||
|
|
||||||
function! gitgutter#diff#run_diff(realtime, use_external_grep)
|
function! gitgutter#diff#run_diff(realtime, use_external_grep)
|
||||||
" Wrap compound commands in parentheses to make Windows happy.
|
" Detect whether user uses fish shell
|
||||||
let cmd = '('
|
let l:fish = &shell =~# 'fish'
|
||||||
|
|
||||||
|
if !l:fish
|
||||||
|
" Wrap compound commands in parentheses to make Windows happy.
|
||||||
|
let cmd = '('
|
||||||
|
else
|
||||||
|
let cmd = ''
|
||||||
|
end
|
||||||
|
|
||||||
let bufnr = gitgutter#utility#bufnr()
|
let bufnr = gitgutter#utility#bufnr()
|
||||||
let tracked = getbufvar(bufnr, 'gitgutter_tracked') " i.e. tracked by git
|
let tracked = getbufvar(bufnr, 'gitgutter_tracked') " i.e. tracked by git
|
||||||
if !tracked
|
if !tracked
|
||||||
let cmd .= 'git ls-files --error-unmatch '.gitgutter#utility#shellescape(gitgutter#utility#filename()).' && ('
|
let cmd .= 'git ls-files --error-unmatch '.gitgutter#utility#shellescape(gitgutter#utility#filename())
|
||||||
|
let cmd .= l:fish ? '; and ' : ' && ('
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if a:realtime
|
if a:realtime
|
||||||
@@ -29,7 +37,8 @@ function! gitgutter#diff#run_diff(realtime, use_external_grep)
|
|||||||
let blob_file .= '.'.extension
|
let blob_file .= '.'.extension
|
||||||
let buff_file .= '.'.extension
|
let buff_file .= '.'.extension
|
||||||
endif
|
endif
|
||||||
let cmd .= 'git show '.blob_name.' > '.blob_file.' && '
|
let cmd .= 'git show '.blob_name.' > '.blob_file
|
||||||
|
let cmd .= l:fish ? '; and ' : ' && '
|
||||||
|
|
||||||
" Writing the whole buffer resets the '[ and '] marks and also the
|
" Writing the whole buffer resets the '[ and '] marks and also the
|
||||||
" 'modified' flag (if &cpoptions includes '+'). These are unwanted
|
" 'modified' flag (if &cpoptions includes '+'). These are unwanted
|
||||||
@@ -61,14 +70,16 @@ function! gitgutter#diff#run_diff(realtime, use_external_grep)
|
|||||||
" differences are found. However we want to treat non-matches and
|
" differences are found. However we want to treat non-matches and
|
||||||
" differences as non-erroneous behaviour; so we OR the command with one
|
" differences as non-erroneous behaviour; so we OR the command with one
|
||||||
" which always exits with success (0).
|
" which always exits with success (0).
|
||||||
let cmd.= ' || exit 0'
|
let cmd.= l:fish ? '; or exit 0' : ' || exit 0'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let cmd .= ')'
|
if !l:fish
|
||||||
|
|
||||||
if !tracked
|
|
||||||
let cmd .= ')'
|
let cmd .= ')'
|
||||||
endif
|
|
||||||
|
if !tracked
|
||||||
|
let cmd .= ')'
|
||||||
|
endif
|
||||||
|
end
|
||||||
|
|
||||||
let diff = gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file(cmd))
|
let diff = gitgutter#utility#system(gitgutter#utility#command_in_directory_of_file(cmd))
|
||||||
|
|
||||||
|
|||||||
@@ -131,7 +131,8 @@ function! gitgutter#utility#file_relative_to_repo_root()
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! gitgutter#utility#command_in_directory_of_file(cmd)
|
function! gitgutter#utility#command_in_directory_of_file(cmd)
|
||||||
return 'cd ' . gitgutter#utility#shellescape(gitgutter#utility#directory_of_file()) . ' && ' . a:cmd
|
let l:fish = &shell =~# 'fish'
|
||||||
|
return 'cd ' . gitgutter#utility#shellescape(gitgutter#utility#directory_of_file()) . (l:fish ? '; and ' : ' && ') . a:cmd
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! gitgutter#utility#highlight_name_for_change(text)
|
function! gitgutter#utility#highlight_name_for_change(text)
|
||||||
|
|||||||
Reference in New Issue
Block a user