From 9ee90e6309c4219d6a06b771b53db6a59c8d32fa Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 26 May 2025 01:34:47 +0300 Subject: [PATCH] docs: update readme --- README.md | 111 +++++++++++++++++++++++----- assets/img/2025-05-21_12-16-25.webp | Bin 3316 -> 0 bytes assets/img/2025-05-26_01-33-01.png | Bin 0 -> 19208 bytes lua/lualine-harpoon/component.lua | 30 +++----- lua/lualine-harpoon/config.lua | 13 +--- 5 files changed, 106 insertions(+), 48 deletions(-) delete mode 100644 assets/img/2025-05-21_12-16-25.webp create mode 100644 assets/img/2025-05-26_01-33-01.png diff --git a/README.md b/README.md index 09b4b9f..550a6f3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # lualine-harpoon.nvim -![](assets/img/2025-05-21_12-16-25.webp) +![](assets/img/2025-05-26_01-33-01.png) A tiny [Lualine](https://github.com/nvim-lualine/lualine.nvim) component for [ThePrimeagen/harpoon2](https://github.com/ThePrimeagen/harpoon). @@ -11,7 +11,6 @@ Displays your current Harpoon mark as `[x/y]` in your statusline. - Neovim 0.8+ - [nvim-lualine/lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) - [ThePrimeagen/harpoon](https://github.com/ThePrimeagen/harpoon) (harpoon2 branch) -- [nvim-lua/plenary.nvim](https://github.com/nvim-lua/plenary.nvim) > [!IMPORTANT] > Make sure to install [harpoon2](https://github.com/ThePrimeagen/harpoon/tree/harpoon2), not harpoon on `master` branch. @@ -27,7 +26,6 @@ Displays your current Harpoon mark as `[x/y]` in your statusline. "kristoferssolo/lualine-harpoon.nvim", dependencies = { { "ThePrimeagen/harpoon", branch = "harpoon2" } - "nvim-lua/plenary.nvim", }, }, } @@ -39,40 +37,119 @@ Once installed, simply add `"harpoon"` to your `lualine.setup` sections. Lualine will auto-load `lua/lualine/components/harpoon.lua` for you: ```lua -require("lualine").setup({ +{ sections = { lualine_c = { "harpoon", }, }, -}) +} ``` -When you have Harpoon marks, you’ll see an indicator like `[2/5]` in your statusline. +When you have Harpoon marks, you'll see an indicator like `[2/5]` in your statusline. -## Default Options +## Configuration -You can pass options directly in your Lualine sections: +### Global Setup + +You can configure the plugin globally using the setup function: ```lua -require("lualine").setup({ +{ + -- Configure symbols used in the display + symbol = { + open = "[", + close = "]", + separator = "/", + unknown = "?", + }, + -- Icon displayed before the harpoon status + icon = "󰀱", + -- Show component even when there are no harpoon marks + show_when_empty = false, + -- Custom format function (overrides default formatting) + format = function(current, total) + return string.format("Harpoon: %s/%d", current or "?", total) + end, + -- Cache timeout in milliseconds for performance + cache_timeout = 100, +} +``` + +### Per-Component Configuration + +You can also pass options directly in your Lualine sections: + +```lua +{ + sections = { + lualine_c = { + { + "harpoon", + symbol = { + open = "(", + close = ")", + separator = "|", + unknown = "?", + }, + icon = "🎯", + show_when_empty = true, + }, + }, + }, +} +``` + +## Configuration Options + +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `symbol.open` | `string` | `"["` | Opening bracket for the display | +| `symbol.close` | `string` | `"]"` | Closing bracket for the display | +| `symbol.separator` | `string` | `"/"` | Separator between current and total | +| `symbol.unknown` | `string` | `"?"` | Symbol when current position is unknown | +| `icon` | `string` | `"󰀱"` | Icon displayed before the status | +| `show_when_empty` | `boolean` | `false` | Show component when no harpoon marks exist | +| `format` | `function?` | `nil` | Custom format function `(current, total) -> string` | +| `cache_timeout` | `number` | `100` | Cache timeout in milliseconds for performance | + +## Custom Formatting + +You can provide a custom format function to completely control the display: + +```lua +{ sections = { lualine_c = { { "harpoon", - symbol = { - open = "[", - close = "]", - separator = "/", - unknown = "?", - }, - icon = "󰀱", + format = function(current, total) + if total == 0 then + return "No marks" + end + local mark = current and ("Mark " .. current) or "Not marked" + return string.format("%s (%d total)", mark, total) + end, }, }, }, -}) +} ``` +## Health Check + +Run `:checkhealth lualine-harpoon` to verify your setup and dependencies. + +## Performance + +The component includes caching to avoid unnecessary recalculation on every statusline update. The cache is automatically invalidated when: + +- You switch buffers +- Buffer content changes +- Harpoon marks are modified + +You can adjust the cache timeout via the `cache_timeout` option if needed. + ## Acknowledgments and alternatives This plugin was inspired by and serves as an alternative to [letieu/harpoon-lualine](https://github.com/letieu/harpoon-lualine). diff --git a/assets/img/2025-05-21_12-16-25.webp b/assets/img/2025-05-21_12-16-25.webp deleted file mode 100644 index c14e00063d287994f5bdc2ea41f5d0b1ac9506bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3316 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 0 then + -- Default formatting when we have marks local s = self.options.symbol local n = st.current and tostring(st.current) or s.unknown result = string.format("%s%s%s%d%s", s.open, n, s.separator, st.total, s.close) + elseif self.options.show_when_empty then + -- Show something when no marks exist, but only if show_when_empty is true + local s = self.options.symbol + if type(self.options.empty_text) == "string" then + result = self.options.empty_text + end + result = string.format("%s0%s0%s", s.open, s.separator, s.close) end self:update_cache(result) diff --git a/lua/lualine-harpoon/config.lua b/lua/lualine-harpoon/config.lua index c802974..794598b 100644 --- a/lua/lualine-harpoon/config.lua +++ b/lua/lualine-harpoon/config.lua @@ -2,9 +2,8 @@ ---@field symbol LualineHarpoonSymbols ---@field icon string ---@field show_when_empty boolean ----@field show_icon boolean ---@field format function? ----@field colors LualineHarpoonColors +---@field empty_text string? ---@field cache_timeout integer ---@class LualineHarpoonSymbols @@ -13,10 +12,6 @@ ---@field separator string ---@field unknown string ----@class LualineHarpoonColors ----@field active string? ----@field inactive string? - ---@type LualineHarpoonConfig local M = { symbol = { @@ -27,12 +22,8 @@ local M = { }, icon = "󰀱", show_when_empty = false, - show_icon = true, format = nil, - colors = { - active = nil, - inactive = nil, - }, + empty_text = nil, cache_timeout = 100, }