From 958f5a6e56bd78db937c3e633ace0525fd64c82c Mon Sep 17 00:00:00 2001 From: Joshua Finch Date: Sun, 11 Aug 2024 13:01:35 -0500 Subject: [PATCH] feat: Adding a new function and shortcut for toggling a TODO checkbox when using a markdown file for a TODO list. --- nvim/lua/plugins/telekasten.lua | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/nvim/lua/plugins/telekasten.lua b/nvim/lua/plugins/telekasten.lua index 2a8a9f1..30f4adb 100644 --- a/nvim/lua/plugins/telekasten.lua +++ b/nvim/lua/plugins/telekasten.lua @@ -1,3 +1,30 @@ +function string.insert(str1, str2, pos) + return str1:sub(1, pos)..str2..str1:sub(pos+1) +end + +function toggleTODO(current_line) + local todo_str = '%- %[ %] ' + local todo_checked_str = '%- %[x%] ' + + if current_line:find(todo_str, 1) then + return string.gsub(current_line, todo_str, '', 1) + elseif current_line:find(todo_checked_str, 1) then + return string.gsub(current_line, todo_checked_str, '', 1) + else + local first_idx = current_line:find('[%-%w]', 1) - 1 + return string.insert(current_line, '- [ ] ', first_idx) + end +end + +vim.api.nvim_create_user_command('ToggleTODO', function() + local current_line = vim.api.nvim_get_current_line() + local row, col = unpack(vim.api.nvim_win_get_cursor(0)) + + local new_line = toggleTODO(current_line) + + vim.api.nvim_buf_set_lines(0, row-1, row, true, {new_line}) +end, {}) + return { 'renerocksai/telekasten.nvim', config = function() @@ -25,6 +52,7 @@ return { { 'zp', ':Telekasten panel' }, { 'zn', ':Telekasten find_notes' }, { 'zt', ':Telekasten show_tags' }, + { 'tt', ':ToggleTODO' }, }, -- lazy = false }