diff --git a/lua/plugins/configs/statusline.lua b/lua/plugins/configs/statusline.lua index 9f700a5..4143f82 100644 --- a/lua/plugins/configs/statusline.lua +++ b/lua/plugins/configs/statusline.lua @@ -1,3 +1,25 @@ +local function LSP_progress() + if not rawget(vim, "lsp") then + return "" + end + + local Lsp = vim.lsp.util.get_progress_messages()[1] + + if vim.o.columns < 120 or not Lsp then + return "" + end + + local msg = Lsp.message or "" + local percentage = Lsp.percentage or 0 + local title = Lsp.title or "" + local spinners = { "", "" } + local ms = vim.loop.hrtime() / 1000000 + local frame = math.floor(ms / 120) % #spinners + local content = string.format(" %%<%s %s %s (%s%%%%) ", spinners[frame + 1], title, msg, percentage) + + return ("%#St_LspProgress#" .. content) or "" +end + require('lualine').setup { options = { icons_enabled = true, @@ -23,7 +45,7 @@ require('lualine').setup { lualine_c = { { "filename", path = 1, symbols = { modified = "  ", readonly = "", unnamed = "" } } }, - lualine_x = { 'encoding', 'fileformat', 'filetype' }, + lualine_x = { LSP_progress, 'encoding', 'fileformat', 'filetype' }, lualine_y = { 'progress' }, lualine_z = { 'location' } },