49 lines
1.2 KiB
Lua
49 lines
1.2 KiB
Lua
-- Copyright (c) 2020-2021 shadmansaleh
|
|
-- MIT license, see LICENSE for more details.
|
|
local M = require('lualine.component'):extend()
|
|
|
|
function M:update_status()
|
|
local component = self.options[1]
|
|
local ok, status
|
|
if self.options.type == nil then
|
|
ok, status = pcall(M.lua_eval, component)
|
|
if not ok then
|
|
status = M.vim_function(component)
|
|
end
|
|
else
|
|
if self.options.type == 'lua_expr' then
|
|
ok, status = pcall(M.lua_eval, component)
|
|
if not ok then
|
|
status = nil
|
|
end
|
|
elseif self.options.type == 'vim_fun' then
|
|
status = M.vim_function(component)
|
|
end
|
|
end
|
|
return status
|
|
end
|
|
|
|
---evaluate the lua code and return it's result as string
|
|
---@param code string
|
|
---@return string
|
|
function M.lua_eval(code)
|
|
local result = loadstring('return ' .. code)()
|
|
assert(result, 'String expected got nil')
|
|
return tostring(result)
|
|
end
|
|
|
|
---call vim function (name) and return it's result as string
|
|
---@param name string
|
|
---@return string
|
|
function M.vim_function(name)
|
|
-- vim function component
|
|
local ok, return_val = pcall(vim.api.nvim_call_function, name, {})
|
|
if not ok then
|
|
return ''
|
|
end -- function call failed
|
|
ok, return_val = pcall(tostring, return_val)
|
|
return ok and return_val or ''
|
|
end
|
|
|
|
return M
|