From 7f02a3a292ad6c69a5667c2d085ae3e258a414d3 Mon Sep 17 00:00:00 2001 From: shadmansaleh <13149513+shadmansaleh@users.noreply.github.com> Date: Sat, 14 Aug 2021 01:34:33 +0600 Subject: [PATCH] Include evil_lualine config in examples/ and fix warnings in evil_lualine --- Makefile | 1 + README.md | 2 +- examples/evil_lualine.lua | 219 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 examples/evil_lualine.lua diff --git a/Makefile b/Makefile index 926981f..9521e6a 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ lint: @luacheck lua/lualine @luacheck lua/tests + @luacheck examples/ format: @for file in `find . -name '*.lua'`;do lua-format $$file -i; done; diff --git a/README.md b/README.md index cda7d07..d1b624d 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ For those who want to break the norms. You can create custom looks in lualine. **Example** : -- [evil_lualine](https://gist.github.com/hoob3rt/b200435a765ca18f09f83580a606b878) +- [evil_lualine](examples/evil_lualine.lua) ## Performance compared to other plugins diff --git a/examples/evil_lualine.lua b/examples/evil_lualine.lua new file mode 100644 index 0000000..98c18a0 --- /dev/null +++ b/examples/evil_lualine.lua @@ -0,0 +1,219 @@ +-- Eviline config for lualine +-- Author: shadmansaleh +-- Credit: glepnir +local lualine = require 'lualine' + +-- Color table for highlights +local colors = { + bg = '#202328', + fg = '#bbc2cf', + yellow = '#ECBE7B', + cyan = '#008080', + darkblue = '#081633', + green = '#98be65', + orange = '#FF8800', + violet = '#a9a1e1', + magenta = '#c678dd', + blue = '#51afef', + red = '#ec5f67' +} + +local conditions = { + buffer_not_empty = function() return vim.fn.empty(vim.fn.expand('%:t')) ~= 1 end, + hide_in_width = function() return vim.fn.winwidth(0) > 80 end, + check_git_workspace = function() + local filepath = vim.fn.expand('%:p:h') + local gitdir = vim.fn.finddir('.git', filepath .. ';') + return gitdir and #gitdir > 0 and #gitdir < #filepath + end +} + +-- Config +local config = { + options = { + -- Disable sections and component separators + component_separators = "", + section_separators = "", + theme = { + -- We are going to use lualine_c an lualine_x as left and + -- right section. Both are highlighted by c theme . So we + -- are just setting default looks o statusline + normal = {c = {fg = colors.fg, bg = colors.bg}}, + inactive = {c = {fg = colors.fg, bg = colors.bg}} + } + }, + sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_b = {}, + lualine_y = {}, + lualine_z = {}, + -- These will be filled later + lualine_c = {}, + lualine_x = {} + }, + inactive_sections = { + -- these are to remove the defaults + lualine_a = {}, + lualine_v = {}, + lualine_y = {}, + lualine_z = {}, + lualine_c = {}, + lualine_x = {} + } +} + +-- Inserts a component in lualine_c at left section +local function ins_left(component) + table.insert(config.sections.lualine_c, component) +end + +-- Inserts a component in lualine_x ot right section +local function ins_right(component) + table.insert(config.sections.lualine_x, component) +end + +ins_left { + function() return '▊' end, + color = {fg = colors.blue}, -- Sets highlighting of component + left_padding = 0 -- We don't need space before this +} + +ins_left { + -- mode component + function() + -- auto change color according to neovims mode + local mode_color = { + n = colors.red, + i = colors.green, + v = colors.blue, + [''] = colors.blue, + V = colors.blue, + c = colors.magenta, + no = colors.red, + s = colors.orange, + S = colors.orange, + [''] = colors.orange, + ic = colors.yellow, + R = colors.violet, + Rv = colors.violet, + cv = colors.red, + ce = colors.red, + r = colors.cyan, + rm = colors.cyan, + ['r?'] = colors.cyan, + ['!'] = colors.red, + t = colors.red + } + vim.api.nvim_command( + 'hi! LualineMode guifg=' .. mode_color[vim.fn.mode()] .. " guibg=" .. + colors.bg) + return '' + end, + color = "LualineMode", + left_padding = 0 +} + +ins_left { + -- filesize component + function() + local function format_file_size(file) + local size = vim.fn.getfsize(file) + if size <= 0 then return '' end + local sufixes = {'b', 'k', 'm', 'g'} + local i = 1 + while size > 1024 do + size = size / 1024 + i = i + 1 + end + return string.format('%.1f%s', size, sufixes[i]) + end + local file = vim.fn.expand('%:p') + if string.len(file) == 0 then return '' end + return format_file_size(file) + end, + condition = conditions.buffer_not_empty +} + +ins_left { + 'filename', + condition = conditions.buffer_not_empty, + color = {fg = colors.magenta, gui = 'bold'} +} + +ins_left {'location'} + +ins_left {'progress', color = {fg = colors.fg, gui = 'bold'}} + +ins_left { + 'diagnostics', + sources = {'nvim_lsp'}, + symbols = {error = ' ', warn = ' ', info = ' '}, + color_error = {fg = colors.red}, + color_warn = {fg = colors.yellow}, + color_info = {fg = colors.cyan} +} + +-- Insert mid section. You can make any number of sections in neovim :) +-- for lualine it's any number greater then 2 +ins_left {function() return '%=' end} + +ins_left { + -- Lsp server name . + function() + local msg = 'No Active 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, + icon = ' LSP:', + color = {fg = '#ffffff', gui = 'bold'} +} + +-- Add components to right sections +ins_right { + 'o:encoding', -- option component same as &encoding in viml + upper = true, -- I'm not sure why it's upper case either ;) + condition = conditions.hide_in_width, + color = {fg = colors.green, gui = 'bold'} +} + +ins_right { + 'fileformat', + upper = true, + icons_enabled = false, -- I think icons are cool but Eviline doesn't have them. sigh + color = {fg = colors.green, gui = 'bold'} +} + +ins_right { + 'branch', + icon = '', + condition = conditions.check_git_workspace, + color = {fg = colors.violet, gui = 'bold'} +} + +ins_right { + 'diff', + -- Is it me or the symbol for modified us really weird + symbols = {added = ' ', modified = '柳 ', removed = ' '}, + color_added = {fg = colors.green}, + color_modified = {fg = colors.orange}, + color_removed = {fg = colors.red}, + condition = conditions.hide_in_width +} + +ins_right { + function() return '▊' end, + color = {fg = colors.blue}, + right_padding = 0 +} + +-- Now don't forget to initialize lualine +lualine.setup(config)