local state = require "state" return { "willothy/nvim-cokeline", lazy = false, config = function() local hl = require "cokeline.hlgroups" local is_picking_focus = require("cokeline.mappings").is_picking_focus local is_picking_close = require("cokeline.mappings").is_picking_close local function has_diagnostics(buffer) return buffer.diagnostics.errors > 0 or buffer.diagnostics.warnings > 0 or buffer.diagnostics.infos > 0 or buffer.diagnostics.hints > 0 end require("cokeline").setup { show_if_buffers_are_at_least = 0, components = { { text = function(buffer) return buffer.is_first and (require("cokeline.sidebar").get_width "left" == 0 and "" or "│") or "▎" end, fg = function() return hl.get_hl_attr("WinSeparator", "fg") end, bg = function() return hl.get_hl_attr("Normal", "bg") end, }, { text = function(buffer) return (is_picking_focus() or is_picking_close()) and " " .. buffer.pick_letter or "" end, fg = function() return hl.get_hl_attr("PrismiteYellow", "fg") end, }, { text = function(buffer) return " " .. buffer.devicon.icon end, fg = function(buffer) return buffer.devicon.color end, }, { text = function(buffer) return buffer.unique_prefix end, fg = function() return hl.get_hl_attr("Comment", "fg") end, italic = true, }, { text = function(buffer) return buffer.filename end, }, { text = function(buffer) return buffer.is_modified and " " or "" end, }, { text = function(buffer) return has_diagnostics(buffer) and " [" or "" end, fg = function() return hl.get_hl_attr("WinSeparator", "fg") end, }, { text = function(buffer) local errors = buffer.diagnostics.errors return errors > 0 and errors or "" end, fg = function() return hl.get_hl_attr("DiagnosticError", "fg") end, }, { text = function(buffer) local bd = buffer.diagnostics return (bd.errors > 0 and (bd.warnings > 0 or bd.infos > 0 or bd.hints > 0)) and "|" or "" end, fg = function() return hl.get_hl_attr("WinSeparator", "fg") end, }, { text = function(buffer) local warnings = buffer.diagnostics.warnings return warnings > 0 and warnings or "" end, fg = function() return hl.get_hl_attr("DiagnosticWarn", "fg") end, }, { text = function(buffer) local bd = buffer.diagnostics return (bd.warnings > 0 and (bd.infos > 0 or bd.hints > 0)) and "|" or "" end, fg = function() return hl.get_hl_attr("WinSeparator", "fg") end, }, { text = function(buffer) local infos = buffer.diagnostics.infos return infos > 0 and infos or "" end, fg = function() return hl.get_hl_attr("DiagnosticInfo", "fg") end, }, { text = function(buffer) local bd = buffer.diagnostics return (bd.infos > 0 and bd.hints > 0) and "|" or "" end, fg = function() return hl.get_hl_attr("WinSeparator", "fg") end, }, { text = function(buffer) local hints = buffer.diagnostics.hints return hints > 0 and hints or "" end, fg = function() return hl.get_hl_attr("DiagnosticHint", "fg") end, }, { text = function(buffer) return has_diagnostics(buffer) and "]" or "" end, fg = function() return hl.get_hl_attr("WinSeparator", "fg") end, }, { text = " ", }, }, buffers = { delete_on_right_click = false, }, mappings = { disable_mouse = true, }, sidebar = { components = { { text = function() local width = require("cokeline.sidebar").get_width "left" if #state.nvim_tree_root > width then return state.nvim_tree_root:sub(1, width - 2) .. "…" else return state.nvim_tree_root end end, bg = function() return hl.get_hl_attr("TabLineSel", "bg") end, }, { text = function() return string.rep( " ", math.max(0, require("cokeline.sidebar").get_width "left" - #state.nvim_tree_root) ) end, bg = function() return hl.get_hl_attr("TabLineSel", "bg") end, }, }, }, } end, dependencies = { "nvim-tree/nvim-web-devicons", "nvim-lua/plenary.nvim" }, keys = { { "bp", function() require("cokeline.mappings").pick "focus" end, desc = "Pick a buffer to focus", }, { "bd", function() require("cokeline.mappings").pick "close" end, desc = "Pick a buffer to close", }, { "p", function() require("cokeline.mappings").by_step("switch", -1) end, desc = "Move current buffer left", silent = true, }, { "n", function() require("cokeline.mappings").by_step("switch", 1) end, desc = "Move current buffer right", silent = true, }, }, }