diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-06-19 18:34:13 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-06-19 18:34:13 +0900 |
| commit | 307fceea38b7352a79b0bdb87025a34b76973867 (patch) | |
| tree | 382eb3e6a11973bc2c6ba33eee14d43ec2a9566b /ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tasks.lua | |
| parent | b66f68b8c014a3041c936ee9de1b57db5bcb50fb (diff) | |
updates
Diffstat (limited to 'ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tasks.lua')
| -rw-r--r-- | ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tasks.lua | 227 |
1 files changed, 0 insertions, 227 deletions
diff --git a/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tasks.lua b/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tasks.lua deleted file mode 100644 index 34d5636..0000000 --- a/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tasks.lua +++ /dev/null @@ -1,227 +0,0 @@ --- ~/.config/nvim/lua/user_functions/tasks.lua -local M = {} - --- Import the create_floating_scratch function from utils.lua -local utils = require("thesiahxyz.utils.utils") - -function M.create_or_update_task() - local current_line = vim.fn.getline(".") - local cursor_pos = vim.fn.col(".") - local file_path = vim.fn.expand("%:p") -- Get full path of current file - local line_number = vim.fn.line(".") -- Get current line number - - -- Keywords we are looking for - local keywords = { "TODO", "HACK", "NOTE", "PERF", "TEST", "WARN" } - - for _, keyword in ipairs(keywords) do - local start_index, end_index = string.find(current_line, keyword) - if start_index then - local task_description = string.sub(current_line, end_index + 2, cursor_pos - 1) - task_description = string.gsub(task_description, "%(siah%)", "") - local task_tag = "+" .. string.lower(keyword) - - -- Ask for project and other tags - local project = vim.fn.input("Enter project name: ") - local additional_tags_input = vim.fn.input("Enter additional tags separated by spaces: ") - local additional_tags = {} - - -- Prefix each additional tag with a "+" - for tag in additional_tags_input:gmatch("%S+") do - table.insert(additional_tags, "+" .. tag) - end - - -- Prepare the task command - local task_cmd = string.format('task add %s "%s"', task_tag, task_description) - - -- Add additional tags if available - if #additional_tags > 0 then - task_cmd = task_cmd .. " " .. table.concat(additional_tags, " ") - end - - -- Add project if available - if project and #project > 0 then - task_cmd = task_cmd .. " project:" .. project - end - - -- Execute the task add command - local output = vim.fn.system(task_cmd) - print("Output: ", output) - - for line in output:gmatch("[^\r\n]+") do - local task_id = string.match(line, "Created task (%d+)%.") - if task_id then - print("Task ID extracted: ", task_id) - - -- Annotate task with filename and line number in the nvimline format - local annotation = string.format("nvimline:%s:%s", line_number, file_path) - local annotate_cmd = string.format('task %s annotate "%s"', task_id, annotation) - local annotate_output = vim.fn.system(annotate_cmd) - - print("Annotation output: ", annotate_output) - return - else - print("Failed to extract task ID") - end - end - end - end -end - -vim.api.nvim_set_keymap( - "i", - "<C-t>", - "<cmd>lua require('thesiahxyz.utils.tasks').create_or_update_task()<cr>", - { noremap = true, silent = true, desc = "Create/Update task" } -) - -function M.mark_task_done() - -- Get the current line and parse it - local line = vim.api.nvim_get_current_line() - print("Original line: ", line) - - -- Uncomment the line - vim.cmd("normal! gcc") - line = vim.api.nvim_get_current_line() - -- Remove (piotr1215) from the line - line = string.gsub(line, "%s*%(siah%)%s*", " ") - print("Uncommented line: ", line) - - local patterns = { "TODO:", "HACK:", "NOTE:", "PERF:", "TEST:", "WARN:" } - local taskDescription = nil - for _, pattern in ipairs(patterns) do - local start_idx = string.find(line, pattern) - if start_idx then - taskDescription = string.sub(line, start_idx + string.len(pattern) + 1) - break - end - end - print("Task description: ", taskDescription or "nil") - - -- If a task description was found, mark it as done - if taskDescription then - local output = vim.fn.system("yes | task description~'" .. taskDescription .. "' done") - print("Command output: ", output) - -- Check the command's output to make sure the task was marked done - if string.find(output, "Completed") then - -- Delete the current line - vim.cmd([[normal dd]]) - end - end -end - -vim.api.nvim_set_keymap( - "n", - "<localleader>td", - "<Cmd>lua require('thesiahxyz.utils.tasks').mark_task_done()<CR>", - { noremap = true, silent = true, desc = "Mark task done" } -) - -function M.go_to_task_in_taskwarrior_tui() - -- Get the current line and save it as the original line - local original_line = vim.api.nvim_get_current_line() - - -- Uncomment the line - vim.cmd("normal! gcc") - local uncommented_line = vim.api.nvim_get_current_line() - - local patterns = { "TODO:", "HACK:", "NOTE:", "PERF:", "TEST:", "WARN:" } - local taskDescription = nil - - for _, pattern in ipairs(patterns) do - local start_idx = string.find(uncommented_line, pattern) - if start_idx then - taskDescription = string.sub(uncommented_line, start_idx + string.len(pattern) + 1) - taskDescription = string.sub(taskDescription, 1, 50) - break - end - end - - -- If a task description was found, use it to go to the task in taskwarrior-tui - if taskDescription then - -- print("Sleeping for 2 seconds before tmux switch...") - -- vim.cmd("sleep 2") -- sleep for 2 seconds - local output = vim.fn.system(" ~/.local/bin/opentasktui '" .. taskDescription .. "'") - end - - -- Replace the line back with the original - vim.api.nvim_set_current_line(original_line) -end - -vim.api.nvim_set_keymap( - "n", - "<localleader>tt", - "<Cmd>lua require('thesiahxyz.utils.tasks').go_to_task_in_taskwarrior_tui()<CR>", - { noremap = true, silent = true, desc = "Open taskwarrior-tui" } -) - -function M.process_task_list(start_line, end_line, ...) - local args = { ... } - local modifiers = table.concat(args, " ") - local lines - - -- If no range is provided, use the entire buffer. - if not start_line or not end_line then - start_line, end_line = 1, vim.api.nvim_buf_line_count(0) - end - - lines = vim.api.nvim_buf_get_lines(0, start_line - 1, end_line, false) - - local new_lines = { "#!/bin/sh", "set -e" } - - for _, line in ipairs(lines) do - local trimmed_line = line:gsub("^[•*%-%+]+%s*", "") - local links = {} - - trimmed_line = trimmed_line:gsub("(https?://[%w%.%-%_/&%?=%~]+)", function(link) - table.insert(links, link) - return "" - end) - - if #trimmed_line > 0 then - -- No more "\n" before "# Adding task:"; instead, just ensure it's a new entry in the table. - table.insert(new_lines, "") -- Ensure there's an empty line before adding a new task if desired. - table.insert(new_lines, "# Adding task: " .. trimmed_line) - table.insert( - new_lines, - "output=$(task add " .. (modifiers ~= "" and modifiers .. " " or "") .. '"' .. trimmed_line .. '")' - ) - table.insert( - new_lines, - 'task_id=$(echo "$output" | grep -o "Created task [0-9]*." | cut -d " " -f 3 | tr -d ".")' - ) - - for _, link in ipairs(links) do - table.insert(new_lines, "task $task_id annotate -- " .. link) - end - end - end - - -- Call the create_floating_scratch function from utils.lua - utils.create_floating_scratch(new_lines) -end - -function M.my_custom_complete(arg_lead, cmd_line, cursor_pos) - -- This is your list of arguments. - local items = { "project:", "due:", "+next", "duration:" } - - -- Filter the items based on the argument lead. - local matches = {} - for _, item in ipairs(items) do - if item:find(arg_lead) == 1 then - table.insert(matches, item) - end - end - - return matches -end - -vim.api.nvim_create_user_command("ProcessTaskList", function(input) - M.process_task_list(1, vim.api.nvim_buf_line_count(0), unpack(input.fargs)) -end, { - nargs = "*", - complete = function(arg_lead, cmd_line, cursor_pos) - -- Call the custom completion function - return M.my_custom_complete(arg_lead, cmd_line, cursor_pos) - end, -}) -return M |
