" This callback will be executed when the entire command is completed
function! BackgroundCommandClose(channel)
    " Read the output from the command into the quickfix window
    unlet g:backgroundCommandOutput
endfunction

function! RunBackgroundCommand(command)
    " Make sure we're running VIM version 8 or higher.
    if v:version < 800
        echoerr 'RunBackgroundCommand requires VIM version 8 or higher'
        return
    endif
    if exists('g:backgroundCommandOutput')
        echo 'Already running task in background'
    else
        echo 'Running task in background'
        " Launch the job.
        " Notice that we're only capturing out, and not err here. This is because, for some reason, the callback
        " will not actually get hit if we write err out to the same file. Not sure if I'm doing this wrong or?
        let g:backgroundCommandOutput = tempname()
        call job_start(a:command, {'close_cb': 'BackgroundCommandClose', 'out_io': 'file', 'out_name': g:backgroundCommandOutput})
    endif
endfunction

" So we can use :BackgroundCommand to call our function.
command! -nargs=+ -complete=shellcmd RunBackgroundCommand call RunBackgroundCommand(<q-args>)

function! GetCWD()
    let l:cwd = system('pwd | rev |cut -d- -f1 | rev | xargs | sed "s/[[:space:]]/\\\\&/g\"')
    echo l:cwd
    call setline('.', l:cwd)
    unlet l:cwd
endfunction
