From c6b59d8ad7178b5873b3d71de9ff21652f05ec3c Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Mon, 8 Aug 2022 23:47:20 +0900 Subject: [PATCH] [GFiles] fzf#vim#gitfiles should respect 'dir' https://github.com/junegunn/fzf.vim/pull/1290#issuecomment-1207832597 --- autoload/fzf/vim.vim | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index d82e370..9a641a4 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -603,14 +603,15 @@ endfunction " GFiles[?] " ------------------------------------------------------------------ -function! s:get_git_root() - let bufdir = substitute(split(expand('%:p:h'), '[/\\]\.git\([/\\]\|$\)')[0], '^fugitive://', '', '') - let root = systemlist('git -C ' . fzf#shellescape(bufdir) . ' rev-parse --show-toplevel')[0] - return v:shell_error ? '' : root +function! s:get_git_root(dir) + let dir = len(a:dir) ? a:dir : substitute(split(expand('%:p:h'), '[/\\]\.git\([/\\]\|$\)')[0], '^fugitive://', '', '') + let root = systemlist('git -C ' . fzf#shellescape(dir) . ' rev-parse --show-toplevel')[0] + return v:shell_error ? '' : (len(a:dir) ? fnamemodify(a:dir, ':p') : root) endfunction function! fzf#vim#gitfiles(args, ...) - let root = s:get_git_root() + let dir = get(get(a:, 1, {}), 'dir', '') + let root = s:get_git_root(dir) if empty(root) return s:warn('Not in git repo') endif @@ -618,7 +619,6 @@ function! fzf#vim#gitfiles(args, ...) if a:args != '?' return s:fzf('gfiles', { \ 'source': prefix . 'ls-files '.a:args.(s:is_win ? '' : ' | uniq'), - \ 'dir': root, \ 'options': '-m --prompt "GitFiles> "' \}, a:000) endif @@ -635,7 +635,6 @@ function! fzf#vim#gitfiles(args, ...) \ s:bin.preview) let wrapped = fzf#wrap({ \ 'source': prefix . '-c color.status=always status --short --untracked-files=all', - \ 'dir': root, \ 'options': ['--ansi', '--multi', '--nth', '2..,..', '--tiebreak=index', '--prompt', 'GitFiles?> ', '--preview', preview] \}) call s:remove_layout(wrapped) @@ -1189,7 +1188,7 @@ function! s:commits_sink(lines) endfunction function! s:commits(range, buffer_local, args) - let s:git_root = s:get_git_root() + let s:git_root = s:get_git_root('') if empty(s:git_root) return s:warn('Not in git repository') endif