summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.config/nvim/after/ftplugin/markdown.lua30
1 files changed, 30 insertions, 0 deletions
diff --git a/.config/nvim/after/ftplugin/markdown.lua b/.config/nvim/after/ftplugin/markdown.lua
index d0513b6..935d9ac 100644
--- a/.config/nvim/after/ftplugin/markdown.lua
+++ b/.config/nvim/after/ftplugin/markdown.lua
@@ -75,3 +75,33 @@ vim.api.nvim_set_hl(0, "@markup.link.label.markdown_inline", { underline = true,
vim.b.autoformat = true
vim.b.format_func = format
+
+local function check_checklist_item()
+ local line = vim.api.nvim_get_current_line()
+ if line:match("^%s*%- %[ %] ") == nil then
+ return
+ end
+ local edited_line = line:gsub("%[ %]", "[X]", 1)
+ edited_line = edited_line:gsub("^(%s*%- %[X%] )(.*)", "%1~%2~", 1)
+ local start = vim.api.nvim_win_get_cursor(0)[1] - 1
+ vim.api.nvim_buf_set_lines(0, start, start + 1, false, { edited_line })
+end
+
+local function uncheck_checklist_item()
+ local line = vim.api.nvim_get_current_line()
+ if line:match("^%s*%- %[X%] ") == nil then
+ return
+ end
+ local edited_line = line:gsub("%[X%]", "[ ]", 1)
+ edited_line = edited_line:gsub("~", "", 2)
+ local start = vim.api.nvim_win_get_cursor(0)[1] - 1
+ vim.api.nvim_buf_set_lines(0, start, start + 1, false, { edited_line })
+end
+
+vim.api.nvim_buf_create_user_command(0, "MarkdownListCheck", check_checklist_item, { desc = "Check checklist item" })
+vim.api.nvim_buf_create_user_command(
+ 0,
+ "MarkdownListUncheck",
+ uncheck_checklist_item,
+ { desc = "Uncheck checklist item" }
+)