Neovim LSP Progress bar in Ghostty

In Neovim, having an autocmd which broadcasts LspProgresss through nvim_echo() will emit and print a progress message from the language server. If using the experimental _core.ui2, interface the progress message will get printed in the message window, similar to what fidget.nvim shows, but done natively.

vim.api.nvim_create_autocmd("LspProgress", {
  callback = function(ev)
    local value = ev.data.params.value or {}
    local msg = value.message or "done"

    -- rust-analyzer in particular sends extremely long messages
    if #msg > 40 then
      msg = msg:sub(1, 37) .. "..."
    end

    vim.api.nvim_echo({{msg}}, false, {
      id     = "lsp",
      kind   = "progress",
      title  = value.title,
      status = value.kind ~= "end" and "running" or "success",
      percent = value.percentage,
    })
  end,
})

Ghostty has a native GUI for showing progress bars reported by the OSC 9;4 escape sequence. What's cool is that it picks up progress messages emitted by nvim_echo() and integrates it into its progress bar:

Tags: neovim

Homepage