diff --git a/autoload/fzf/vim.vim b/autoload/fzf/vim.vim index 316e744..6ba8e19 100644 --- a/autoload/fzf/vim.vim +++ b/autoload/fzf/vim.vim @@ -115,6 +115,14 @@ function! s:remove_layout(opts) return a:opts endfunction +function! s:reverse_list(opts) + let tokens = map(split($FZF_DEFAULT_OPTS, '[^a-z-]'), 'substitute(v:val, "^--", "", "")') + if index(tokens, 'reverse') < 0 + return extend(['--layout=reverse-list'], a:opts) + endif + return a:opts +endfunction + function! s:wrap(name, opts, bang) " fzf#wrap does not append --expect if sink or sink* is found let opts = copy(a:opts) @@ -377,7 +385,7 @@ function! fzf#vim#lines(...) return s:fzf('lines', { \ 'source': lines, \ 'sink*': s:function('s:line_handler'), - \ 'options': ['+m', '--tiebreak=index', '--prompt', 'Lines> ', '--ansi', '--extended', '--nth='.nth.'..', '--layout=reverse-list', '--tabstop=1', '--query', query] + \ 'options': s:reverse_list(['+m', '--tiebreak=index', '--prompt', 'Lines> ', '--ansi', '--extended', '--nth='.nth.'..', '--tabstop=1', '--query', query]) \}, args) endfunction @@ -422,7 +430,7 @@ function! fzf#vim#buffer_lines(...) return s:fzf('blines', { \ 'source': s:buffer_lines(query), \ 'sink*': s:function('s:buffer_line_handler'), - \ 'options': ['+m', '--tiebreak=index', '--multi', '--prompt', 'BLines> ', '--ansi', '--extended', '--nth=2..', '--layout=reverse-list', '--tabstop=1'] + \ 'options': s:reverse_list(['+m', '--tiebreak=index', '--multi', '--prompt', 'BLines> ', '--ansi', '--extended', '--nth=2..', '--tabstop=1']) \}, args) endfunction @@ -782,7 +790,7 @@ function! fzf#vim#buffer_tags(query, ...) return s:fzf('btags', { \ 'source': s:btags_source(tag_cmds), \ 'sink*': s:function('s:btags_sink'), - \ 'options': ['--layout=reverse-list', '-m', '-d', '\t', '--with-nth', '1,4..', '-n', '1', '--prompt', 'BTags> ', '--query', a:query]}, args) + \ 'options': s:reverse_list(['-m', '-d', '\t', '--with-nth', '1,4..', '-n', '1', '--prompt', 'BTags> ', '--query', a:query])}, args) catch return s:warn(v:exception) endtry @@ -1127,10 +1135,10 @@ function! s:commits(buffer_local, args) let options = { \ 'source': source, \ 'sink*': s:function('s:commits_sink'), - \ 'options': ['--ansi', '--multi', '--tiebreak=index', '--layout=reverse-list', + \ 'options': s:reverse_list(['--ansi', '--multi', '--tiebreak=index', \ '--inline-info', '--prompt', command.'> ', '--bind=ctrl-s:toggle-sort', \ '--header', ':: Press '.s:magenta('CTRL-S', 'Special').' to toggle sort, '.s:magenta('CTRL-Y', 'Special').' to yank commit hashes', - \ '--expect=ctrl-y,'.expect_keys] + \ '--expect=ctrl-y,'.expect_keys]) \ } if a:buffer_local