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 -- Lsp server name . local function lsp_server() local msg = 'lsp' local buf_ft = vim.api.nvim_buf_get_option(0, 'filetype') local clients = vim.lsp.get_active_clients() if next(clients) == nil then return msg end for _, client in ipairs(clients) do local filetypes = client.config.filetypes if filetypes and vim.fn.index(filetypes, buf_ft) ~= -1 then return client.name end end return msg end require('lualine').setup { options = { icons_enabled = true, theme = 'auto', component_separators = { left = '', right = '' }, section_separators = { left = '', right = '' }, disabled_filetypes = { statusline = {}, winbar = {}, }, ignore_focus = {}, always_divide_middle = true, globalstatus = false, refresh = { statusline = 1000, tabline = 1000, winbar = 1000, } }, sections = { lualine_a = { 'mode' }, lualine_b = { 'branch', 'diff', 'diagnostics' }, lualine_c = { { lsp_server, icon = ' ', color = { fg = '#ffffff', gui = 'bold' } }, { "filename", path = 1, symbols = { modified = "  ", readonly = "", unnamed = "" } } }, lualine_x = { LSP_progress, 'encoding', 'fileformat', 'filetype' }, lualine_y = { 'progress' }, lualine_z = { 'location' } }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = { 'filename' }, lualine_x = { 'location' }, lualine_y = {}, lualine_z = {} }, tabline = {}, winbar = {}, inactive_winbar = {}, extensions = {} }