nvim: lsp/statusline: Add support for LSP progress
Use the same timer loop for updating LSP progress in status line which we use for updating git ahead, behind status.
This commit is contained in:
parent
c1e4b234fb
commit
0265000a4f
2 changed files with 31 additions and 5 deletions
|
@ -1,8 +1,10 @@
|
||||||
local fn = vim.fn
|
local fn = vim.fn
|
||||||
local api = vim.api
|
local api = vim.api
|
||||||
|
|
||||||
local gstatus = { ahead = 0, behind = 0 }
|
local lsp_status = ""
|
||||||
local update_gstatus = function()
|
local gstatus = { ahead = 0, behind = 0 }
|
||||||
|
|
||||||
|
local update_status = function()
|
||||||
local Job = require 'plenary.job'
|
local Job = require 'plenary.job'
|
||||||
Job:new({
|
Job:new({
|
||||||
command = 'git',
|
command = 'git',
|
||||||
|
@ -20,16 +22,19 @@ local update_gstatus = function()
|
||||||
gstatus = { ahead = ahead, behind = behind }
|
gstatus = { ahead = ahead, behind = behind }
|
||||||
end,
|
end,
|
||||||
}):start()
|
}):start()
|
||||||
|
|
||||||
|
if vim.lsp.status then
|
||||||
|
lsp_status = vim.lsp.status()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if _G.Gstatus_timer == nil then
|
if _G.Gstatus_timer == nil then
|
||||||
_G.Gstatus_timer = vim.uv.new_timer()
|
_G.Gstatus_timer = vim.uv.new_timer()
|
||||||
|
_G.Gstatus_timer:start(0, 1000, vim.schedule_wrap(update_status))
|
||||||
else
|
else
|
||||||
_G.Gstatus_timer:stop()
|
_G.Gstatus_timer:stop()
|
||||||
end
|
end
|
||||||
|
|
||||||
_G.Gstatus_timer:start(0, 2000, vim.schedule_wrap(update_gstatus))
|
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
local colors = {
|
local colors = {
|
||||||
|
@ -70,10 +75,12 @@ highlight("DiagnosticsH", colors.orange , colors.bg)
|
||||||
highlight("Location" , colors.yellow , colors.bg)
|
highlight("Location" , colors.yellow , colors.bg)
|
||||||
highlight("Progress" , colors.magenta, colors.bg)
|
highlight("Progress" , colors.magenta, colors.bg)
|
||||||
highlight("WinbarFile" , colors.magenta, colors.bg)
|
highlight("WinbarFile" , colors.magenta, colors.bg)
|
||||||
|
highlight("LspProgress" , colors.orange , colors.bg)
|
||||||
|
|
||||||
M.trunc_width = setmetatable({
|
M.trunc_width = setmetatable({
|
||||||
git_status = 60,
|
|
||||||
filename = 140,
|
filename = 140,
|
||||||
|
git_status = 60,
|
||||||
|
lsp_status = 80,
|
||||||
}, {
|
}, {
|
||||||
__index = function()
|
__index = function()
|
||||||
return 80
|
return 80
|
||||||
|
@ -204,12 +211,26 @@ M.git_ahead_behind_status = function()
|
||||||
or ""
|
or ""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
M.get_lsp_status = function(self)
|
||||||
|
local trunc_width = self.trunc_width.lsp_status
|
||||||
|
if self:is_truncated(trunc_width) then
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
|
||||||
|
if vim.lsp.status then
|
||||||
|
return string.format(" %s%s", '%#LspProgress#', string.sub(lsp_status, 1, trunc_width))
|
||||||
|
end
|
||||||
|
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
|
||||||
M.set_active = function(self)
|
M.set_active = function(self)
|
||||||
return table.concat {
|
return table.concat {
|
||||||
self:get_filename(),
|
self:get_filename(),
|
||||||
self:get_git_status(),
|
self:get_git_status(),
|
||||||
self:git_ahead_behind_status(),
|
self:git_ahead_behind_status(),
|
||||||
"%=",
|
"%=",
|
||||||
|
self:get_lsp_status(),
|
||||||
self:diagnostic_status(),
|
self:diagnostic_status(),
|
||||||
self:get_line_col(),
|
self:get_line_col(),
|
||||||
self:progress(),
|
self:progress(),
|
||||||
|
|
|
@ -233,3 +233,8 @@ vim.api.nvim_create_autocmd("LspDetach", {
|
||||||
client_custom_cleanup(client)
|
client_custom_cleanup(client)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("LspProgress", {
|
||||||
|
group = lsp_augroup_id,
|
||||||
|
command = "redrawstatus"
|
||||||
|
})
|
||||||
|
|
Loading…
Reference in a new issue