+function Tasks.toggle()
+ local line_number = api.nvim_win_get_cursor(0)[1]
+ local line = api.nvim_get_current_line()
+
+ if line:match(unchecked_pattern) then
+ line = line:gsub(unchecked_pattern, '%1- [x]', 1)
+ elseif line:match(unchecked_important_pattern) then
+ line = line:gsub(unchecked_important_pattern, '%1* [x]', 1)
+ elseif line:match(checked_pattern) then
+ line = line:gsub(checked_pattern, '%1- [ ]', 1)
+ elseif line:match(checked_important_pattern) then
+ line = line:gsub(checked_important_pattern, '%1* [ ]', 1)
+ end
+
+ api.nvim_buf_set_lines(0, line_number - 1, line_number, false, {line})
+end
+
+--- Toggles a task completion status
+function Tasks.toggle_importance()
+ local line_number = api.nvim_win_get_cursor(0)[1]
+ local line = api.nvim_get_current_line()
+
+ if line:match(unchecked_pattern) then
+ line = line:gsub(unchecked_pattern, '%1* [ ]', 1)
+ elseif line:match(unchecked_important_pattern) then
+ line = line:gsub(unchecked_important_pattern, '%1- [ ]', 1)
+ elseif line:match(checked_pattern) then
+ line = line:gsub(checked_pattern, '%1* [x]', 1)
+ elseif line:match(checked_important_pattern) then
+ line = line:gsub(checked_important_pattern, '%1- [x]', 1)
+ end
+
+ api.nvim_buf_set_lines(0, line_number - 1, line_number, false, {line})