let s:uiready = v:false

function p#ddu#ff#filter(input = v:null)
  if has('nvim')
    autocmd vimrc CmdlineEnter @ ++once call cmdline#enable()
  endif
  let params = a:input is v:null ? {} : {'input': a:input}
  call ddu#ui#do_action('openFilterWindow', params)
endfunction

function p#ddu#ff#wait(startfilter = v:false)
  let s:uiready = v:false
  augroup p#ddu#ff#wait
    autocmd!
    autocmd User Ddu:uiReady let s:uiready = v:true
  augroup END
  let chars = ''
  let startfilter = a:startfilter
  while v:true
    let char = getcharstr(0)
    if !startfilter && char ==# 'i'
      let startfilter = v:true
      let char = ''
    endif
    let chars ..= char
    sleep 1m
    if s:uiready
      break
    endif
  endwhile
  if startfilter
    " let chars = "\<Cmd>call ddu#ui#do_action('openFilterWindow')\<CR>" .. chars
    " 詰まってる処理の後に差し込む
    call timer_start(1, {->p#ddu#ff#filter(chars)})
  else
    call feedkeys(chars, 'it')
  endif
endfunction

function p#ddu#ff#start(options, startfilter = v:false)
  call p#ddu#wait()
  call ddu#start(a:options)
  call p#ddu#ff#wait(a:startfilter)
endfunction