aboutsummaryrefslogtreecommitdiff
path: root/lua/plugins/heirline.backup.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/plugins/heirline.backup.lua')
-rw-r--r--lua/plugins/heirline.backup.lua733
1 files changed, 0 insertions, 733 deletions
diff --git a/lua/plugins/heirline.backup.lua b/lua/plugins/heirline.backup.lua
deleted file mode 100644
index d65de92..0000000
--- a/lua/plugins/heirline.backup.lua
+++ /dev/null
@@ -1,733 +0,0 @@
-local conditions = require("heirline.conditions")
-local utils = require("heirline.utils")
-
-require("nvim-gps").setup({
- icons = {
- ["class-name"] = " ",
- ["function-name"] = " ",
- ["method-name"] = " ",
- ["container-name"] = "炙",
- ["tag-name"] = "炙",
- },
-})
-
-vim.o.laststatus = 3
-
-local colors = {
- bg = "#333842",
- brown = "#504945",
- white = "#f8f8f0",
- grey = "#8F908A",
- black = "#000000",
- pink = "#f92672",
- green = "#a6e22e",
- blue = "#66d9ef",
- yellow = "#e6db74",
- orange = "#fd971f",
- purple = "#ae81ff",
- red = "#e95678",
- 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",
- },
-}
-
-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()
- 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.green,
- i = colors.pink,
- v = colors.blue,
- V = colors.blue,
- [""] = colors.blue,
- c = colors.red,
- s = colors.purple,
- S = colors.purple,
- [""] = colors.purple,
- R = colors.orange,
- r = colors.orange,
- ["!"] = colors.red,
- t = colors.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] .. "%)"
- 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 { bg = self.mode_colors[mode], fg = colors.bg, bold = true }
- end,
-}
-
-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,
-}
--- 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, 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 },
-}
-
-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 },
- },
-}
-
--- 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 = colors.cyan, bold = true, force = true, bg = colors.bg }
- end
- end,
-}
-
--- 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 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,
- {
- 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 },
- },
-}
-
-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 = colors.orange, bg = colors.bg },
- {
- -- git branch name
- provider = function(self)
- return " " .. self.status_dict.head
- end,
- 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 = function(self)
- local count = self.status_dict.added or 0
- return count > 0 and ("  " .. count)
- end,
- hl = { fg = colors.git.add, bg = colors.bg },
- },
- {
- provider = function(self)
- local count = self.status_dict.removed or 0
- return count > 0 and ("  " .. count)
- end,
- hl = { fg = colors.git.del, bg = colors.bg },
- },
- {
- provider = function(self)
- local count = self.status_dict.changed or 0
- return count > 0 and ("  " .. count)
- end,
- hl = { fg = colors.git.change, bg = colors.bg },
- },
-}
-
-local WorkDir = {
- provider = function()
- local icon = " "
- local cwd = vim.fn.getcwd(0)
- cwd = vim.fn.fnamemodify(cwd, ":~")
- if not conditions.width_percent_below(#cwd, 0.25) then
- cwd = vim.fn.pathshorten(cwd)
- end
- local trail = cwd:sub(-1) == "/" and "" or "/"
- return icon .. cwd .. trail
- end,
- hl = { fg = colors.blue, bold = true, bg = colors.bg },
-}
-
-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 = { bold = true, bg = colors.bg },
-}
-
-local Ruler = {
- -- %l = current line number
- -- %L = number of lines in the buffer
- -- %c = column number
- -- %P = percentage through file of displayed window
- provider = "%7 %p%% Ln %l, Col %c",
-}
-
-local Align = { provider = "%=", hl = { bg = colors.bg } }
-local Space = { provider = " " }
-
-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,
-}
-
-local FileType = {
- provider = function()
- 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:upper()
- end,
-}
-
-FileInfoBlock = utils.insert(
- FileInfoBlock,
- FileEncoding,
- Space,
- FileIcon,
- FileType,
- { provider = "%<" } -- this means that the statusline is cut here when there's not enough space
-)
-
-local FileNameShort = {
- 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, ":t")
- if filename == "" then
- return "[No Name]"
- end
- return filename
- end,
- hl = { fg = colors.gray, bg = colors.bg },
-}
-
-local FileNameShortBlock = {
- init = function(self)
- self.filename = vim.api.nvim_buf_get_name(0)
- end,
-}
-
-FileNameShortBlock = utils.insert(
- FileNameShortBlock,
- FileIcon,
- FileNameShort,
- { provider = "%<" } -- this means that the statusline is cut here when there's not enough space
-)
-
-local Gps = {
- condition = require("nvim-gps").is_available,
- provider = function()
- local loc = require("nvim-gps").get_location()
- if loc == "" then
- return ""
- end
- return "> " .. loc
- end,
- hl = { fg = colors.gray, bg = colors.bg },
-}
-
-local DefaultStatusline = {
- ViMode,
- Space,
- FileNameBlock,
- Space,
- Diagnostics,
- Align,
- Ruler,
- Space,
- FileInfoBlock,
- Space,
- Git,
-}
-
-local SpecialStatusline = {
- condition = function()
- return conditions.buffer_matches({
- buftype = { "nofile", "prompt", "help", "quickfix" },
- filetype = { "^git.*", "fugitive" },
- })
- end,
- FileType,
- Space,
- Align,
-}
-
-local TerminalStatusline = {
- condition = function()
- return conditions.buffer_matches({ buftype = { "terminal" } })
- end,
- TerminalName,
- Align,
-}
-
-local StatusLines = {
- fallthrough = false,
- SpecialStatusline,
- TerminalStatusline,
- DefaultStatusline,
-}
-
-local GSpace = { provider = " ", hl = { bg = colors.bg } }
-
-local WinBars = {
- fallthrough = false,
- {
- -- Hide the winbar for special buffers
- condition = function()
- return conditions.buffer_matches({
- buftype = { "nofile", "prompt", "help", "quickfix", "nofile", "promt" },
- filetype = { "^git.*", "fugitive" },
- })
- end,
- provider = "",
- },
- {
- -- An inactive winbar for regular files
- condition = function()
- return conditions.buffer_matches({ buftype = { "terminal" } }) and not conditions.is_active()
- end,
- utils.surround(
- { "", "" },
- colors.bright_bg,
- { hl = { fg = "gray", force = true }, GSpace, TerminalName, Align }
- ),
- },
- {
- -- A special winbar for terminals
- condition = function()
- return conditions.buffer_matches({ buftype = { "terminal" } })
- end,
- utils.surround({ "", "" }, colors.dark_red, {
- GSpace,
- TerminalName,
- Align,
- }),
- },
- {
- -- An inactive winbar for regular files
- condition = function()
- return not conditions.is_active()
- end,
- utils.surround(
- { "", "" },
- colors.bright_bg,
- { hl = { fg = "gray", force = true }, GSpace, FileNameShortBlock, Align }
- ),
- },
- -- A winbar for regular files
- { GSpace, FileNameShortBlock, GSpace, Gps, Align },
-}
-
-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,
-})
-
--- 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,
-}
-
-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 TablineDiagnostics = {
- 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(self.bufnr, { severity = vim.diagnostic.severity.ERROR })
- self.warnings = #vim.diagnostic.get(self.bufnr, { severity = vim.diagnostic.severity.WARN })
- self.hints = #vim.diagnostic.get(self.bufnr, { severity = vim.diagnostic.severity.HINT })
- self.info = #vim.diagnostic.get(self.bufnr, { severity = vim.diagnostic.severity.INFO })
- end,
- {
- provider = function(self)
- return self.errors > 0 and (self.error_icon .. self.errors .. " ")
- end,
- hl = { fg = colors.diag.error },
- },
- {
- provider = function(self)
- return self.warnings > 0 and (self.warn_icon .. self.warnings .. " ")
- end,
- hl = { fg = colors.diag.warn },
- },
- {
- provider = function(self)
- return self.info > 0 and (self.info_icon .. self.info .. " ")
- end,
- hl = { fg = colors.diag.info },
- },
- {
- provider = function(self)
- return self.hints > 0 and (self.hint_icon .. self.hints)
- end,
- hl = { fg = colors.diag.hint },
- },
-}
-
-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"
- 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 = true })
- else
- vim.api.nvim_win_set_buf(0, minwid)
- end
- end,
- minwid = function(self)
- return self.bufnr
- end,
- name = "heirline_tabline_buffer_callback",
- },
- TablineFileIcon,
- TablineFileName,
- TablineFileFlags,
- TablineDiagnostics,
-}
-
--- a nice "x" button to close the buffer
-local TablineCloseButton = {
- condition = function(self)
- return not vim.bo[self.bufnr].modified
- end,
- { provider = " " },
- {
- provider = "",
- hl = { fg = "gray" },
- 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({ "", "" }, function(self)
- if self.is_active then
- return utils.get_highlight("TabLineSel").bg
- else
- return utils.get_highlight("TabLine").bg
- end
-end, { TablineFileNameBlock, TablineCloseButton })
-
--- and here we go
-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, ">")
- -- by the way, open a lot of buffers and try clicking them ;)
-)
-
-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 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",
-}
-
-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,
-}
-
-local TabLine = { TabLineOffset, BufferLine, TabPages }
-
-require("heirline").setup(StatusLines, WinBars, TabLine)
-
-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)