From 349dbe10e929ba1fddd6e1bb8d47c415c8bdd9ba Mon Sep 17 00:00:00 2001 From: David O'Trakoun Date: Tue, 9 May 2023 22:00:01 -0400 Subject: [PATCH] show count of modified/normal buffers --- nvim/lua/dko/heirline/bufferstats.lua | 31 +++++++++++++++++++++++++++ nvim/lua/dko/heirline/tabline.lua | 1 + nvim/lua/dko/utils/buffers.lua | 23 ++++++++++++++++++++ nvim/lua/dko/utils/string.lua | 7 +++--- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 nvim/lua/dko/heirline/bufferstats.lua create mode 100644 nvim/lua/dko/utils/buffers.lua diff --git a/nvim/lua/dko/heirline/bufferstats.lua b/nvim/lua/dko/heirline/bufferstats.lua new file mode 100644 index 000000000..9248ebe6f --- /dev/null +++ b/nvim/lua/dko/heirline/bufferstats.lua @@ -0,0 +1,31 @@ +return { + init = function(self) + self.all = vim.api.nvim_list_bufs() + + self.normal = vim.tbl_filter(function(bufnr) + return not require("dko.utils.buffer").is_special(bufnr) + end, self.all) + + self.modified = vim.tbl_filter(function(bufnr) + return vim.api.nvim_buf_get_option(bufnr, "modified") + end, self.normal) + end, + { + provider = "  ", + hl = "StatusLineNC", + }, + { + provider = function(self) + return ("%d"):format(#self.modified) + end, + hl = function(self) + return #self.modified > 0 and "TODO" or "StatusLineNC" + end, + }, + { + provider = function(self) + return ("/%d"):format(#self.normal) + end, + hl = "StatusLineNC", + }, +} diff --git a/nvim/lua/dko/heirline/tabline.lua b/nvim/lua/dko/heirline/tabline.lua index 48d25db42..8efe6876d 100644 --- a/nvim/lua/dko/heirline/tabline.lua +++ b/nvim/lua/dko/heirline/tabline.lua @@ -10,6 +10,7 @@ return { require("dko.heirline.cwd"), require("dko.heirline.git"), + require("dko.heirline.bufferstats"), { provider = "%=", hl = "StatusLineNC" }, diff --git a/nvim/lua/dko/utils/buffers.lua b/nvim/lua/dko/utils/buffers.lua new file mode 100644 index 000000000..4a0f85a1e --- /dev/null +++ b/nvim/lua/dko/utils/buffers.lua @@ -0,0 +1,23 @@ +--- +-- Operations on multiple buffers +--- + +local M = {} + +---@param bufnrs table like vim.api.nvim_list_bufs() +---@return table only modified +M.filter_modified = function(bufnrs) + return vim.tbl_filter(function(bufnr) + return vim.api.nvim_buf_get_option(bufnr, "modified") + end, bufnrs) +end + +---@param bufnrs table like vim.api.nvim_list_bufs() +---@return table only special +M.filter_special = function(bufnrs) + return vim.tbl_filter(function(bufnr) + return require('dko.utils.buffer').is_special(bufnr) + end, bufnrs) +end + +return M diff --git a/nvim/lua/dko/utils/string.lua b/nvim/lua/dko/utils/string.lua index be4349036..cac04b600 100644 --- a/nvim/lua/dko/utils/string.lua +++ b/nvim/lua/dko/utils/string.lua @@ -10,11 +10,12 @@ end -- alt F ғ (ghayn) -- alt Q ꞯ (currently using ogonek) local smallcaps = - "ᴀʙᴄᴅᴇꜰɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ‹›" -local letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ<>" + "ᴀʙᴄᴅᴇꜰɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ‹›⁰¹²³⁴⁵⁶⁷⁸⁹" +local normal = "ABCDEFGHIJKLMNOPQRSTUVWXYZ<>0123456789" + ---@param text string M.smallcaps = function(text) - return vim.fn.tr(text:upper(), letters, smallcaps) + return vim.fn.tr(text:upper(), normal, smallcaps) end return M