feat(nvim): updated config to use vim.pack instead of lazy
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
local M = {}
|
||||
|
||||
local function get_current_time()
|
||||
return os.date("%H:%M")
|
||||
end
|
||||
|
||||
local function get_active_task_line()
|
||||
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||
local active_lines = {}
|
||||
for i, line in ipairs(lines) do
|
||||
if line:match("#status/in%-progress") then
|
||||
table.insert(active_lines, {line = line, lnum = i})
|
||||
end
|
||||
end
|
||||
|
||||
if #active_lines == 0 then
|
||||
print("No active task found (#status/in-progress).")
|
||||
return nil, "no_active"
|
||||
elseif #active_lines > 1 then
|
||||
print("Multiple active tasks found. Please ensure only one task is #status/in-progress.")
|
||||
return nil, "multiple_active"
|
||||
else
|
||||
return active_lines[1].line, active_lines[1].lnum
|
||||
end
|
||||
end
|
||||
|
||||
function M.create_new_task()
|
||||
local desc = vim.fn.input("Task Description: ")
|
||||
if desc == '' then return end
|
||||
|
||||
local project = vim.fn.input("Project (leave empty if none, e.g., '[[Project Name]]'): ")
|
||||
local priority_options = {"high", "medium", "low"}
|
||||
local priority_idx = vim.fn.inputlist("Priority:", priority_options)
|
||||
local priority = priority_options[tonumber(priority_idx)] or "medium"
|
||||
|
||||
local category_options = {"work", "meeting", "learning", "journal", "focused-work", "break"}
|
||||
local category_idx = vim.fn.inputlist("Category:", category_options)
|
||||
local category = category_options[tonumber(category_idx)] or "work"
|
||||
|
||||
local new_task_line = string.format("- [ ] %s %s #status/todo #priority/%s #%s",
|
||||
desc, project, priority, category)
|
||||
|
||||
vim.api.nvim_put({new_task_line}, "l", true, true)
|
||||
print("New task created: " .. new_task_line)
|
||||
end
|
||||
|
||||
function M.start_task()
|
||||
local current_line, lnum = get_active_task_line()
|
||||
if not current_line then return end
|
||||
|
||||
local new_line = current_line
|
||||
local current_time = get_current_time()
|
||||
|
||||
if new_line:match("start:: %d%d:%d%d") then
|
||||
print("Task already has a start time. Updating to current time.")
|
||||
new_line = new_line:gsub("start:: %d%d:%d%d", "start:: " .. current_time)
|
||||
else
|
||||
new_line = new_line .. " start:: " .. current_time
|
||||
end
|
||||
|
||||
-- Clear end time if present when starting a task again
|
||||
new_line = new_line:gsub(" end:: %d%d:%d%d", "")
|
||||
|
||||
vim.api.nvim_buf_set_lines(0, lnum - 1, lnum, false, {new_line})
|
||||
print("Task started/resumed: " .. current_time)
|
||||
end
|
||||
|
||||
function M.stop_task()
|
||||
local current_line, lnum = get_active_task_line()
|
||||
if not current_line then return end
|
||||
|
||||
local new_line = current_line
|
||||
local current_time = get_current_time()
|
||||
|
||||
if new_line:match("end:: %d%d:%d%d") then
|
||||
print("Task already has an end time. Updating to current time.")
|
||||
new_line = new_line:gsub("end:: %d%d:%d%d", "end:: " .. current_time)
|
||||
else
|
||||
new_line = new_line .. " end:: " .. current_time
|
||||
end
|
||||
|
||||
-- Option to change status to done
|
||||
local change_status = vim.fn.confirm("Change status to #status/done?", "&Yes\n&No", 2)
|
||||
if change_status == 1 then -- Yes
|
||||
new_line = new_line:gsub("#status/in%-progress", "#status/done")
|
||||
end
|
||||
|
||||
vim.api.nvim_buf_set_lines(0, lnum - 1, lnum, false, {new_line})
|
||||
print("Task stopped: " .. current_time)
|
||||
end
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user