------------------------------------------------------------------------------- -- Tools to deal with tasks ------------------------------------------------------------------------------- local Tasks = {} local Configuration = require('configuration') local api = vim.api ------------------------------------------------------------------------------- -- Internal Functions ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- Public Interface ------------------------------------------------------------------------------- --- Toggles a task completion status function Tasks.toggle() local line_number = api.nvim_win_get_cursor(0)[1] local line = api.nvim_get_current_line() local unchecked_pattern = '^(%s*)%- %[ %]' local unchecked_important_pattern = '^(%s*)%* %[ %]' local checked_pattern = '^(%s*)%- %[x%]' local checked_important_pattern = '^(%s*)%* %[x%]' 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() local unchecked_pattern = '^(%s*)%- %[ %]' local unchecked_important_pattern = '^(%s*)%* %[ %]' local checked_pattern = '^(%s*)%- %[x%]' local checked_important_pattern = '^(%s*)%* %[x%]' 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}) end --- Inserts a new task at the cursor location function Tasks.insert() vim.cmd('normal! o- [ ] ') vim.cmd('startinsert!') end --- Captures a new task into the inbox function Tasks.capture() error('Not yet implemented') end --- Tag a task function Tasks.tag() error('Not yet implemented') end --- Reschedule a task for today function Tasks.reschedule_for_today() error('Not yet implemented') end --- Reschedule a task for tomorrow function Tasks.reschedule_for_tomorrow() error('Not yet implemented') end --- Reschedule a task for someday function Tasks.reschedule_for_someday() error('Not yet implemented') end --- Reschedule a task for an arbitrary date function Tasks.reschedule(new_date) error('Not yet implemented') end return Tasks