Feat: add configuration in viml and status function (#114)

This commit is contained in:
Shadman 2021-03-02 18:58:34 +06:00 committed by GitHub
parent e4723362c4
commit 8624f7c14e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 169 additions and 143 deletions

View File

@ -58,6 +58,9 @@ use {
``` ```
## Usage and customization ## Usage and customization
Lualine can be configured with both lua and vimscript.
Click [here](#lua-config-example) if you want to see a config example in lua and [here](#vimscript-config-example) if you want to see a config example in vimscript.
Lualine has sections as shown below. Lualine has sections as shown below.
``` ```
@ -69,8 +72,6 @@ Lualine has sections as shown below.
Each sections holds it's components e.g. current vim's mode. Each sections holds it's components e.g. current vim's mode.
Colorscheme of sections is mirrored, meaning section `A` will have the same colorscheme as section `Z` etc. Colorscheme of sections is mirrored, meaning section `A` will have the same colorscheme as section `Z` etc.
Configuration is currently limited to lua, please use lua block or a separate lua file to configure lualine.
### Starting lualine ### Starting lualine
```lua ```lua
local lualine = require('lualine') local lualine = require('lualine')
@ -284,7 +285,7 @@ lualine.extensions = { 'fzf' }
All available extensions are listed in [EXTENSIONS.md](./EXTENSIONS.md) All available extensions are listed in [EXTENSIONS.md](./EXTENSIONS.md)
### Full config example using [packer.nvim](https://github.com/wbthomason/packer.nvim) ### Lua config example
<details> <details>
<summary><b>packer config</b></summary> <summary><b>packer config</b></summary>
@ -294,69 +295,68 @@ All available extensions are listed in [EXTENSIONS.md](./EXTENSIONS.md)
'hoob3rt/lualine.nvim', 'hoob3rt/lualine.nvim',
requires = {'kyazdani42/nvim-web-devicons', opt = true}, requires = {'kyazdani42/nvim-web-devicons', opt = true},
config = function() config = function()
local lualine = require('lualine') require('lualine').status{
lualine.options = { options = {
theme = 'gruvbox', theme = 'gruvbox',
section_separators = {'', ''}, section_separators = {'', ''},
component_separators = {'', ''}, component_separators = {'', ''},
icons_enabled = true, icons_enabled = true,
} },
lualine.sections = { sections = {
lualine_a = { 'mode' }, lualine_a = { {'mode', upper = true} },
lualine_b = { 'branch' }, lualine_b = { {'branch', icon = ''} },
lualine_c = { 'filename' }, lualine_c = { {'filename', file_status = true} },
lualine_x = { 'encoding', 'fileformat', 'filetype' }, lualine_x = { 'encoding', 'fileformat', 'filetype' },
lualine_y = { 'progress' }, lualine_y = { 'progress' },
lualine_z = { 'location' }, lualine_z = { 'location' },
} },
lualine.inactive_sections = { inactive_sections = {
lualine_a = { }, lualine_a = { },
lualine_b = { }, lualine_b = { },
lualine_c = { 'filename' }, lualine_c = { 'filename' },
lualine_x = { 'location' }, lualine_x = { 'location' },
lualine_y = { }, lualine_y = { },
lualine_z = { } lualine_z = { }
},
extensions = { 'fzf' }
} }
lualine.extensions = { 'fzf' }
lualine.status()
end end
} }
``` ```
</details> </details>
### Full config example inside `.vimrc`/`init.vim` ### Vimscript config example
<details> <details>
<summary><b>vimrc config</b></summary> <summary><b>vimrc config</b></summary>
```vim ```vim
lua << EOF let g:lualine = {
local lualine = require('lualine') \'options' : {
lualine.options = { \ 'theme' : 'gruvbox',
theme = 'gruvbox', \ 'section_separators' : ['', ''],
section_separators = {'', ''}, \ 'component_separators' : ['', ''],
component_separators = {'', ''}, \ 'icons_enabled' : v:true,
icons_enabled = true, \},
} \'sections' : {
lualine.sections = { \ 'lualine_a' : [ ['mode', {'upper': v:true,},], ],
lualine_a = { 'mode' }, \ 'lualine_b' : [ ['branch', {'icon': '',}, ], ],
lualine_b = { 'branch' }, \ 'lualine_c' : [ ['filename', {'file_status': v:true,},], ],
lualine_c = { 'filename' }, \ 'lualine_x' : [ 'encoding', 'fileformat', 'filetype' ],
lualine_x = { 'encoding', 'fileformat', 'filetype' }, \ 'lualine_y' : [ 'progress' ],
lualine_y = { 'progress' }, \ 'lualine_z' : [ 'location' ],
lualine_z = { 'location' }, \},
} \'inactive_sections' : {
lualine.inactive_sections = { \ 'lualine_a' : [ ],
lualine_a = { }, \ 'lualine_b' : [ ],
lualine_b = { }, \ 'lualine_c' : [ 'filename' ],
lualine_c = { 'filename' }, \ 'lualine_x' : [ 'location' ],
lualine_x = { 'location' }, \ 'lualine_y' : [ ],
lualine_y = { }, \ 'lualine_z' : [ ],
lualine_z = { } \},
} \'extensions' : [ 'fzf' ],
lualine.extensions = { 'fzf' } \}
lualine.status() lua require("lualine").status()
EOF
``` ```
</details> </details>

View File

@ -404,31 +404,31 @@ packer config
'hoob3rt/lualine.nvim', 'hoob3rt/lualine.nvim',
requires = {'kyazdani42/nvim-web-devicons', opt = true}, requires = {'kyazdani42/nvim-web-devicons', opt = true},
config = function() config = function()
local lualine = require('lualine') require('lualine').status{
lualine.options = { options = {
theme = 'gruvbox', theme = 'gruvbox',
section_separators = {'', ''}, section_separators = {'', ''},
component_separators = {'', ''}, component_separators = {'', ''},
icons_enabled = true, icons_enabled = true,
} },
lualine.sections = { sections = {
lualine_a = { 'mode' }, lualine_a = { {'mode', upper = true} },
lualine_b = { 'branch' }, lualine_b = { {'branch', icon = ''} },
lualine_c = { 'filename' }, lualine_c = { {'filename', file_status = true} },
lualine_x = { 'encoding', 'fileformat', 'filetype' }, lualine_x = { 'encoding', 'fileformat', 'filetype' },
lualine_y = { 'progress' }, lualine_y = { 'progress' },
lualine_z = { 'location' }, lualine_z = { 'location' },
} },
lualine.inactive_sections = { inactive_sections = {
lualine_a = { }, lualine_a = { },
lualine_b = { }, lualine_b = { },
lualine_c = { 'filename' }, lualine_c = { 'filename' },
lualine_x = { 'location' }, lualine_x = { 'location' },
lualine_y = { }, lualine_y = { },
lualine_z = { } lualine_z = { }
},
extensions = { 'fzf' }
} }
lualine.extensions = { 'fzf' }
lualine.status()
end end
} }
< <
@ -440,33 +440,32 @@ FULL CONFIG EXAMPLE INSIDE VIML *lualine_full_config_example_inside_viml*
vimrc config vimrc config
> >
lua << EOF let g:lualine = {
local lualine = require('lualine') \'options' : {
lualine.options = { \ 'theme' : 'gruvbox',
theme = 'gruvbox', \ 'section_separators' : ['', ''],
section_separators = {'', ''}, \ 'component_separators' : ['', ''],
component_separators = {'', ''}, \ 'icons_enabled' : v:true,
icons_enabled = true, \},
} \'sections' : {
lualine.sections = { \ 'lualine_a' : [ ['mode', {'upper': v:true,},], ],
lualine_a = { 'mode' }, \ 'lualine_b' : [ ['branch', {'icon': '',}, ], ],
lualine_b = { 'branch' }, \ 'lualine_c' : [ ['filename', {'file_status': v:true,},], ],
lualine_c = { 'filename' }, \ 'lualine_x' : [ 'encoding', 'fileformat', 'filetype' ],
lualine_x = { 'encoding', 'fileformat', 'filetype' }, \ 'lualine_y' : [ 'progress' ],
lualine_y = { 'progress' }, \ 'lualine_z' : [ 'location' ],
lualine_z = { 'location' }, \},
} \'inactive_sections' : {
lualine.inactive_sections = { \ 'lualine_a' : [ ],
lualine_a = { }, \ 'lualine_b' : [ ],
lualine_b = { }, \ 'lualine_c' : [ 'filename' ],
lualine_c = { 'filename' }, \ 'lualine_x' : [ 'location' ],
lualine_x = { 'location' }, \ 'lualine_y' : [ ],
lualine_y = { }, \ 'lualine_z' : [ ],
lualine_z = { } \},
} \'extensions' : [ 'fzf' ],
lualine.extensions = { 'fzf' } \}
lualine.status() lua require("lualine").status()
EOF
< <
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

@ -35,8 +35,33 @@ M.inactive_sections = {
lualine_z = { } lualine_z = { }
} }
M.extensions = { M.extensions = { }
}
local function apply_configuration(config_table)
if not config_table then return end
local function parse_sections(section_group_name)
if not config_table[section_group_name] then return end
for section_name, section in pairs(config_table[section_group_name]) do
M[section_group_name][section_name] = config_table[section_group_name][section_name]
if type(section) == 'table' then
for _, component in pairs(section) do
if type(component) == 'table' and type(component[2]) == 'table' then
local options = component[2]
component[2] = nil
for key, val in pairs(options) do
component[key] = val
end
end
end
end
end
end
parse_sections('options')
parse_sections('sections')
parse_sections('inactive_sections')
if config_table.extensions then M.extensions = config_table.extensions end
end
local function check_single_separator() local function check_single_separator()
local compoennt_separator = M.options.component_separators local compoennt_separator = M.options.component_separators
@ -271,7 +296,9 @@ local function exec_autocommands()
]], false) ]], false)
end end
function M.status() function M.status(config)
apply_configuration(vim.g.lualine)
apply_configuration(config)
check_single_separator() check_single_separator()
lualine_set_theme() lualine_set_theme()
exec_autocommands() exec_autocommands()