vim9script # Popup documentation of specified object under the cursor # Requires github.com/zmb3/gogetdoc in the $PATH export def Status(): string if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return "GD" | endif return "" enddef export def Got(ch: channel) var msgs: list while ch_status(ch) == "buffered" msgs = add(msgs, ch_read(ch)) endwhile if exists("b:godocid") | popup_close(b:godocid) | endif if len(msgs) == 0 echohl WarningMsg | echomsg "No go doc" | echohl None return endif msgs = msgs[2 :] b:godocid = popup_atcursor(msgs[2 : -2], {"wrap": 0, "title": msgs[0], "move": "word"}) enddef export def Do() if exists("b:gogetdoc_job") && job_status(b:gogetdoc_job) == "run" | return | endif var pos = line2byte(line(".")) + col(".") - 2 var cmdline = "gogetdoc -pos " .. expand("%p") .. ":#" .. pos echomsg cmdline b:gogetdoc_job = job_start(cmdline, { "in_mode": "nl", "err_io": "null", "close_cb": "go#getdoc#Got", }) enddef