" headlessでdenops動かすのが困難なので裏でターミナル起こす
let s:id = -1

if has('nvim')
  let s:finish = v:true

  function s:wait()
    if !s:finish
      echo 'wait makestate'
      redraw
      call wait(-1, 's:finish', 10)
    endif
  endfunction

  augroup vimrc_dpp_makestate
    autocmd VimLeavePre * call s:wait()
  augroup END

  function vimrc#dpp#makestate_job()
    call jobstop(s:id)
    let s:finish = v:false
    let s:id = jobstart('~/.vim/f'->expand(), #{
      \ env: #{
        \ VIM: '',
        \ VIMRUNTIME: '',
      \ },
      \ on_exit: {job, status -> [
        \ execute('echomsg "makestate end: " .. status', ''),
        \ execute('if status == 0 | let s:finish = v:true | endif', ''),
      \ ]},
      \ pty: v:true,
    \ })
  endfunction
else
  " Vimだとターミナルあると終了できないので待たなくてもいい
  function vimrc#dpp#makestate_job()
    silent! call job_stop(s:id, 'kill')
    let s:id = term_start('~/.vim/f'->expand(), #{
      \ env: #{
        \ VIM: '',
        \ VIMRUNTIME: '',
      \ },
      \ exit_cb: {job, status -> [
        \ execute('echomsg "makestate end: " .. status', ''),
      \ ]},
      \ hidden: v:true,
    \ })
  endfunction
endif