diff options
Diffstat (limited to 'lua/plugins/heirline.backup2.lua')
| -rw-r--r-- | lua/plugins/heirline.backup2.lua | 1921 |
1 files changed, 0 insertions, 1921 deletions
diff --git a/lua/plugins/heirline.backup2.lua b/lua/plugins/heirline.backup2.lua deleted file mode 100644 index 9f5c4ca..0000000 --- a/lua/plugins/heirline.backup2.lua +++ /dev/null @@ -1,1921 +0,0 @@ -local conditions = require("heirline.conditions") -local utils = require("heirline.utils") - --- Colors ---local colors = { --- bright_bg = utils.get_highlight("Folded").bg, --- bright_fg = utils.get_highlight("Folded").fg, --- red = utils.get_highlight("DiagnosticError").fg, --- dark_red = utils.get_highlight("DiffDelete").bg, --- green = utils.get_highlight("String").fg, --- blue = utils.get_highlight("Function").fg, --- gray = utils.get_highlight("NonText").fg, --- orange = utils.get_highlight("Constant").fg, --- purple = utils.get_highlight("Statement").fg, --- cyan = utils.get_highlight("Special").fg, --- diag_warn = utils.get_highlight("DiagnosticWarn").fg, --- diag_error = utils.get_highlight("DiagnosticError").fg, --- diag_hint = utils.get_highlight("DiagnosticHint").fg, --- diag_info = utils.get_highlight("DiagnosticInfo").fg, --- git_del = utils.get_highlight("diffDeleted").fg, --- git_add = utils.get_highlight("diffAdded").fg, --- git_change = utils.get_highlight("diffChanged").fg, ---} - ---local colors = { --- gray = '#23232e', --- lightgray = '#5f6a8e', --- orange = '#ffb86c', --- purple = '#bd93f9', --- red = '#ff5555', --- yellow = '#f1fa8c', --- green = '#50fa7b', --- white = '#f8f8f2', --- black = '#282a36', ---} -local colors = { - bg = "#333842", - nobg = nil, - bright_fg = "#ffffff", - bright_bg = "#000000", - brown = "#504945", - white = "#f8f8f0", - grey = "#8F908A", - pink = "#f92672", - --green = "#a6e22e", - green = "#AAD94C", - --blue = "#66d9ef", - blue = "#39BAE6", - yellow = "#e6db74", - --orange = "#fd971f", - orange = "#FA8D3F", - purple = "#ae81ff", - --red = "#e95678", - red = "#F07171", - cyan = "#66d9eC", - mode_fg = "#242424", - diag = { - warn = utils.get_highlight("DiagnosticSignWarn").fg, - error = utils.get_highlight("DiagnosticSignError").fg, - hint = utils.get_highlight("DiagnosticSignHint").fg, - info = utils.get_highlight("DiagnosticSignInfo").fg, - }, - git = { - del = "#e95678", - add = "#a6e22e", - change = "#ae81ff", - }, -} - -require("heirline").load_colors(colors) - ---local mode_lable = { --- n = 'NORMAL', --- no = 'OPPEND', --- nov = 'N?', --- noV = 'N?', --- ['no\22'] = 'N?', --- niI = 'Ni', --- niR = 'Nr', --- niV = 'Nv', --- nt = 'N-TERM', --- v = 'VISUAL', --- vs = 'Vs', --- V = 'V-LINE', --- Vs = 'Vs', --- ['\22'] = 'V-BLCK', --- ['\22s'] = '^V', --- s = 'SELECT', --- S = 'S-LINE', --- ['\19'] = 'S-BLCK', --- i = 'INSERT', --- ic = 'ICOMPL', --- ix = 'Ix', --- R = 'REPLACE', --- Rc = 'Rc', --- Rx = 'Rx', --- Rv = 'VRPLCE', --- Rvc = 'Rv', --- Rvx = 'Rv', --- c = 'CMMAND', --- cv = 'PROMPT', --- r = '...', --- rm = 'MORE', --- ['r?'] = 'CNFIRM', --- ['!'] = 'SHELL', --- t = 'TERM', ---} --- ---local mode_colors_table = { --- n = 'red', --- no = 'blue', --- nov = 'blue', --- noV = 'blue', --- niI = 'red', --- niR = 'red', --- niV = 'red', --- nt = 'red', --- v = 'cyan', --- vs = 'cyan', --- V = 'cyan', --- Vs = 'cyan', --- ['\22'] = 'cyan', --- ['\22s'] = 'cyan', --- s = 'purple', --- S = 'purple', --- ['\19'] = 'purple', --- i = 'blue', --- ic = 'blue', --- ix = 'blue', --- R = 'orange', --- Rc = 'orange', --- Rx = 'orange', --- Rv = 'orange', --- Rvc = 'orange', --- Rvx = 'orange', --- c = 'green', --- cv = 'green', --- r = 'green', --- rm = 'green', --- ['r?'] = 'green', --- ['!'] = 'red', --- t = 'red', ---} --- ---local mode_colors = setmetatable({ --- n = { fg = 'red' } ---}, { --- __index = function(_, mode) --- return { --- fg = 'mode_fg', --- bg = mode_colors_table[mode], --- } --- end ---}) --- --- ---local VimModeNormal = { --- condition = function(self) --- return self.mode == 'n' --- end, --- provider = ' ●', ---} --- ---local VimModeOthers = { --- condition = function(self) --- return self.mode ~= 'n' --- end, --- --- utils.surround({ '', '' }, --- function(self) --- return mode_colors[self.mode].bg --- end, --- { --- { --- provider = function(self) --- return '● ' .. mode_lable[self.mode] --- end, --- }, --- hl = function(self) --- return mode_colors[self.mode] --- end --- } --- ), ---} --- ---local ViMode = { --- init = function(self) --- self.mode = vim.fn.mode(1) --- end, --- --- VimModeNormal, VimModeOthers, --- --- update = { 'ModeChanged' } ---} ---local colors = require'kanagawa.colors'.setup() -- wink - ---utils.surround({ "", "" }, function(self) return self:mode_color() end, {Ruler, hl = {fg = 'black'}} ), --- we are surrounding the component and adjusting the foreground in one go! - --- ViMode truemode ---local ViMode = { --- -- get vim current mode, this information will be required by the provider --- -- and the highlight functions, so we compute it only once per component --- -- evaluation and store it as a component attribute --- init = function(self) --- self.mode = vim.fn.mode(1) -- :h mode() --- --- -- execute this only once, this is required if you want the ViMode --- -- component to be updated on operator pending mode --- if not self.once then --- vim.api.nvim_create_autocmd("ModeChanged", { --- pattern = "*:*o", --- command = "redrawstatus", --- }) --- self.once = true --- end --- end, --- -- Now we define some dictionaries to map the output of mode() to the --- -- corresponding string and color. We can put these into `static` to compute --- -- them at initialisation time. --- static = { --- mode_names = { -- change the strings if you like it vvvvverbose! --- ["n"] = "NORMAL ", --- ["no"] = "N·OPERATOR PENDING ", --- ["v"] = "VISUAL ", --- ["V"] = "V·LINE ", --- [""] = "V·BLOCK ", --- ["s"] = "SELECT ", --- ["S"] = "S·LINE ", --- [""] = "S·BLOCK ", --- ["i"] = "INSERT ", --- ["R"] = "REPLACE ", --- ["Rv"] = "V·REPLACE ", --- ["c"] = "COMMAND ", --- ["cv"] = "VIM EX ", --- ["ce"] = "EX ", --- ["r"] = "PROMPT ", --- ["rm"] = "MORE ", --- ["r?"] = "CONFIRM ", --- ["!"] = "SHELL ", --- ["t"] = "TERMINAL ", --- }, --- mode_colors = { --- n = colors.blue, --- i = colors.green, --- v = colors.purple, --- V = colors.purple, --- [""] = colors.purple, --- c = colors.red, --- s = colors.purple, --- S = colors.purple, --- [""] = colors.purple, --- R = colors.orange, --- r = colors.orange, --- ["!"] = colors.red, --- t = colors.red, --- --n = "blue" , --- --i = "green", --- --v = "cyan", --- --V = "cyan", --- --["\22"] = "cyan", --- --c = "orange", --- --s = "purple", --- --S = "purple", --- --["\19"] = "purple", --- --R = "orange", --- --r = "orange", --- --["!"] = "red", --- --t = "red", --- }, --- }, --- -- We can now access the value of mode() that, by now, would have been --- -- computed by `init()` and use it to index our strings dictionary. --- -- note how `static` fields become just regular attributes once the --- -- component is instantiated. --- -- To be extra meticulous, we can also add some vim statusline syntax to --- -- control the padding and make sure our string is always at least 2 --- -- characters long. Plus a nice Icon. --- provider = function(self) --- return " %2(" .. self.mode_names[self.mode] .. "%)" --- --return " %2("..self.mode_names[self.mode].."%)" --- -- --- -- --- -- --- end, --- -- Same goes for the highlight. Now the foreground will change according to the current mode. --- hl = function(self) --- local mode = self.mode:sub(1, 1) -- get only the first mode character --- --return { fg = self.mode_colors[mode], bold = true, } --- return { bg = self.mode_colors[mode], fg = colors.bg, bold = true } --- end, --- -- Re-evaluate the component only on ModeChanged event! --- -- This is not required in any way, but it's there, and it's a small --- -- performance improvement. --- update = { --- "ModeChanged", --- }, --optional ---} -local ViMode = { - static = { - mode_names = { -- change the strings if you like it vvvvverbose! - ["n"] = "NORMAL ", - ["no"] = "N·OPERATOR PENDING ", - ["v"] = "VISUAL ", - ["V"] = "V·LINE ", - [""] = "V·BLOCK ", - ["s"] = "SELECT ", - ["S"] = "S·LINE ", - [""] = "S·BLOCK ", - ["i"] = "INSERT ", - ["R"] = "REPLACE ", - ["Rv"] = "V·REPLACE ", - ["c"] = "COMMAND ", - ["cv"] = "VIM EX ", - ["ce"] = "EX ", - ["r"] = "PROMPT ", - ["rm"] = "MORE ", - ["r?"] = "CONFIRM ", - ["!"] = "SHELL ", - ["t"] = "TERMINAL ", - }, - }, - provider = function(self) - return " %2(" .. self.mode_names[vim.fn.mode(1)] .. "%)" - end, - hl = function(self) - local color = self:mode_color() -- here! - return { bg = color, fg = colors.bg, bold = true } - end, -} - -local ViModeColor = { - static = { - mode_colors_map = { - n = colors.blue, - i = colors.green, - v = colors.purple, - V = colors.purple, - [""] = colors.purple, - c = colors.red, - s = colors.purple, - S = colors.purple, - [""] = colors.purple, - R = colors.orange, - r = colors.orange, - ["!"] = colors.red, - t = colors.red, - }, - mode_color = function(self) - local mode = conditions.is_active() and vim.fn.mode() or "n" - return self.mode_colors_map[mode] - end, - }, -} - --- LSP - ---local LSPActive = { --- condition = conditions.lsp_attached, --- update = {'LspAttach', 'LspDetach'}, --- --- -- You can keep it simple, --- -- provider = " [LSP]", --- --- -- Or complicate things a bit and get the servers names --- provider = function() --- local names = {} --- for i, server in pairs(vim.lsp.buf_get_clients(0)) do --- table.insert(names, server.name) --- end --- return " [" .. table.concat(names, " ") .. "]" --- end, --- hl = { fg = "green", bold = true }, --- on_click = { --- callback = function() --- vim.defer_fn(function() --- vim.cmd("LspInfo") --- end, 100) --- end, --- name = "heirline_LSP", --- }, ---} --- ----- lsp status ----- I personally use it only to display progress messages! ----- See lsp-status/README.md for configuration options. --- ----- Note: check "j-hui/fidget.nvim" for a nice statusline-free alternative. ---local LSPMessages = { --- provider = require("lsp-status").status, --- hl = { fg = "gray" }, ---} - --- Nvim Navic ---local Navic = { --- condition = require("nvim-navic").is_available, --- provider = require("nvim-navic").get_location, ---} ---local Navic = utils.make_flexible_component(3, Navic, { provider = "" }) - --- Full nerd (with icon colors)! -local Navic = { - condition = require("nvim-navic").is_available, - static = { - -- create a type highlight map - type_hl = { - File = "Directory", - Module = "Include", - Namespace = "TSNamespace", - Package = "Include", - Class = "Struct", - Method = "Method", - Property = "TSProperty", - Field = "TSField", - Constructor = "TSConstructor ", - Enum = "TSField", - Interface = "Type", - Function = "Function", - Variable = "TSVariable", - Constant = "Constant", - String = "String", - Number = "Number", - Boolean = "Boolean", - Array = "TSField", - Object = "Type", - Key = "TSKeyword", - Null = "Comment", - EnumMember = "TSField", - Struct = "Struct", - Event = "Keyword", - Operator = "Operator", - TypeParameter = "Type", - }, - }, - init = function(self) - local data = require("nvim-navic").get_data() or {} - local children = {} - -- create a child for each level - for i, d in ipairs(data) do - local child = { - { - provider = d.icon, - hl = self.type_hl[d.type], - }, - { - provider = d.name, - -- highlight icon only or location name as well - -- hl = self.type_hl[d.type], - }, - } - -- add a separator only if needed - if #data > 1 and i < #data then - table.insert(child, { - provider = " > ", - hl = { fg = "bright_fg" }, - }) - end - table.insert(children, child) - end - -- instantiate the new child, overwriting the previous one - self[1] = self:new(children, 1) - end, - hl = { fg = "gray" }, -} - --- Diagnostics -local Diagnostics = { - - condition = conditions.has_diagnostics, - - static = { - error_icon = vim.fn.sign_getdefined("DiagnosticSignError")[1].text, - warn_icon = vim.fn.sign_getdefined("DiagnosticSignWarn")[1].text, - info_icon = vim.fn.sign_getdefined("DiagnosticSignInfo")[1].text, - hint_icon = vim.fn.sign_getdefined("DiagnosticSignHint")[1].text, - }, - - init = function(self) - self.errors = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.ERROR }) - self.warnings = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN }) - self.hints = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.HINT }) - self.info = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.INFO }) - end, - - update = { "DiagnosticChanged", "BufEnter" }, - - { - provider = function(self) - -- 0 is just another output, we can decide to print it or not! - return self.errors > 0 and (self.error_icon .. self.errors .. " ") - end, - hl = { fg = colors.diag.error, bg = colors.bg }, - }, - { - provider = function(self) - return self.warnings > 0 and (self.warn_icon .. self.warnings .. " ") - end, - hl = { fg = colors.diag.warn, bg = colors.bg }, - }, - { - provider = function(self) - return self.info > 0 and (self.info_icon .. self.info .. " ") - end, - hl = { fg = colors.diag.info, bg = colors.bg }, - }, - { - provider = function(self) - return self.hints > 0 and (self.hint_icon .. self.hints) - end, - hl = { fg = colors.diag.hint, bg = colors.bg }, - }, - --{ - -- provider = "]", - --}, - on_click = { - callback = function() - require("trouble").toggle({ mode = "document_diagnostics" }) - -- or - -- vim.diagnostic.setqflist() - end, - name = "heirline_diagnostics", - }, -} - --- Git --- For the ones who're not (too) afraid of changes! Uses gitsigns. -local Git = { - condition = conditions.is_git_repo, - - init = function(self) - self.status_dict = vim.b.gitsigns_status_dict - self.has_changes = self.status_dict.added ~= 0 or self.status_dict.removed ~= 0 or self.status_dict.changed ~= 0 - end, - --hl = { fg = "orange" }, - hl = { fg = colors.orange, bg = colors.bg }, - { -- git branch name - provider = function(self) - return " " .. self.status_dict.head - end, - --hl = { bold = true }, - hl = { bold = true, bg = colors.bg }, - }, - -- You could handle delimiters, icons and counts similar to Diagnostics - { - condition = function(self) - return self.has_changes - end, - --provider = "(" - provider = " ", - }, - { - provider = function(self) - local count = self.status_dict.added or 0 - --return count > 0 and ("+" .. count) - return count > 0 and (" " .. count) - end, - --hl = { fg = "git_add" }, - hl = { fg = colors.git.add, bg = colors.bg }, - }, - { - provider = function(self) - local count = self.status_dict.removed or 0 - --return count > 0 and ("-" .. count) - return count > 0 and (" " .. count) - end, - --hl = { fg = "git_del" }, - hl = { fg = colors.git.del, bg = colors.bg }, - }, - { - provider = function(self) - local count = self.status_dict.changed or 0 - --return count > 0 and ("~" .. count) - return count > 0 and (" " .. count) - end, - --hl = { fg = "git_change" }, - hl = { fg = colors.git.change, bg = colors.bg }, - }, - --{ - -- condition = function(self) - -- return self.has_changes - -- end, - -- provider = ")", - --}, - on_click = { - callback = function() - -- If you want to use Fugitive: - -- vim.cmd("G") - - -- If you prefer Lazygit - -- use vim.defer_fn() if the callback requires - -- opening of a floating window - -- (this also applies to telescope) - vim.defer_fn(function() - vim.cmd("Lazygit") - end, 100) - end, - name = "heirline_git", - }, -} - --- Debugger --- Display informations from nvim-dap! -local DAPMessages = { - -- display the dap messages only on the debugged file - condition = function() - local session = require("dap").session() - if session then - local filename = vim.api.nvim_buf_get_name(0) - if session.config then - local progname = session.config.program - return filename == progname - end - end - return false - end, - provider = function() - return " " .. require("dap").status() - end, - hl = { fg = utils.get_highlight("Debug").fg }, - -- Debugger on_click: step-over, step-into, next, previous, stop buttons - -- coming soon! -} - --- Tests --- This requires the great ultest. ---local UltTest = { --- condition = function() --- return vim .api.nvim_call_function("ultest#is_test_file", {}) ~= 0 --- end, --- static = { --- passed_icon = vim.fn.sign_getdefined("test_pass")[1].text, --- failed_icon = vim.fn.sign_getdefined("test_fail")[1].text, --- passed_hl = { fg = utils.get_highlight("UltestPass").fg }, --- failed_hl = { fg = utils.get_highlight("UltestFail").fg }, --- }, --- init = function(self) --- self.status = vim.api.nvim_call_function("ultest#status", {}) --- end, --- --- -- again, if you'd like icons and numbers to be colored differently, --- -- just split the component in two --- { --- provider = function(self) --- return self.passed_icon .. self.status.passed .. " " --- end, --- hl = function(self) --- return self.passed_hl --- end, --- }, --- { --- provider = function(self) --- return self.failed_icon .. self.status.failed .. " " --- end, --- hl = function(self) --- return self.failed_hl --- end, --- }, --- { --- provider = function(self) --- return "of " .. self.status.tests - 1 --- end, --- }, ---} - --- FileName and Friends - ---local Align = { provider = "%=" } -local Align = { provider = "%=", hl = { bg = colors.bg } } -local Space = { provider = " ", hl = { bg = colors.bg } } -local fill = { provider = "%=", hl = { bg = colors.nobg } } ---local LeftSep = { provider = "" hl = { fg = colors.bg } } ---local RightSep = { provider = "" hl = { fg = colors.bg }} - -local FileNameBlock = { - -- let's first set up some attributes needed by this component and it's children - init = function(self) - self.filename = vim.api.nvim_buf_get_name(0) - end, - --hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, - hl = { bg = colors.bg }, -} --- We can now define some children separately and add them later --- - -local FileIcon = { - init = function(self) - local filename = self.filename - local extension = vim.fn.fnamemodify(filename, ":e") - self.icon, self.icon_color = - require("nvim-web-devicons").get_icon_color(filename, extension, { default = true }) - end, - provider = function(self) - return self.icon and (self.icon .. " ") - end, - hl = function(self) - --return { fg = self.icon_color } - return { fg = self.icon_color, bg = colors.bg } - end, -} - -local FileName = { - provider = function(self) - -- first, trim the pattern relative to the current directory. For other - -- options, see :h filename-modifers - local filename = vim.fn.fnamemodify(self.filename, ":.") - if filename == "" then - return "[No Name]" - end - -- now, if the filename would occupy more than 1/4th of the available - -- space, we trim the file path to its initials - -- See Flexible Components section below for dynamic truncation - if not conditions.width_percent_below(#filename, 0.25) then - filename = vim.fn.pathshorten(filename) - end - return filename - end, - --hl = { fg = utils.get_highlight("Directory").fg, bg = colors.bg }, - hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, -} - -local FileFlags = { - { - provider = function() - if vim.bo.modified then - return " [+]" - end - end, - hl = { fg = colors.green, bg = colors.bg }, - }, - { - provider = function() - if not vim.bo.modifiable or vim.bo.readonly then - return "" - end - end, - --hl = { fg = colors.orange }, - hl = { fg = colors.orange, bold = true, bg = colors.bg }, - }, -} --- Now, let's say that we want the filename color to change if the buffer is --- modified. Of course, we could do that directly using the FileName.hl field, --- but we'll see how easy it is to alter existing components using a "modifier" --- component - -local FileNameModifer = { - hl = function() - if vim.bo.modified then - -- use `force` because we need to override the child's hl foreground - --return { fg = "cyan", bold = true, force = true } - return { fg = "blue", bold = true, force = true, bg = colors.bg } - end - end, -} - --- FileType, FileEncoding and FileFormat -local FileType = { - provider = function() - -- return string.upper(vim.bo.filetype) - --end, - ----hl = { fg = utils.get_highlight("Type").fg, bold = true }, - --hl = { fg = utils.get_highlight("Type").fg, bold = true, bg = colors.bg }, - return vim.bo.filetype - end, - hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, -} - ---local FileEncoding = { --- provider = function() --- local enc = (vim.bo.fenc ~= "" and vim.bo.fenc) or vim.o.enc -- :h 'enc' --- return enc ~= "utf-8" and enc:upper() --- end, ---} -local FileEncoding = { - Space, - provider = function() - local enc = (vim.bo.fenc ~= "" and vim.bo.fenc) or vim.o.enc -- :h 'enc' - return enc:upper() - end, - --hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, - hl = { bg = colors.bg }, -} - -local FileFormat = { - provider = function() - local fmt = vim.bo.fileformat - return fmt ~= "unix" and fmt:upper() - end, - hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, -} - --- FileSize and FileLastModified -local FileSize = { - provider = function() - -- stackoverflow, compute human readable file size - local suffix = { "b", "k", "M", "G", "T", "P", "E" } - local fsize = vim.fn.getfsize(vim.api.nvim_buf_get_name(0)) - fsize = (fsize < 0 and 0) or fsize - if fsize < 1024 then - return fsize .. suffix[1] - end - local i = math.floor((math.log(fsize) / math.log(1024))) - return string.format("%.2g%s", fsize / math.pow(1024, i), suffix[i + 1]) - end, - hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, -} - -local FileLastModified = { - -- did you know? Vim is full of functions! - provider = function() - local ftime = vim.fn.getftime(vim.api.nvim_buf_get_name(0)) - return (ftime > 0) and os.date("%c", ftime) - end, - hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, -} - --- Spell --- Add indicator when spell is set! -local Spell = { - condition = function() - return vim.wo.spell - end, - provider = "SPELL ", - hl = { bold = true, fg = "orange" }, -} - --- Cursor position: Ruler and ScrollBar --- We're getting minimalists here! -local Ruler = { - -- We're getting minimalists here! - -- %l = current line number - -- %L = number of lines in the buffer - -- %c = column number - -- %P = percentage through file of displayed window - provider = "%3(%2l%):%c %P", - --provider = "%7(%l/%3L%):%2c %P", - --provider = "%3(%P%)", - --provider = "%7(%l/%3L%):%2c %P", - --provider = "%7 %p%% Ln %l, Col %c", - hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, -} ---local ScrollBar = { --- static = { --- --sbar = { "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" }, --- sbar = { "🭶", "🭷", "🭸", "🭹", "🭺", "🭻" }, --- }, --- provider = function(self) --- local curr_line = vim.api.nvim_win_get_cursor(0)[1] --- local lines = vim.api.nvim_buf_line_count(0) --- local i = math.floor((curr_line - 1) / lines * #self.sbar) + 1 --- return string.rep(self.sbar[i], 2) --- end, --- --hl = { fg = "blue", bg = "bright_bg" }, --- hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, ---} -local WordCount = { - condition = function() - return conditions.buffer_matches({ - filetype = { - "markdown", - "txt", - "vimwiki", - }, - }) - end, - Space, - { - provider = function() - return "W:" .. vim.fn.wordcount().words - end, - }, -} - -local Position = { - Space, - { provider = "%l:%c" }, - hl = { bg = colors.bg }, -} - -local Percentage = { - Space, - { provider = "%p%%" }, - hl = { bg = colors.bg }, -} --- Working Directory -local WorkDir = { - provider = function(self) - self.icon = (vim.fn.haslocaldir(0) == 1 and "l" or "g") .. " " .. " " - local cwd = vim.fn.getcwd(0) - self.cwd = vim.fn.fnamemodify(cwd, ":~") - end, - --hl = { fg = "blue", bold = true }, - hl = { fg = colors.blue, bold = true, bg = colors.bg }, - - utils.make_flexible_component(1, { - -- evaluates to the full-lenth path - provider = function(self) - local trail = self.cwd:sub(-1) == "/" and "" or "/" - return self.icon .. self.cwd .. trail .. " " - end, - }, { - -- evaluates to the shortened path - provider = function(self) - local cwd = vim.fn.pathshorten(self.cwd) - local trail = self.cwd:sub(-1) == "/" and "" or "/" - return self.icon .. cwd .. trail .. " " - end, - }, { - -- evaluates to "", hiding the component - provider = "", - }), -} - --- Terminal Name --- Special handling of the built-in terminal bufname. See conditional statuslines below to see an example of dedicated statusline for terminals! - -local TerminalName = { - -- we could add a condition to check that buftype == 'terminal' - -- or we could do that later (see #conditional-statuslines below) - provider = function() - local tname, _ = vim.api.nvim_buf_get_name(0):gsub(".*:", "") - return " " .. tname - end, - --hl = { fg = "blue", bold = true }, - hl = { bold = true, bg = colors.bg }, -} - --- Snippets Indicator --- This requires ultisnips ---local Snippets = { --- -- check that we are in insert or select mode --- condition = function() --- return vim.tbl_contains({'s', 'i'}, vim.fn.mode()) --- end, --- provider = function() --- local forward = (vim.fn["UltiSnips#CanJumpForwards"]() == 1) and "" or "" --- local backward = (vim.fn["UltiSnips#CanJumpBackwards"]() == 1) and " " or "" --- return backward .. forward --- end, --- hl = { fg = "red", bold = true }, ---} - --- let's add the children to our FileNameBlock component ---FileNameBlock = utils.insert( --- FileNameBlock, ---FileEncoding, ---Space, ---FileIcon, ---FileType, ---FileLastModified, ---FileSize, ---FileFormat, ---FileNameModifer, --- unpack(FileFlags), --- { provider = "%<" } -- this means that the statusline is cut here when there's not enough space ---) --- let's add the children to our FileNameBlock component -FileNameBlock = utils.insert( - FileNameBlock, - FileIcon, - utils.insert(FileNameModifer, FileName), -- a new table where FileName is a child of FileNameModifier - unpack(FileFlags), -- A small optimisation, since their parent does nothing - { provider = "%<" } -- this means that the statusline is cut here when there's not enough space -) - -local FileInfoBlock = { - -- let's first set up some attributes needed by this component and it's children - init = function(self) - self.filename = vim.api.nvim_buf_get_name(0) - end, -} - -FileInfoBlock = utils.insert( - FileInfoBlock, - FileEncoding, - Space, - FileIcon, - FileType, - { provider = "%<" } -- this means that the statusline is cut here when there's not enough space -) ---FileNameBlock = utils.insert( --- FileNameBlock, --- FileIcon, --- utils.insert(FileNameModifer, FileName), -- a new table where FileName is a child of FileNameModifier --- unpack(FileFlags), -- A small optimisation, since their parent does nothing --- { provider = "%<" } -- this means that the statusline is cut here when there's not enough space ---) - --- Statusline - -local Surrr = { - utils.surround({ "", "" }, "red", { - utils.surround({ "", "" }, "green", utils.surround({ "", "" }, "blue", { provider = "heyya" })), - { provider = "Normal" }, - }), -} ---ViMode = utils.surround({ "", "" }, "bright_bg", { ViMode, Snippets }) -ViMode = utils.surround({ "", "" }, function(self) - return self:mode_color() -end, { ViMode, hl = { fg = utils.get_highlight("statusline").bg, force = true } }) - ---ViMode = utils.surround({ "◥", "" }, function(self) return self:mode_color() end, { --- utils.surround({ "█", "" }, function(self) return self:mode_color() end, utils.surround({ "", "" }, function(self) return self:mode_color() end, { {provider = "normal" }, ViMode, hl = { fg = utils.get_highlight("statusline").bg, force = true } } )), --- { provider = "heyya" }, --- }) - ---utils.surround({ "█", "█" }, function(self) return self:mode_color() end, { FileNameBlock, hl = { fg = colors.bg, force = true } } ), -local DefaultStatusline = { - ViMode, - Space, - FileNameBlock, - Space, - Git, - Space, - Diagnostics, - Align, - Navic, - DAPMessages, - Align, - Space, - FileInfoBlock, - Space, - WordCount, - Ruler, - Space, - --Position, - --Percentage, - --ScrollBar, - --Space, - --LSPActive, Space, LSPMessages, Space, UltTest, Space, FileType, Space, Ruler, Space, ScrollBar -} - ---local InactiveStatusline = { --- condition = conditions.is_not_active, --- FileType, --- Space, --- FileName, --- Align, ---} - -local SpecialStatusline = { - condition = function() - return conditions.buffer_matches({ - buftype = { "nofile", "prompt", "help", "quickfix" }, - filetype = { "^git.*", "fugitive" }, - }) - end, - - FileType, - Space, - Align, - --FileType, Space, HelpFileName, Align -} - -local TerminalStatusline = { - - condition = function() - return conditions.buffer_matches({ buftype = { "terminal" } }) - end, - - hl = { bg = "dark_red" }, - - -- Quickly add a condition to the ViMode to only show it when buffer is active! - { condition = conditions.is_active, ViMode, Space }, - FileType, - Space, - TerminalName, - Align, -} - ---local StatusLines = { --- --- hl = function() --- if conditions.is_active() then --- return "StatusLine" --- else --- return "StatusLineNC" --- end --- end, --- --- -- the first statusline with no condition, or which condition returns true is used. --- -- think of it as a switch case with breaks to stop fallthrough. --- fallthrough = false, --- --- SpecialStatusline, --- TerminalStatusline, --- --InactiveStatusline, --- DefaultStatusline, ---} -local StatusLines = { - - hl = function() - if conditions.is_active() then - return "StatusLine" - else - return "StatusLineNC" - end - end, - - static = { - mode_colors_map = { - n = colors.blue, - i = colors.green, - v = colors.purple, - V = colors.purple, - [""] = colors.purple, - c = colors.red, - s = colors.purple, - S = colors.purple, - [""] = colors.purple, - R = colors.orange, - r = colors.orange, - ["!"] = colors.red, - t = colors.red, - }, - mode_color = function(self) - local mode = conditions.is_active() and vim.fn.mode() or "n" - return self.mode_colors_map[mode] - end, - }, - fallthrough = false, - - SpecialStatusline, - TerminalStatusline, - --InactiveStatusline, - DefaultStatusline, -} ---hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, --- hl = { bg = colors.bg }, ---require("heirline").setup(StatusLines) --- we're done. - ---local FelineStyle = { --- --- -- stop at child where buftype/filetype/bufname matches --- fallthrough = false, --- --- { -- Identify the buftype/filetype/bufname first --- condtion = function() --- return conditions.buffer_matches({...}) --- end, --- --- -- Evaluate only the "active" or "inactive" child --- fallthrough = false, --- --- { -- If it's the current window, display some components --- condition = conditions.is_active --- {...} -- --- }, --- { -- Otherwise, display some other components --- {...} -- --- } --- }, --- { -- this block can be exactly as the one above for a different kind of --- -- buffer --- ... --- } ---} - --- WinBar - -vim.api.nvim_create_autocmd("User", { - pattern = "HeirlineInitWinbar", - callback = function(args) - local buf = args.buf - local buftype = vim.tbl_contains({ "prompt", "nofile", "help", "quickfix" }, vim.bo[buf].buftype) - local filetype = vim.tbl_contains({ "gitcommit", "fugitive" }, vim.bo[buf].filetype) - if buftype or filetype then - vim.opt_local.winbar = nil - end - end, -}) -local active_middle_segment = { --{{{ - -- provider = "%999X %X", - - --provider = function(self) - -- --return " %999X %999X " - -- return " %2("..self.mode_names[self.mode].."%)" - -- -- - -- -- - -- -- - --end, - fallthrough = false, - { -- Hide the winbar for special buffers - condition = function() - return conditions.buffer_matches({ - buftype = { "nofile", "prompt", "help", "quickfix" }, - filetype = { "^git.*", "fugitive" }, - }) - end, - init = function() - vim.opt_local.winbar = nil - end, - }, - static = { - mode_colors_map = { - n = colors.blue, - i = colors.green, - v = colors.purple, - V = colors.purple, - [""] = colors.purple, - c = colors.red, - s = colors.purple, - S = colors.purple, - [""] = colors.purple, - R = colors.orange, - r = colors.orange, - ["!"] = colors.red, - t = colors.red, - }, - mode_color = function(self) - local mode = conditions.is_active() and vim.fn.mode() or "n" - return self.mode_colors_map[mode] - end, - provider = "%f", - hl = function(self) - local color = self:mode_color() -- here! - return { fg = color } - end, - -- self.filename will be defined later, just keep looking at the example! - }, - { -- A special winbar for terminals - condition = function() - return conditions.buffer_matches({ buftype = { "terminal" } }) - end, - utils.surround({ "", "" }, "dark_red", { - FileType, - Space, - TerminalName, - }), - }, - { -- An inactive winbar for regular files - condition = function() - return not conditions.is_active() - end, - --utils.surround({ "", "" }, "bright_bg", { hl = { fg = "gray", force = true }, FileNameBlock }), - --utils.surround({ "", "" }, function(self) return self:mode_color() end, { FileNameBlock, hl = { fg = colors.bg, force = true } } ), - }, - -- A winbar for regular files - --utils.surround({ "", "" }, "bright_bg", FileNameBlock), - --█🙼🙽🙼█⮘██⮚ - --utils.surround({ "", "" }, function(self) return self:mode_color() end, { FileNameBlock, hl = function(self) - -- local color = self:mode_color() -- here! - -- return { bg = color, bold = true, force = true } - --end, - --}), - --utils.surround({ "", "" }, function(self) return self:mode_color() end, FileNameBlock), -} - ---utils.surround({ "", "" }, function(self) return self:mode_color() end, { active_middle_segment, hl = { fg = colors.bg, force = true } }) - -local WinBars = { - fill, - active_middle_segment, - fill, -} --- --utils.surround({ " ", " " }, colors.nobg, { fill, active_middle_segment, fill }) --- --static = { --- -- mode_colors_map = { --- -- n = colors.blue, --- -- i = colors.green, --- -- v = colors.purple, --- -- V = colors.purple, --- -- [""] = colors.purple, --- -- c = colors.red, --- -- s = colors.purple, --- -- S = colors.purple, --- -- [""] = colors.purple, --- -- R = colors.orange, --- -- r = colors.orange, --- -- ["!"] = colors.red, --- -- t = colors.red, --- -- }, --- -- mode_color = function(self) --- -- local mode = conditions.is_active() and vim.fn.mode() or "n" --- -- return self.mode_colors_map[mode] --- -- end, --- --}, --- --utils.surround({ " ", " " }, colors.nobg, { active_middle_segment, hl = function(self) --- -- local color = self:mode_color() -- here! --- -- return { bg = color, bold = true, force = true } --- --end, --- --}) ---} -on_click = { - -- get the window id of the window in which the component was evaluated - minwid = function() - return vim.api.nvim_get_current_win() - end, - callback = function(_, minwid) - -- winid is the window id of the window the component was clicked from - local winid = minwid - -- do something with the window id, e.g.: - local buf = vim.api.nvim_win_get_buf(winid) - -- ... - end, -} - -local CloseButton = { - condition = function(self) - return not vim.bo.modified - end, - -- a small performance improvement: - -- re register the component callback only on layout/buffer changes. - update = { "WinNew", "WinClosed", "BufEnter" }, - { provider = " " }, - { - provider = "", - hl = { fg = "gray" }, - on_click = { - minwid = function() - return vim.api.nvim_get_current_win() - end, - callback = function(_, minwid) - vim.api.nvim_win_close(minwid, true) - end, - name = "heirline_winbar_close_button", - }, - }, -} - --- Use it anywhere! ---local WinBarFileName = utils.surround({ "", "" }, "bright_bg", { --- hl = function() --- if not conditions.is_active() then --- return { fg = "gray", force = true } --- end --- end, --- FileNameBlock, --- Space, --- CloseButton, ---}) - ---local WinBars = { --- -- init = utils.pick_child_on_condition, --- fallthrough = false, --- { --- condition = function() --- return conditions.buffer_matches({ --- buftype = { "nofile", "prompt", "help", "quickfix" }, --- filetype = { "^git.*", "fugitive" }, --- }) --- end, --- init = function() --- vim.opt_local.winbar = nil --- end, --- }, --- { --- condition = function() --- return conditions.buffer_matches({ buftype = { "terminal" } }) --- end, --- utils.surround({ "", "" }, "dark_red", { --- FileType, --- Space, --- TerminalName, --- CloseButton, --- }), --- }, --- utils.surround({ "", "" }, "bright_bg", { --- hl = function() --- if conditions.is_not_active() then --- return { fg = "gray", force = true } --- end --- end, --- --- FileNameBlock, --- CloseButton, --- }), ---} - --- TabLine ---local TabLine ={ --- hl = { bg = colors.bg }, ---} -local TablineBufnr = { - provider = function(self) - return tostring(self.bufnr) .. ". " - end, - --hl = "Comment", - --hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, - hl = { fg = utils.get_highlight("Statusline").fg, bold = true }, -} - --- we redefine the filename component, as we probably only want the tail and not the relative path -local TablineFileName = { - provider = function(self) - -- self.filename will be defined later, just keep looking at the example! - local filename = self.filename - filename = filename == "" and "[No Name]" or vim.fn.fnamemodify(filename, ":t") - return filename - end, - hl = function(self) - return { bold = self.is_active or self.is_visible, italic = true } - end, -} - --- this looks exactly like the FileFlags component that we saw in --- #crash-course-part-ii-filename-and-friends, but we are indexing the bufnr explicitly --- also, we are adding a nice icon for terminal buffers. ---local TablineFileFlags = { --- { --- condition = function(self) --- return vim.api.nvim_buf_get_option(self.bufnr, "modified") --- end, --- provider = "[+]", --- --hl = { fg = colors.green }, --- hl = { fg = colors.green, bold = true, bg = colors.bg }, --- }, --- { --- condition = function(self) --- return not vim.api.nvim_buf_get_option(self.bufnr, "modifiable") --- or vim.api.nvim_buf_get_option(self.bufnr, "readonly") --- end, --- provider = function(self) --- if vim.api.nvim_buf_get_option(self.bufnr, "buftype") == "terminal" then --- return " " --- else --- return "" --- end --- end, --- hl = { fg = "orange", bg = colors.bg }, --- }, ---} - -local TablineFileFlags = { - { - provider = function(self) - if vim.bo[self.bufnr].modified then - return " [+]" - end - end, - hl = { fg = colors.green }, - }, - { - provider = function(self) - if not vim.bo[self.bufnr].modifiable or vim.bo[self.bufnr].readonly then - return "" - end - end, - hl = { fg = "orange" }, - }, -} - -local TablineFileIcon = { - init = function(self) - local filename = self.filename - local extension = vim.fn.fnamemodify(filename, ":e") - self.icon, self.icon_color = - require("nvim-web-devicons").get_icon_color(filename, extension, { default = true }) - end, - provider = function(self) - return self.icon and (" " .. self.icon .. " ") - end, - hl = function(self) - return { fg = self.icon_color } - end, -} - --- Here the filename block finally comes together -local TablineFileNameBlock = { - init = function(self) - self.filename = vim.api.nvim_buf_get_name(self.bufnr) - end, - hl = function(self) - if self.is_active then - return "TabLineSel" - -- why not? - --elseif not vim.api.nvim_buf_is_loaded(self.bufnr) then - --return { fg = "gray", bg = colors.bg } - else - return "TabLine" - end - end, - on_click = { - callback = function(_, minwid, _, button) - if button == "m" then -- close on mouse middle click - vim.api.nvim_buf_delete(minwid, { force = false }) - else - vim.api.nvim_win_set_buf(0, minwid) - end - end, - minwid = function(self) - return self.bufnr - end, - name = "heirline_tabline_buffer_callback", - }, - TablineBufnr, - --FileIcon, -- turns out the version defined in #crash-course-part-ii-filename-and-friends can be reutilized as is here! - TablineFileIcon, - TablineFileName, - TablineFileFlags, -} - --- a nice "x" button to close the buffer -local TablineCloseButton = { - condition = function(self) - return not vim.api.nvim_buf_get_option(self.bufnr, "modified") - end, - { provider = " " }, - { - provider = " ", - --hl = { fg = "red", bg = colors.bg }, - hl = { fg = "red" }, - on_click = { - callback = function(_, minwid) - vim.api.nvim_buf_delete(minwid, { force = false }) - end, - minwid = function(self) - return self.bufnr - end, - name = "heirline_tabline_close_buffer_callback", - }, - }, -} - --- The final touch! ---local TablineBufferBlock = utils.surround({ "", "", hl = { bg =colors.bg } }, function(self) --- if self.is_active then --- return utils.get_highlight("TabLineSel").fg, utils.get_highlight("TabLineSel").bg --- else --- return utils.get_highlight("TabLine").fg, utils.get_highlight("TabLine").bg --- end -----end, { TabLine, TablineFileNameBlock, TablineCloseButton }) ---end, { TablineFileNameBlock, TablineCloseButton }) - ---local TablineBufferBlock = utils.surround({ "█", "█" }, "bg", { --- hl = function() --- if not conditions.is_active() then --- return { fg = "gray", force = true, bg = colors.bg } --- end --- end, --- TablineFileNameBlock, --- TablineCloseButton, ---}) ---local TablineBufferBlock = utils.surround({ "█", "█" }, --- { hl = function(self) --- local mode = self.mode:sub(1, 1) -- get only the first mode character --- --return { fg = self.mode_colors[mode], bold = true, } --- return { bg = self.mode_colors[mode], fg = colors.bg, bold = true } --- end, }, ---{ TablineFileNameBlock, TablineCloseButton, { hl = ViMode }, }) - ---local TablineBufferBlock = { --- init = function(self) --- --- self.mode = vim.fn.mode(1) -- :h mode() --- --- vim.api.nvim_create_autocmd("ModeChanged", { --- pattern = "*:*o", --- command = "redrawstatus", --- }) --- self.once = true --- end, --- static = { --- mode_colors = { --- n = colors.blue, --- i = colors.green, --- v = colors.purple, --- V = colors.purple, --- [""] = colors.purple, --- c = colors.red, --- s = colors.purple, --- S = colors.purple, --- [""] = colors.purple, --- R = colors.orange, --- r = colors.orange, --- ["!"] = colors.red, --- t = colors.red, --- }, --- }, --- hl = function(self) --- if self.is_active then --- local mode = self.mode:sub(1, 1) -- get only the first mode character --- --return { fg = self.mode_colors[mode], bold = true, } --- return { bg = self.mode_colors[mode], fg = colors.bg, bold = true } --- else --- return utils.get_highlight("TabLine").bg --- end --- end, --- update = { --- "ModeChanged", --- }, --optional --- { TablineFileNameBlock, TablineCloseButton } ---} - ---local TabLineSel = { --- hl = { bg = self.mode_colors[mode], fg = colors.bg, bold = true } ---} ---local ViMode2 = { --- init = function(self) --- self.mode = vim.fn.mode() --- end, --- static = { --- mode_colors = { --- n = "red", --- i = "green", --- v = "blue", --- c = "orange" --- --- } --- }, --- provider = function(self) --- return string.upper(self.mode) --- end, --- hl = function(self) --- return { fg = self.mode_colors[self.mode], bold = true, } --- end ---} ---local surrr = { --- utils.surround({ "", "" }, "red", { --- utils.surround({ "", "" }, "green", utils.surround({ "", "" }, "blue", { provider = "heyya" })), --- { provider = "Normal" }, --- }), ---} ---local statusline = ViMode - ---local TablineBufferBlock = utils.surround({ "", "" }, function(self) --- if self.is_active then --- --self.mode = vim.fn.mode(1) -- :h mode() --- --- --return utils.get_highlight(vim.api.nvim_get_mode().mode).bg --- return utils.get_highlight("TabLineSel").bg --- --return utils.get_highlight("Normal").bg --- --local mode = self.mode:sub(1, 1) -- get only the first mode character --- --return { bg = TabLineSel, fg = colors.bg, bold = true } --- else --- return utils.get_highlight("TabLine").bg --- end ---end, { TablineFileNameBlock, TablineCloseButton }) - -local TablineBufferBlock = utils.surround({ "█", "▎" }, function(self) - --local TablineBufferBlock = utils.surround({ "█", "█" }, function(self) - if self.is_active then - return utils.get_highlight("TabLineSel").bg - else - return utils.get_highlight("TabLine").bg - end -end, { TablineFileNameBlock, TablineCloseButton }) ---█ ---local TablineBufferBlock = { --- init = function(self) --- self.mode = vim.fn.mode() --- end, --- static = { --- mode_colors = { --- n = colors.blue, --- i = colors.green, --- v = colors.purple, --- V = colors.purple, --- [""] = colors.purple, --- c = colors.red, --- s = colors.purple, --- S = colors.purple, --- [""] = colors.purple, --- R = colors.orange, --- r = colors.orange, --- ["!"] = colors.red, --- t = colors.red, --- }, --- }, --- hl = function(self) --- if conditions.is_active() then --- return { bg = self.mode_colors[self.mode], fg = colors.bg, bold = true } --- else --- return utils.get_highlight("Tabline").bg --- end --- end, --- update = { --- "ModeChanged", --- }, --optional --- { TablineFileNameBlock, TablineCloseButton }, ---} - ---local TablineBufferBlock = { --- static = { --- mode_colors_map = { --- n = colors.blue, --- i = colors.green, --- v = colors.purple, --- V = colors.purple, --- [""] = colors.purple, --- c = colors.red, --- s = colors.purple, --- S = colors.purple, --- [""] = colors.purple, --- R = colors.orange, --- r = colors.orange, --- ["!"] = colors.red, --- t = colors.red, --- }, --- mode_color = function(self) --- local mode = conditions.is_active() and vim.fn.mode() or "n" --- return self.mode_colors_map[mode] --- end, --- }, --- { -- A special winbar for terminals --- condition = function() --- return conditions.buffer_matches({ buftype = { "terminal" } }) --- end, --- utils.surround({ "", "" }, "dark_red", { --- FileType, --- Space, --- TerminalName, --- }), --- }, --- { -- An inactive winbar for regular files --- condition = function() --- return conditions.is_not_active() --- end, --- utils.surround({ "█", "█" }, function() return utils.get_highlight("TabLine").bg end, { TablineFileNameBlock, TablineCloseButton } ) --- }, --- { --- condition = function() --- return conditions.is_active() --- end, --- utils.surround({ "█", "█" }, function(self) return self:mode_color() end, { TablineFileNameBlock, TablineCloseButton, hl = { fg = colors.bg, force = true } } ) --- }, ---function() ---if self.is_active then ---utils.surround({ "", "" }, "bright_bg", { hl = { fg = "gray", force = true }, FileNameBlock }), ---utils.surround({ "", "" }, function(self) return self:mode_color() end, { FileNameBlock, hl = { fg = colors.bg, force = true } } ), ---utils.surround({ "█", "█" }, function() return utils.get_highlight("TabLine").bg end, { TablineFileNameBlock, TablineCloseButton, hl = { fg = colors.bg, force = true } } ), ---} ---ViMode = utils.surround({ "", "" }, function(self) --- if self.is_active then --- return self:mode_color() --- else --- return utils.get_highlight("TabLine").bg --- end --- end, { ViMode, hl = { fg = utils.get_highlight("statusline").bg, force = true } } ) --- -----} ---local TablineBufferBlock = { --- ViMode, --- TablineFileName, --- TablineCloseButton, ---} --- A winbar for regular files ---utils.surround({ "", "" }, "bright_bg", FileNameBlock), ---utils.surround({ "", "" }, function(self) return self:mode_color() end, FileNameBlock), -local BufferLine = utils.make_buflist( - TablineBufferBlock, - { provider = "", hl = { fg = "gray" } }, -- left truncation, optional (defaults to "<") - { provider = "", hl = { fg = "gray" } } -- right trunctation, also optional (defaults to ...... yep, ">") - --{ provider = "", hl = { fg = "gray" } }, -- left truncation, optional (defaults to "<") - --{ provider = "", hl = { fg = "gray" } } -- right trunctation, also optional (defaults to ...... yep, ">") - -- by the way, open a lot of buffers and try clicking them ;) -) - --- if self.is_active then --- return utils.get_highlight("TabLineSel").bg --- else --- return utils.get_highlight("TabLine").bg --- end ---end, { TablineFileNameBlock, TablineCloseButton, } ) --- TabList -local Tabpage = { - provider = function(self) - return "%" .. self.tabnr .. "T " .. self.tabnr .. " %T" - end, - hl = function(self) - if not self.is_active then - return "TabLine" - else - return "TabLineSel" - end - end, -} - -local TabpageClose = { - provider = "%999X %X", - --hl = "TabLine", - hl = { fg = colors.red, bg = colors.bg }, -} - -local TabPages = { - -- only show this component if there's 2 or more tabpages - condition = function() - return #vim.api.nvim_list_tabpages() >= 2 - end, - { provider = "%=" }, - utils.make_tablist(Tabpage), - TabpageClose, -} - --- TabLineOffset -local TabLineOffset = { - condition = function(self) - local win = vim.api.nvim_tabpage_list_wins(0)[1] - local bufnr = vim.api.nvim_win_get_buf(win) - self.winid = win - - if vim.bo[bufnr].filetype == "NvimTree" then - self.title = "NvimTree" - return true - -- elseif vim.bo[bufnr].filetype == "TagBar" then - -- ... - end - end, - - provider = function(self) - local title = self.title - local width = vim.api.nvim_win_get_width(self.winid) - local pad = math.ceil((width - #title) / 2) - return string.rep(" ", pad) .. title .. string.rep(" ", pad) - end, - - hl = function(self) - if vim.api.nvim_get_current_win() == self.winid then - return "TablineSel" - else - return "Tabline" - end - end, -} - -local TabLine = { - --hl = { bg = colors.bg }, - fallthrough = false, - TabLineOffset, - BufferLine, - TabPages, -} - -vim.cmd([[au FileType * if index(['wipe', 'delete', 'unload'], &bufhidden) >= 0 | set nobuflisted | endif]]) ---local StatusLines = { --- --- hl = function() --- if conditions.is_active() then --- return "StatusLine" --- else --- return "StatusLineNC" --- end --- end, --- --- -- the first statusline with no condition, or which condition returns true is used. --- -- think of it as a switch case with breaks to stop fallthrough. --- fallthrough = false, --- --- SpecialStatusline, --- TerminalStatusline, --- --InactiveStatusline, --- DefaultStatusline, ---} --- --- --hl = { fg = utils.get_highlight("Statusline").fg, bold = true, bg = colors.bg }, --- hl = { bg = colors.bg }, ---local TabLine ={ --- hl = { bg = colors.bg }, ---} --- Window Close button: Let the callback know from which window it was clicked from! --- The following is the recommended way of achieving that: -require("heirline").setup(StatusLines, WinBars, TabLine) - --- Yep, with heirline we're driving manual! -vim.cmd([[au FileType * if index(['wipe', 'delete', 'unload'], &bufhidden) >= 0 | set nobuflisted | endif]]) - -vim.api.nvim_create_augroup("Heirline", { clear = true }) -vim.api.nvim_create_autocmd("ColorScheme", { - callback = function() - local colors = setup_colors() - utils.on_colorscheme(colors) - end, - group = "Heirline", -}) - -local function get_bufs() - return vim.tbl_filter(function(bufnr) - return vim.api.nvim_buf_is_loaded(bufnr) and vim.bo[bufnr].buflisted - end, vim.api.nvim_list_bufs()) -end - -local function goto_buf(index) - local bufs = get_bufs() - if index > #bufs then - index = #bufs - end - vim.api.nvim_win_set_buf(0, bufs[index]) -end - -local function addKey(key, index) - vim.keymap.set("", "<A-" .. key .. ">", function() - goto_buf(index) - end, { noremap = true, silent = true }) -end - -for i = 1, 9 do - addKey(i, i) -end -addKey("0", 10) --- Theming ---local function setup_colors() --- return { --- bright_bg = utils.get_highlight("Folded").bg, --- bright_fg = utils.get_highlight("Folded").fg, --- red = utils.get_highlight("DiagnosticError").fg, --- dark_red = utils.get_highlight("DiffDelete").bg, --- green = utils.get_highlight("String").fg, --- blue = utils.get_highlight("Function").fg, --- gray = utils.get_highlight("NonText").fg, --- orange = utils.get_highlight("Constant").fg, --- purple = utils.get_highlight("Statement").fg, --- cyan = utils.get_highlight("Special").fg, --- diag_warn = utils.get_highlight("DiagnosticWarn").fg, --- diag_error = utils.get_highlight("DiagnosticError").fg, --- diag_hint = utils.get_highlight("DiagnosticHint").fg, --- diag_info = utils.get_highlight("DiagnosticInfo").fg, --- git_del = utils.get_highlight("diffDeleted").fg, --- git_add = utils.get_highlight("diffAdded").fg, --- git_change = utils.get_highlight("diffChanged").fg, --- } ---end ---require('heirline').load_colors(setup_colors()) --- ---vim.api.nvim_create_augroup("Heirline", { clear = true }) ---vim.api.nvim_create_autocmd("ColorScheme", { --- callback = function() --- local colors = setup_colors() --- utils.on_colorscheme(colors) --- end, --- group = "Heirline", ---}) |
