Added other sources for component configuration (#53)

This commit is contained in:
Shadman 2021-02-10 16:40:29 +06:00 committed by GitHub
parent 6687c9be63
commit 8a4baa804b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 93 additions and 5 deletions

View File

@ -157,6 +157,30 @@ lualine.sections.lualine_a = { hello }
</details>
<details>
<summary><b>Using vim functions as lualine component</b></summary>
You can use vim functions as a lualine component
```
lualine.sections.lualine_b = { 'FugitiveHead' }
```
</details>
<details>
<summary><b>Using variables as lualine component</b></summary>
You can use variables from vim and lua globals as a lualine component
Variables from g:, v:, t:, w:, b:, o, go:, vo:, to:, wo:, bo: scopes
can be used. Scopes ending with o are options usualy accessed with `&` in vimscript
```
lualine.sections.lualine_b = { 'g:coc_status', 'bo:filetype' }
```
</details>
### Loading plugin extensions
Lualine extensions change statusline appearance for a window/buffer with a plugin loaded e.g. [junegunn/fzf.vim](https://github.com/junegunn/fzf.vim)

View File

@ -34,10 +34,11 @@ CONTENTS *lualline-contents*
1.3.2. Setting a theme.........................|lualine-setting_a_theme|
1.3.3. Changing separator...................|lualine-changing_separator|
1.3.4. Changing components.................|lualine-changing_components|
1.3.5. Loading plugin extensions.....|lualine-loading_plugin_extensions|
1.3.6 Config examples.........................|lualine-config_examples|
1.3.6.1. Packer.nvim......|lualine-config_example_using_packer.nvim|
1.3.6.2 VIML example.......|lualine-full_config_example_inside_viml|
1.3.5. Building Custom components............|lualine-custom_components|
1.3.6. Loading plugin extensions.....|lualine-loading_plugin_extensions|
1.3.7 Config examples.........................|lualine-config_examples|
1.3.7.1. Packer.nvim......|lualine-config_example_using_packer.nvim|
1.3.7.2 VIML example.......|lualine-full_config_example_inside_viml|
1.4. Contributing.....................................|lualine-contributing|
1.5. Screenshots.......................................|lualine-screenshots|
@ -162,6 +163,8 @@ Available components~
* signify
--------------------------------------------------------------------------------
BUILDING YOUR COMPONENTS *lualine-custom_components*
Using custom functions as lualine component~
@ -173,6 +176,25 @@ You can define a custom function as a lualine component
end
lualine.sections.lualine_a = { hello }
<
Using vim functions as lualine component~
You can use vim functions as a lualine component
>
lualine.sections.lualine_b = { 'FugitiveHead' }
<
Using variables as lualine component~
You can use variables from vim and lua globals as a lualine component
Variables from g:, v:, t:, w:, b:, o, go:, vo:, to:, wo:, bo: scopes
can be used. Scopes ending with o are options usualy accessed with `&` in vimscript
>
lualine.sections.lualine_b = { 'g:coc_status', 'bo:filetype' }
lualine.sections.lualine_x = { 'vim.bo.fileencoding' }
<
--------------------------------------------------------------------------------
LOADING PLUGIN EXTENSIONS *lualine-loading_plugin_extensions*

View File

@ -4,10 +4,12 @@ lualine-changing_separator lualine.txt /*lualine-changing_separator*
lualine-config_example_using_packer.nvim lualine.txt /*lualine-config_example_using_packer.nvim*
lualine-config_examples lualine.txt /*lualine-config_examples*
lualine-contributing lualine.txt /*lualine-contributing*
lualine-custom_components lualine.txt /*lualine-custom_components*
lualine-full_config_example_inside_viml lualine.txt /*lualine-full_config_example_inside_viml*
lualine-installation lualine.txt /*lualine-installation*
lualine-loading_plugin_extensions lualine.txt /*lualine-loading_plugin_extensions*
lualine-lualine.nvim lualine.txt /*lualine-lualine.nvim*
lualine-nvim lualine.txt /*lualine-nvim*
lualine-packer.nvim lualine.txt /*lualine-packer.nvim*
lualine-performance_comparism lualine.txt /*lualine-performance_comparism*
lualine-screenshots lualine.txt /*lualine-screenshots*

View File

@ -29,12 +29,52 @@ M.inactive_sections = {
M.extensions = {
}
local function load_special_components(component)
return function()
-- precedence lualine_component > vim_var > lua_var > vim_function
if component:find('[gvtwb]?o?:') == 1 then
-- vim veriable component
-- accepts g:, v:, t:, w:, b:, o, go:, vo:, to:, wo:, bo:
-- filters g portion from g:var
local scope = component:match('[gvtwb]?o?')
-- filters var portion from g:var
-- For some reason overwriting component var from outer scope causes the
-- component not to work . So creating a new local name component to use:/
local component = component:sub(#scope + 2, #component)
-- Displays nothing when veriable aren't present
local return_val = vim[scope][component]
if return_val == nil then return '' end
local ok
ok, return_val = pcall(tostring, return_val)
if ok then return return_val end
return ''
elseif loadstring(string.format('return %s ~= nil', component)) and
loadstring(string.format([[return %s ~= nil]], component))() then
-- lua veriable component
return loadstring(string.format([[
local ok, return_val = pcall(tostring, %s)
if ok then return return_val end
return '']], component))()
else
-- vim function component
local ok, return_val = pcall(vim.fn[component])
if not ok then return '' end -- function call failed
ok, return_val = pcall(tostring, return_val)
if ok then return return_val else return '' end
end
end
end
local function load_components()
local function load_sections(sections)
for _, section in pairs(sections) do
for index, component in pairs(section) do
if type(component) == 'string' then
section[index] = require('lualine.components.' .. component)
local ok,loaded_component = pcall(require, 'lualine.components.' .. component)
if not ok then
loaded_component = load_special_components(component)
end
section[index] = loaded_component
end
end
end