diff --git a/EXTENSIONS.md b/EXTENSIONS.md
deleted file mode 100644
index 4d0acce..0000000
--- a/EXTENSIONS.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Available extensions
-
-### [fzf.vim](https://github.com/junegunn/fzf.vim)
-
-![fzf](https://user-images.githubusercontent.com/41551030/103468293-e7b7ad80-4d57-11eb-9d16-a150f9dac4b7.png)
diff --git a/README.md b/README.md
index 3d702ec..272efe2 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,6 @@
![code size](https://img.shields.io/github/languages/code-size/hoob3rt/lualine.nvim?style=flat-square)
![license](https://img.shields.io/github/license/hoob3rt/lualine.nvim?style=flat-square)
-![last commit](https://img.shields.io/github/last-commit/hoob3rt/lualine.nvim?style=flat-square)
-![contributions](https://img.shields.io/github/contributors/hoob3rt/lualine.nvim?style=flat-square)
-![issues](https://img.shields.io/github/issues-raw/hoob3rt/lualine.nvim?style=flat-square)
-![prs](https://img.shields.io/github/issues-pr-raw/hoob3rt/lualine.nvim?style=flat-square)
-
A blazing fast and easy to configure neovim statusline written in pure lua.
`lualine.nvim` requires neovim 0.5
@@ -65,7 +60,7 @@ Lualine has sections as shown below.
```
+-------------------------------------------------+
-| A | B | C X | Y | Z |
+| A | B | C X | Y | Z |
+-------------------------------------------------+
```
@@ -274,11 +269,12 @@ lualine.sections.lualine_b = {
-### Using tabline as statusline
-You can use lualine to display components in tabline .
+
+Using tabline as statusline (statusline on top)
+You can use lualine to display components in tabline.
The sections, configurations and highlights are same as statusline.
-```
+```lua
lualine.tabline = {
lualine_a = { },
lualine_b = { 'branch' },
@@ -293,13 +289,14 @@ This will show branch and filename component in top of neovim inside tabline .
You can also completely move your statuline to tabline by configuring lualine.tabline
instead of lualine.sections & lualine.inactive_sections and setting them to empty
-```
+```lua
lualine.tabline = {
......
}
lualine.sections = {}
lualine.inactive_sections = {}
```
+
### 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)
@@ -309,7 +306,14 @@ By default no plugin extension are loaded to improve performance. If you are usi
lualine.extensions = { 'fzf' }
```
-All available extensions are listed in [EXTENSIONS.md](./EXTENSIONS.md)
+
+Available extensions
+
+* fugitive
+* fzf
+* nerdtree
+
+
### Lua config example
diff --git a/lua/lualine.lua b/lua/lualine.lua
index 77c105b..ae35331 100644
--- a/lua/lualine.lua
+++ b/lua/lualine.lua
@@ -37,7 +37,7 @@ M.inactive_sections = {
M.tabline = {}
-M.extensions = { }
+M.extensions = {}
local function apply_configuration(config_table)
if not config_table then return end
@@ -65,7 +65,6 @@ local function apply_configuration(config_table)
if config_table.extensions then M.extensions = config_table.extensions end
end
-
local function check_single_separator()
local compoennt_separator = M.options.component_separators
local section_separator = M.options.section_separators
@@ -154,37 +153,32 @@ local function component_loader(component)
end
end
-
-local function load_components()
- local function load_sections(sections)
- for section_name, section in pairs(sections) do
- for index, component in pairs(section) do
- if type(component) == 'string' or type(component) == 'function' then
- component = {component}
- end
- component.self = {}
- component.self.section = section_name
- component_loader(component)
- section[index] = component
+local function load_sections(sections)
+ for section_name, section in pairs(sections) do
+ for index, component in pairs(section) do
+ if type(component) == 'string' or type(component) == 'function' then
+ component = {component}
end
+ component.self = {}
+ component.self.section = section_name
+ component_loader(component)
+ section[index] = component
end
end
+end
+
+local function load_components()
load_sections(M.sections)
load_sections(M.inactive_sections)
load_sections(M.tabline)
end
local function load_extensions()
- for _, extension in pairs(M.extensions) do
- if type(extension) == 'string' then
- require('lualine.extensions.' .. extension).load_extension()
- end
- if type(extension) == 'table' then
- extension.load_extension()
- end
- if type(extension) == 'function' then
- extension()
- end
+ for index, extension in pairs(M.extensions) do
+ local local_extension = require('lualine.extensions.' .. extension)
+ load_sections(local_extension.sections)
+ load_sections(local_extension.inactive_sections)
+ M.extensions[index] = local_extension
end
end
@@ -210,6 +204,7 @@ local function lualine_set_theme()
theme_set = M.options.theme
end
+
local function statusline(sections, is_focused)
if M.options.theme ~= theme_set then
_G.lualine_set_theme()
@@ -279,11 +274,35 @@ local function statusline(sections, is_focused)
return table.concat(status)
end
+-- check if any extension matches the filetype and return proper sections
+local function get_extension_sections()
+ local sections, inactive_sections = nil, nil
+ for _, extension in ipairs(M.extensions) do
+ for _, filetype in ipairs(extension.filetypes) do
+ if vim.bo.filetype == filetype then
+ sections = extension.sections
+ inactive_sections = extension.inactive_sections
+ break
+ end
+ end
+ end
+ return {sections = sections, inactive_sections = inactive_sections}
+end
+
local function status_dispatch()
+ local extension_sections = get_extension_sections()
if vim.g.statusline_winid == vim.fn.win_getid() then
- return statusline(M.sections, true)
+ local sections = extension_sections.sections
+ if sections == nil then
+ sections = M.sections
+ end
+ return statusline(sections, true)
else
- return statusline(M.inactive_sections, false)
+ local inactive_sections = extension_sections.inactive_sections
+ if inactive_sections == nil then
+ inactive_sections = M.inactive_sections
+ end
+ return statusline(inactive_sections, false)
end
end
diff --git a/lua/lualine/extensions/fugitive.lua b/lua/lualine/extensions/fugitive.lua
new file mode 100644
index 0000000..32a28ea
--- /dev/null
+++ b/lua/lualine/extensions/fugitive.lua
@@ -0,0 +1,15 @@
+-- Copyright (c) 2020-2021 hoob3rt
+-- MIT license, see LICENSE for more details.
+
+local M = {}
+
+M.sections = {
+ lualine_a = { 'FugitiveHead' },
+ lualine_z = { 'location' },
+}
+
+M.inactive_sections = M.sections
+
+M.filetypes = { 'fugitive' }
+
+return M
diff --git a/lua/lualine/extensions/fzf.lua b/lua/lualine/extensions/fzf.lua
index d1ebbda..19a176f 100644
--- a/lua/lualine/extensions/fzf.lua
+++ b/lua/lualine/extensions/fzf.lua
@@ -2,19 +2,17 @@
-- MIT license, see LICENSE for more details.
local function fzf_statusline()
- vim.cmd([[hi clear fzf1]])
- vim.cmd([[hi link fzf1 lualine_a_normal]])
- vim.cmd([[hi clear fzf2]])
- vim.cmd([[hi link fzf2 lualine_c_normal]])
- return ([[%#fzf1# FZF %#fzf2#]])
-
+ return 'FZF'
end
-local function load_extension()
- _G.fzf_statusline = fzf_statusline
- vim.cmd(([[autocmd! User FzfStatusLine setlocal statusline=%!v:lua.fzf_statusline()]]))
-end
+local M = {}
-return {
- load_extension = load_extension
+M.sections = {
+ lualine_a = { fzf_statusline },
}
+
+M.inactive_sections = M.sections
+
+M.filetypes = { 'fzf' }
+
+return M
diff --git a/lua/lualine/extensions/nerdtree.lua b/lua/lualine/extensions/nerdtree.lua
new file mode 100644
index 0000000..2fd9f68
--- /dev/null
+++ b/lua/lualine/extensions/nerdtree.lua
@@ -0,0 +1,14 @@
+-- Copyright (c) 2020-2021 hoob3rt
+-- MIT license, see LICENSE for more details.
+
+local M = {}
+
+M.sections = {
+ lualine_a = { vim.fn.getcwd },
+}
+
+M.inactive_sections = M.sections
+
+M.filetypes = { 'nerdtree' }
+
+return M