X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=vim%2F.vim%2Fautoload%2Fgo%2Fgetdoc.vim;fp=vim%2F.vim%2Fautoload%2Fgo%2Fgetdoc.vim;h=922c9cdb8d5305f904b9d80b92861aa8454e38e5;hb=1280549be01e3ce72d9e0aeef6254a1ff14a25a3;hp=0000000000000000000000000000000000000000;hpb=86cacc081de452eb66d50f13261310b07f8ca2d4;p=dotfiles.git diff --git a/vim/.vim/autoload/go/getdoc.vim b/vim/.vim/autoload/go/getdoc.vim new file mode 100644 index 0000000..922c9cd --- /dev/null +++ b/vim/.vim/autoload/go/getdoc.vim @@ -0,0 +1,34 @@ +" Popup documentation of specified object under the cursor +" Requires github.com/zmb3/gogetdoc in the $PATH + +function! go#getdoc#status() + if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return "GD" | endif + return "" +endfunction + +function! go#getdoc#got(ch) abort + let msgs = [] + while ch_status(a:ch) == "buffered" + let msgs = add(msgs, ch_read(a:ch)) + endwhile + if exists("b:godocid") | call popup_close(b:godocid) | endif + if len(msgs) == 0 + echohl WarningMsg | echomsg "No go doc" | echohl None + return + endif + let msgs = msgs[2:] + let b:godocid = popup_atcursor(msgs[2:-2], + \ {"wrap": 0, "title": msgs[0], "move": "word"}) +endfunction + +function! go#getdoc#do() abort + if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return | endif + let pos = line2byte(line(".")) + col(".") - 2 + let cmdline = "gogetdoc -pos " . expand("%p") . ":#" . pos + echomsg cmdline + let b:gogetdoc_job = job_start(cmdline, { + \"in_mode": "nl", + \"err_io": "null", + \"close_cb": "go#getdoc#got", + \}) +endfunction