function! devicons#plugins#unite#init() abort
  let s:filters = {
    \ 'name': 'devicons_unite_converter'
  \ }

  function! s:filters.filter(candidates, context) abort
    for candidate in a:candidates

      if has_key(candidate, 'action__buffer_nr')
        let bufname = bufname(candidate.action__buffer_nr)
        let filename = fnamemodify(bufname, ':p:t')
        let path = fnamemodify(bufname, ':p:h')
      elseif has_key(candidate, 'word') && has_key(candidate, 'action__path')
        let path = candidate.action__path
        let filename = candidate.word
      endif

      let icon = WebDevIconsGetFileTypeSymbol(filename, isdirectory(filename))

      " prevent filenames of buffers getting 'lost'
      if filename != path
        let path = printf('%s', filename)
      endif

      " Customize output format.
      let candidate.abbr = printf('%s %s', icon, path)
    endfor
    return a:candidates
  endfunction

  call unite#define_filter(s:filters)
  unlet s:filters

  call unite#custom#source('file,file_rec,buffer,file_rec/async,file_rec/neovim,file_rec/neovim2,file_rec/git', 'converters', 'devicons_unite_converter')
endfunction

" vim: tabstop=2 softtabstop=2 shiftwidth=2 expandtab:
