vim - How to query the pwd of a terminal buffer?

Viewed 136

Assuming I have a terminal buffer open that's cd'ed to ~/foo/bar directory, how can I capture that directory to use in other vimscripts?

1 Answers

@phd's answer helped me find a solution

function s:get_closest_terminal()
    " Reference: https://stackoverflow.com/a/27232550/3626104
    let l:buffers = sort(tabpagebuflist('%'), 'n')

    for l:number in reverse(l:buffers)
        let l:type = getbufvar(l:number, '&buftype', '')

        if l:type == "terminal"
            return l:number
        endif
    endfor

    return -1
endfunction


function s:get_current_directory()
    let l:terminal_buffer = s:get_closest_terminal()

    if l:terminal_buffer == -1
        echoerr "No directory could be found"

        return ""
    endif

    " Example: "hostname@localhost: /home/username"
    let l:title = term_gettitle(l:terminal_buffer)

    " Example: "/home/username"
    return substitute(l:title, "^.*: ", "", "")
endfunction
Related