|
|
@ -1,8 +1,15 @@
|
|
|
|
-- Create the module table
|
|
|
|
-- Create the module table
|
|
|
|
local M = {}
|
|
|
|
local M = {}
|
|
|
|
|
|
|
|
|
|
|
|
-- add new todo line when previous is already a todo
|
|
|
|
-- Default configuration
|
|
|
|
local function press_enter()
|
|
|
|
local defaults = {
|
|
|
|
|
|
|
|
filetypes = { "markdown", "text", "norg" }, -- Filetypes to activate the plugin for
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Internal function to set up buffer-local keymaps
|
|
|
|
|
|
|
|
local function setup_buffer_keymaps()
|
|
|
|
|
|
|
|
-- add new todo line when previous is already a todo
|
|
|
|
|
|
|
|
local function press_enter()
|
|
|
|
local current_line = vim.api.nvim_get_current_line()
|
|
|
|
local current_line = vim.api.nvim_get_current_line()
|
|
|
|
local index, spaces = string.find(current_line, "^%s*")
|
|
|
|
local index, spaces = string.find(current_line, "^%s*")
|
|
|
|
|
|
|
|
|
|
|
@ -24,10 +31,10 @@ local function press_enter()
|
|
|
|
else
|
|
|
|
else
|
|
|
|
vim.api.nvim_feedkeys("\n", "n", true)
|
|
|
|
vim.api.nvim_feedkeys("\n", "n", true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- indent line if tab is pressed when line is a todo
|
|
|
|
-- indent line if tab is pressed when line is a todo
|
|
|
|
local function press_tab()
|
|
|
|
local function press_tab()
|
|
|
|
local current_line = vim.api.nvim_get_current_line()
|
|
|
|
local current_line = vim.api.nvim_get_current_line()
|
|
|
|
|
|
|
|
|
|
|
|
-- Check if current line matches the patterns
|
|
|
|
-- Check if current line matches the patterns
|
|
|
@ -38,10 +45,10 @@ local function press_tab()
|
|
|
|
print("tab pressed, allegedly")
|
|
|
|
print("tab pressed, allegedly")
|
|
|
|
vim.api.nvim_feedkeys("C-t", "i", true)
|
|
|
|
vim.api.nvim_feedkeys("C-t", "i", true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- indent line if shift tab is pressed when line is a todo
|
|
|
|
-- indent line if shift tab is pressed when line is a todo
|
|
|
|
local function press_shift_tab()
|
|
|
|
local function press_shift_tab()
|
|
|
|
local current_line = vim.api.nvim_get_current_line()
|
|
|
|
local current_line = vim.api.nvim_get_current_line()
|
|
|
|
|
|
|
|
|
|
|
|
-- Check if current line matches the patterns
|
|
|
|
-- Check if current line matches the patterns
|
|
|
@ -52,10 +59,10 @@ local function press_shift_tab()
|
|
|
|
print("shift tab pressed, allegedly")
|
|
|
|
print("shift tab pressed, allegedly")
|
|
|
|
vim.api.nvim_feedkeys("C-d", "i", true)
|
|
|
|
vim.api.nvim_feedkeys("C-d", "i", true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- function that checks if the current line starts with the string "- [ ]" or "- [x]" and toggles the x
|
|
|
|
-- function that checks if the current line starts with the string "- [ ]" or "- [x]" and toggles the x
|
|
|
|
local function toggle_todo()
|
|
|
|
local function toggle_todo()
|
|
|
|
local openpattern = "%- %[[ ]%]"
|
|
|
|
local openpattern = "%- %[[ ]%]"
|
|
|
|
local closedpattern = "%- %[[x]%]"
|
|
|
|
local closedpattern = "%- %[[x]%]"
|
|
|
|
local titleopenpattern = "# %[[ ]%]"
|
|
|
|
local titleopenpattern = "# %[[ ]%]"
|
|
|
@ -76,10 +83,10 @@ local function toggle_todo()
|
|
|
|
line = string.gsub(line, titleclosedpattern, "# [ ]")
|
|
|
|
line = string.gsub(line, titleclosedpattern, "# [ ]")
|
|
|
|
vim.api.nvim_set_current_line(line)
|
|
|
|
vim.api.nvim_set_current_line(line)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- function that checks if the current line doesn't start with the string "- [ ] " and, if it doesn't, adds the string at the beginning of the line
|
|
|
|
-- function that checks if the current line doesn't start with the string "- [ ] " and, if it doesn't, adds the string at the beginning of the line
|
|
|
|
local function add_todo()
|
|
|
|
local function add_todo()
|
|
|
|
local openpattern = "^%s*%- %[[ ]%]"
|
|
|
|
local openpattern = "^%s*%- %[[ ]%]"
|
|
|
|
local closedpattern = "^%s*%- %[[x]%]"
|
|
|
|
local closedpattern = "^%s*%- %[[x]%]"
|
|
|
|
|
|
|
|
|
|
|
@ -101,10 +108,10 @@ local function add_todo()
|
|
|
|
vim.api.nvim_set_current_line(line)
|
|
|
|
vim.api.nvim_set_current_line(line)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- function that checks if the current line starts with the string "- [ ]" or "- [x]" and, if it does, removes that string from the line
|
|
|
|
-- function that checks if the current line starts with the string "- [ ]" or "- [x]" and, if it does, removes that string from the line
|
|
|
|
local function remove_todo()
|
|
|
|
local function remove_todo()
|
|
|
|
local openpattern = "%- %[[ ]%]"
|
|
|
|
local openpattern = "%- %[[ ]%]"
|
|
|
|
local closedpattern = "%- %[[x]%]"
|
|
|
|
local closedpattern = "%- %[[x]%]"
|
|
|
|
local line = vim.api.nvim_get_current_line()
|
|
|
|
local line = vim.api.nvim_get_current_line()
|
|
|
@ -116,25 +123,43 @@ local function remove_todo()
|
|
|
|
line = string.gsub(line, closedpattern, "")
|
|
|
|
line = string.gsub(line, closedpattern, "")
|
|
|
|
vim.api.nvim_set_current_line(line)
|
|
|
|
vim.api.nvim_set_current_line(line)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Set up buffer-local keymaps
|
|
|
|
|
|
|
|
-- Use buffer = 0 to target the current buffer
|
|
|
|
|
|
|
|
local map_opts = { noremap = true, silent = true, buffer = 0 }
|
|
|
|
|
|
|
|
local expr_map_opts = { noremap = true, expr = true, silent = true, buffer = 0 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vim.keymap.set("n", "<leader>t", function() end, { desc = "+TODOs", buffer = 0 }) -- Placeholder, keep silent=false if needed
|
|
|
|
|
|
|
|
vim.keymap.set("i", "<CR>", press_enter, { desc = "Todoer: Handle Enter", expr = true, buffer = 0 }) -- Keep expr=true, noremap=true is default
|
|
|
|
|
|
|
|
vim.keymap.set("i", "<TAB>", press_tab, { desc = "Todoer: Handle Tab", expr = true, buffer = 0 }) -- Keep expr=true
|
|
|
|
|
|
|
|
vim.keymap.set("i", "<S-Tab>", press_shift_tab, { desc = "Todoer: Handle Shift-Tab", expr = true, buffer = 0 }) -- Keep expr=true
|
|
|
|
|
|
|
|
vim.keymap.set("n", "<leader>tt", toggle_todo, { desc = "Todoer: Toggle TODO", buffer = 0 })
|
|
|
|
|
|
|
|
vim.keymap.set("n", "<leader>ta", add_todo, { desc = "Todoer: Add TODO", buffer = 0 })
|
|
|
|
|
|
|
|
vim.keymap.set("n", "<leader>td", remove_todo, { desc = "Todoer: Remove TODO", buffer = 0 })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Optional: Notify that keymaps are set for this buffer
|
|
|
|
|
|
|
|
-- vim.notify("Todoer keymaps activated for this buffer", vim.log.levels.INFO)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- Setup function
|
|
|
|
-- Setup function: Called by the user in their config
|
|
|
|
-- This function will be called by the user to configure and activate the plugin
|
|
|
|
|
|
|
|
-- For now, it just sets up the default keymaps
|
|
|
|
|
|
|
|
function M.setup(opts)
|
|
|
|
function M.setup(opts)
|
|
|
|
-- opts is a placeholder for future configuration options
|
|
|
|
-- Merge user options with defaults
|
|
|
|
opts = opts or {}
|
|
|
|
local config = vim.tbl_deep_extend("force", {}, defaults, opts or {})
|
|
|
|
|
|
|
|
|
|
|
|
-- Set up the keymaps
|
|
|
|
-- Create an autocommand group to ensure we can clear it later if needed
|
|
|
|
vim.keymap.set("n", "<leader>t", function() end, { desc = "+TODOs" })
|
|
|
|
local group = vim.api.nvim_create_augroup("TodoerUserSetup", { clear = true })
|
|
|
|
vim.keymap.set("i", "<CR>", press_enter, { desc = "On enter", noremap = true, expr = true })
|
|
|
|
|
|
|
|
vim.keymap.set("i", "<TAB>", press_tab, { desc = "On tab", noremap = true, expr = true })
|
|
|
|
-- Create the autocommand
|
|
|
|
vim.keymap.set("i", "S-Tab", press_shift_tab, { desc = "On shift tab", noremap = true, expr = true })
|
|
|
|
vim.api.nvim_create_autocmd("FileType", {
|
|
|
|
vim.keymap.set("n", "<leader>tt", toggle_todo, { desc = "Toggle TODO" })
|
|
|
|
group = group,
|
|
|
|
vim.keymap.set("n", "<leader>ta", add_todo, { desc = "Add TODO" })
|
|
|
|
pattern = config.filetypes, -- Use filetypes from config
|
|
|
|
vim.keymap.set("n", "<leader>td", remove_todo, { desc = "Remove TODO" })
|
|
|
|
desc = "Setup Todoer keymaps for specific filetypes",
|
|
|
|
|
|
|
|
callback = function()
|
|
|
|
print("Todoer setup complete!") -- Added a print statement for confirmation
|
|
|
|
-- Call the function that sets up buffer-local keymaps
|
|
|
|
|
|
|
|
setup_buffer_keymaps()
|
|
|
|
|
|
|
|
end,
|
|
|
|
|
|
|
|
})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-- Return the module table
|
|
|
|
-- Return the module table
|
|
|
|