local handlers = {} handlers["initialize"] = function(_, callback) callback(nil, { capabilities = { hoverProvider = true, }, serverInfo = { name = "testlsp", version = "0.0.1", }, }) end handlers["textDocument/hover"] = function(_, callback) local serial = vim.fn.expand("") -- cheating! local command_format = "gxctl --config=/home/danieln/.gxctl/config.yaml --profile='gridx' get device -S %s -o json" vim.system( { "fish", "-c", command_format:format(serial), }, vim.schedule_wrap(function(out) local contents if out.code ~= 0 then contents = "fetch failed" else local ok, decoded = pcall(vim.json.decode, out.stdout) if ok and decoded and decoded[1] then contents = decoded[1].status.info.publicIP .. ", last seen: " .. decoded[1].status.lastHeartbeat else contents = "parse failed" end end callback(nil, { contents = contents }) end) ) end vim.api.nvim_create_autocmd("FileType", { pattern = { "markdown" }, callback = function(ev) vim.lsp.start({ name = "testlsp", cmd = function() return { request = function(method, params, callback) if handlers[method] then handlers[method](params, callback) end end, notify = function() end, is_closing = function() end, terminate = function() end, } end, }, { bufnr = ev.buf, silent = false }) end, })