From f14a6a21b3bbbfe91f221db2bd3d9e73acb9b57c Mon Sep 17 00:00:00 2001 From: kamack38 <64226248+kamack38@users.noreply.github.com> Date: Sun, 3 May 2026 14:46:02 +0200 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Add=20toggle=20actio?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/guttermarks/actions.lua | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lua/guttermarks/actions.lua b/lua/guttermarks/actions.lua index 7f2062b..40f40d4 100644 --- a/lua/guttermarks/actions.lua +++ b/lua/guttermarks/actions.lua @@ -1,5 +1,34 @@ local M = {} +--Action to toggle (add or delete) a mark at current cursor position +--or specified position +--@param mark number|nil - mark char +---@param bufnr number|nil - buffer number to use (default to current buffer) +---@param cursor_pos [integer, integer]|nil # (row, col) tuple - mark position to use (default to cursor position) +M.toggle_mark = function(mark, bufnr, cursor_pos) + if mark == nil then + local input = vim.fn.getchar() + mark = type(input) == "number" and vim.fn.nr2char(input) or input + + if not M.is_letter(mark) then + return + end + end + + bufnr = bufnr or vim.api.nvim_get_current_buf() + local line, col = unpack(cursor_pos or vim.api.nvim_win_get_cursor(0)) + + local pos = vim.api.nvim_buf_get_mark(bufnr, mark) + local row, _ = unpack(pos) + if row ~= line then + vim.api.nvim_buf_set_mark(bufnr, mark, line, col, {}) + else + vim.api.nvim_buf_del_mark(bufnr, mark) + end + + require("guttermarks").refresh() +end + ---Action to delete a mark at current cursor position ---or selected position ---@param bufnr number|nil - buffer number to use (default to current buffer) From eeb320fbd2414af3933c8a24cfccc1eeeb453e4c Mon Sep 17 00:00:00 2001 From: kamack38 <64226248+kamack38@users.noreply.github.com> Date: Sun, 3 May 2026 14:50:00 +0200 Subject: [PATCH 2/5] =?UTF-8?q?style:=20=F0=9F=92=84=20Fix=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/guttermarks/actions.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lua/guttermarks/actions.lua b/lua/guttermarks/actions.lua index 40f40d4..9a0b92e 100644 --- a/lua/guttermarks/actions.lua +++ b/lua/guttermarks/actions.lua @@ -1,8 +1,8 @@ local M = {} ---Action to toggle (add or delete) a mark at current cursor position ---or specified position ---@param mark number|nil - mark char +---Action to toggle (add or delete) a mark at current cursor position +---or specified position +---@param mark number|nil - mark char ---@param bufnr number|nil - buffer number to use (default to current buffer) ---@param cursor_pos [integer, integer]|nil # (row, col) tuple - mark position to use (default to cursor position) M.toggle_mark = function(mark, bufnr, cursor_pos) From d283b61533ddbd4e9c783baf9e74aa3c391a7bef Mon Sep 17 00:00:00 2001 From: kamack38 <64226248+kamack38@users.noreply.github.com> Date: Sun, 3 May 2026 14:53:43 +0200 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Action=20to=20delete?= =?UTF-8?q?=20all=20marks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/guttermarks/actions.lua | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lua/guttermarks/actions.lua b/lua/guttermarks/actions.lua index 9a0b92e..383d5b6 100644 --- a/lua/guttermarks/actions.lua +++ b/lua/guttermarks/actions.lua @@ -51,6 +51,26 @@ M.delete_mark = function(bufnr, line) require("guttermarks").refresh() end +---Action to delete all marks in current buffer +---or selected buffer +---@param bufnr number|nil - buffer number to use (default to current buffer) +function M.delete_all_marks(bufnr) + bufnr = bufnr or vim.api.nvim_get_current_buf() + + for _, m in ipairs(vim.fn.getmarklist(bufnr)) do + if M.is_lower(m.mark:sub(2)) then + vim.api.nvim_buf_del_mark(bufnr, m.mark:sub(2)) + end + end + + for _, m in ipairs(vim.fn.getmarklist()) do + if m.pos[1] == bufnr and M.is_upper(m.mark:sub(2)) then + vim.api.nvim_del_mark(m.mark:sub(2)) + end + end + require("guttermarks").refresh() +end + ---Action to send marks to quickfix list ---@param opts table|nil - options table with local_mark, global_mark, special_mark booleans M.marks_to_quickfix = function(opts) From 1ab3d7254586550e66f2ddc0f05b3a2f7d5df7d4 Mon Sep 17 00:00:00 2001 From: kamack38 <64226248+kamack38@users.noreply.github.com> Date: Sun, 3 May 2026 14:57:20 +0200 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Use=20utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/guttermarks/actions.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/guttermarks/actions.lua b/lua/guttermarks/actions.lua index 383d5b6..88eb8b7 100644 --- a/lua/guttermarks/actions.lua +++ b/lua/guttermarks/actions.lua @@ -7,10 +7,11 @@ local M = {} ---@param cursor_pos [integer, integer]|nil # (row, col) tuple - mark position to use (default to cursor position) M.toggle_mark = function(mark, bufnr, cursor_pos) if mark == nil then + local utils = require("guttermarks.utils") local input = vim.fn.getchar() mark = type(input) == "number" and vim.fn.nr2char(input) or input - if not M.is_letter(mark) then + if not utils.is_letter(mark) then return end end @@ -56,15 +57,16 @@ end ---@param bufnr number|nil - buffer number to use (default to current buffer) function M.delete_all_marks(bufnr) bufnr = bufnr or vim.api.nvim_get_current_buf() + local utils = require("guttermarks.utils") for _, m in ipairs(vim.fn.getmarklist(bufnr)) do - if M.is_lower(m.mark:sub(2)) then + if utils.is_lower(m.mark:sub(2)) then vim.api.nvim_buf_del_mark(bufnr, m.mark:sub(2)) end end for _, m in ipairs(vim.fn.getmarklist()) do - if m.pos[1] == bufnr and M.is_upper(m.mark:sub(2)) then + if m.pos[1] == bufnr and utils.is_upper(m.mark:sub(2)) then vim.api.nvim_del_mark(m.mark:sub(2)) end end From 7a32261c54eb4ce6c6715d5c22ab838c75d7ed6f Mon Sep 17 00:00:00 2001 From: kamack38 <64226248+kamack38@users.noreply.github.com> Date: Sun, 3 May 2026 15:20:42 +0200 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20Add=20delete=5Fspeci?= =?UTF-8?q?fied=5Fmark=20action?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Simplify input getting --- lua/guttermarks/actions.lua | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/lua/guttermarks/actions.lua b/lua/guttermarks/actions.lua index 88eb8b7..2bfb1c9 100644 --- a/lua/guttermarks/actions.lua +++ b/lua/guttermarks/actions.lua @@ -2,19 +2,11 @@ local M = {} ---Action to toggle (add or delete) a mark at current cursor position ---or specified position ----@param mark number|nil - mark char +---@param mark string|nil - mark char ---@param bufnr number|nil - buffer number to use (default to current buffer) ---@param cursor_pos [integer, integer]|nil # (row, col) tuple - mark position to use (default to cursor position) M.toggle_mark = function(mark, bufnr, cursor_pos) - if mark == nil then - local utils = require("guttermarks.utils") - local input = vim.fn.getchar() - mark = type(input) == "number" and vim.fn.nr2char(input) or input - - if not utils.is_letter(mark) then - return - end - end + mark = mark or vim.fn.getcharstr() bufnr = bufnr or vim.api.nvim_get_current_buf() local line, col = unpack(cursor_pos or vim.api.nvim_win_get_cursor(0)) @@ -52,6 +44,27 @@ M.delete_mark = function(bufnr, line) require("guttermarks").refresh() end +---Action to delete a specified mark in current buffer +---or specified buffer +---@param mark string|nil - mark to use (default to current buffer) +---@param bufnr number|nil - buffer number to use (default to current buffer) +function M.delete_specified_mark(mark, bufnr) + bufnr = bufnr or vim.api.nvim_get_current_buf() + local utils = require("guttermarks.utils") + + mark = mark or vim.fn.getcharstr() + + if utils.is_lower(mark) then + vim.api.nvim_buf_del_mark(bufnr, mark) + elseif utils.is_upper(mark) then + vim.api.nvim_del_mark(mark) + else + return + end + + require("guttermarks").refresh() +end + ---Action to delete all marks in current buffer ---or selected buffer ---@param bufnr number|nil - buffer number to use (default to current buffer)