Squashed 'users/daniel/configs/system/nvim/nvim/' content from commit e088bce
git-subtree-dir: users/daniel/configs/system/nvim/nvim git-subtree-split: e088bce2bd90c0b5c35d13a8615a55455b96294d
This commit is contained in:
137
lua/astronvim/utils/status/condition.lua
Normal file
137
lua/astronvim/utils/status/condition.lua
Normal file
@@ -0,0 +1,137 @@
|
||||
--- ### AstroNvim Status Conditions
|
||||
--
|
||||
-- Statusline related condition functions to use with Heirline
|
||||
--
|
||||
-- This module can be loaded with `local condition = require "astronvim.utils.status.condition"`
|
||||
--
|
||||
-- @module astronvim.utils.status.condition
|
||||
-- @copyright 2023
|
||||
-- @license GNU General Public License v3.0
|
||||
|
||||
local M = {}
|
||||
|
||||
local env = require "astronvim.utils.status.env"
|
||||
|
||||
--- A condition function if the window is currently active
|
||||
---@return boolean # whether or not the window is currently actie
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.is_active }
|
||||
function M.is_active() return vim.api.nvim_get_current_win() == tonumber(vim.g.actual_curwin) end
|
||||
|
||||
--- A condition function if the buffer filetype,buftype,bufname match a pattern
|
||||
---@param patterns table the table of patterns to match
|
||||
---@param bufnr number of the buffer to match (Default: 0 [current])
|
||||
---@return boolean # whether or not LSP is attached
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = function() return require("astronvim.utils.status").condition.buffer_matches { buftype = { "terminal" } } end }
|
||||
function M.buffer_matches(patterns, bufnr)
|
||||
for kind, pattern_list in pairs(patterns) do
|
||||
if env.buf_matchers[kind](pattern_list, bufnr) then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
--- A condition function if a macro is being recorded
|
||||
---@return boolean # whether or not a macro is currently being recorded
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.is_macro_recording }
|
||||
function M.is_macro_recording() return vim.fn.reg_recording() ~= "" end
|
||||
|
||||
--- A condition function if search is visible
|
||||
---@return boolean # whether or not searching is currently visible
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.is_hlsearch }
|
||||
function M.is_hlsearch() return vim.v.hlsearch ~= 0 end
|
||||
|
||||
--- A condition function if showcmdloc is set to statusline
|
||||
---@return boolean # whether or not statusline showcmd is enabled
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.is_statusline_showcmd }
|
||||
function M.is_statusline_showcmd() return vim.fn.has "nvim-0.9" == 1 and vim.opt.showcmdloc:get() == "statusline" end
|
||||
|
||||
--- A condition function if the current file is in a git repo
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not the current file is in a git repo
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.is_git_repo }
|
||||
function M.is_git_repo(bufnr)
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
return vim.b[bufnr or 0].gitsigns_head or vim.b[bufnr or 0].gitsigns_status_dict
|
||||
end
|
||||
|
||||
--- A condition function if there are any git changes
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not there are any git changes
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.git_changed }
|
||||
function M.git_changed(bufnr)
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
local git_status = vim.b[bufnr or 0].gitsigns_status_dict
|
||||
return git_status and (git_status.added or 0) + (git_status.removed or 0) + (git_status.changed or 0) > 0
|
||||
end
|
||||
|
||||
--- A condition function if the current buffer is modified
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not the current buffer is modified
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.file_modified }
|
||||
function M.file_modified(bufnr)
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
return vim.bo[bufnr or 0].modified
|
||||
end
|
||||
|
||||
--- A condition function if the current buffer is read only
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not the current buffer is read only or not modifiable
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.file_read_only }
|
||||
function M.file_read_only(bufnr)
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
local buffer = vim.bo[bufnr or 0]
|
||||
return not buffer.modifiable or buffer.readonly
|
||||
end
|
||||
|
||||
--- A condition function if the current file has any diagnostics
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not the current file has any diagnostics
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.has_diagnostics }
|
||||
function M.has_diagnostics(bufnr)
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
return vim.g.diagnostics_mode > 0 and #vim.diagnostic.get(bufnr or 0) > 0
|
||||
end
|
||||
|
||||
--- A condition function if there is a defined filetype
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not there is a filetype
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.has_filetype }
|
||||
function M.has_filetype(bufnr)
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
return vim.fn.empty(vim.fn.expand "%:t") ~= 1 and vim.bo[bufnr or 0].filetype and vim.bo[bufnr or 0].filetype ~= ""
|
||||
end
|
||||
|
||||
--- A condition function if Aerial is available
|
||||
---@return boolean # whether or not aerial plugin is installed
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.aerial_available }
|
||||
-- function M.aerial_available() return is_available "aerial.nvim" end
|
||||
function M.aerial_available() return package.loaded["aerial"] end
|
||||
|
||||
--- A condition function if LSP is attached
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not LSP is attached
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.lsp_attached }
|
||||
function M.lsp_attached(bufnr)
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
return next(vim.lsp.get_active_clients { bufnr = bufnr or 0 }) ~= nil
|
||||
end
|
||||
|
||||
--- A condition function if treesitter is in use
|
||||
---@param bufnr table|integer a buffer number to check the condition for, a table with bufnr property, or nil to get the current buffer
|
||||
---@return boolean # whether or not treesitter is active
|
||||
-- @usage local heirline_component = { provider = "Example Provider", condition = require("astronvim.utils.status").condition.treesitter_available }
|
||||
function M.treesitter_available(bufnr)
|
||||
if not package.loaded["nvim-treesitter"] then return false end
|
||||
if type(bufnr) == "table" then bufnr = bufnr.bufnr end
|
||||
local parsers = require "nvim-treesitter.parsers"
|
||||
return parsers.has_parser(parsers.get_buf_lang(bufnr or vim.api.nvim_get_current_buf()))
|
||||
end
|
||||
|
||||
--- A condition function if the foldcolumn is enabled
|
||||
---@return boolean # true if vim.opt.foldcolumn > 0, false if vim.opt.foldcolumn == 0
|
||||
function M.foldcolumn_enabled() return vim.opt.foldcolumn:get() ~= "0" end
|
||||
|
||||
--- A condition function if the number column is enabled
|
||||
---@return boolean # true if vim.opt.number or vim.opt.relativenumber, false if neither
|
||||
function M.numbercolumn_enabled() return vim.opt.number:get() or vim.opt.relativenumber:get() end
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user