summary refs log tree commit diff
path: root/.vim/after/ftplugin/todofile.lua
diff options
context:
space:
mode:
Diffstat (limited to '.vim/after/ftplugin/todofile.lua')
-rw-r--r--.vim/after/ftplugin/todofile.lua23
1 files changed, 23 insertions, 0 deletions
diff --git a/.vim/after/ftplugin/todofile.lua b/.vim/after/ftplugin/todofile.lua
new file mode 100644
index 0000000..2080d39
--- /dev/null
+++ b/.vim/after/ftplugin/todofile.lua
@@ -0,0 +1,23 @@
+local function toggle_todo()
+  local ln, n = vim.api.nvim_get_current_line(), 0
+  ln, n = string.gsub(ln, 'TODO', 'DONE', 1)
+  if n > 0 then
+    goto set_line
+  end
+  ln, n = string.gsub(ln, 'DONE', 'TODO', 1)
+  if n > 0 then
+    goto set_line
+  end
+  ln, n = string.gsub(ln, '^(-|*) ', '%1 TODO ')
+  if n > 0 then
+    goto set_line
+  end
+
+  goto exit -- skip over set_current_line
+
+  ::set_line::
+  vim.api.nvim_set_current_line(ln)
+
+  ::exit::
+end
+vim.keymap.set('n', '<space><space>', toggle_todo, { desc = 'toggle todo', buffer = true })